diff --git a/README.md b/README.md
index d560eba..953e2d3 100644
--- a/README.md
+++ b/README.md
@@ -4,4 +4,5 @@
 
 ## Github Actions
 
-- [diff-only](diff-only/README.md) action
\ No newline at end of file
+- [diff-only](diff-only/README.md) action
+- [setup-maven](setup-maven/README.md)
diff --git a/setup-maven/.prettierrc.json b/setup-maven/.prettierrc.json
new file mode 100644
index 0000000..f6736bc
--- /dev/null
+++ b/setup-maven/.prettierrc.json
@@ -0,0 +1,11 @@
+{
+    "printWidth": 80,
+    "tabWidth": 2,
+    "useTabs": false,
+    "semi": true,
+    "singleQuote": true,
+    "trailingComma": "none",
+    "bracketSpacing": false,
+    "arrowParens": "avoid",
+    "parser": "typescript"
+  }
\ No newline at end of file
diff --git a/setup-maven/README.md b/setup-maven/README.md
new file mode 100644
index 0000000..72aee00
--- /dev/null
+++ b/setup-maven/README.md
@@ -0,0 +1,10 @@
+### How To Use
+
+Add this step into workflow
+
+```
+    - name: Set up Maven
+      uses: aahmed-se/setup-maven@v3
+      with:
+        maven-version: 3.6.1
+```
diff --git a/setup-maven/action.yml b/setup-maven/action.yml
new file mode 100644
index 0000000..8864fc7
--- /dev/null
+++ b/setup-maven/action.yml
@@ -0,0 +1,10 @@
+name: 'Setup Maven 3'
+description: 'Install a specific version of Apache Maven and add it to the PATH'
+author: 'aahmed-se'
+inputs:
+  maven-version:
+    description: 'Version Spec of the version to use.  Examples: 10.x, 10.15.1, >=10.15.0'
+    default: '3.6.1'
+runs:
+  using: 'node12'
+  main: 'lib/setup-maven.js'
diff --git a/setup-maven/lib/installer.js b/setup-maven/lib/installer.js
new file mode 100644
index 0000000..d8688ad
--- /dev/null
+++ b/setup-maven/lib/installer.js
@@ -0,0 +1,66 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// Load tempDirectory before it gets wiped by tool-cache
+let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || '';
+const core = __importStar(require("@actions/core"));
+const tc = __importStar(require("@actions/tool-cache"));
+const path = __importStar(require("path"));
+if (!tempDirectory) {
+    let baseLocation;
+    if (process.platform === 'win32') {
+        baseLocation = process.env['USERPROFILE'] || 'C:\\';
+    }
+    else {
+        if (process.platform === 'darwin') {
+            baseLocation = '/Users';
+        }
+        else {
+            baseLocation = '/home';
+        }
+    }
+    tempDirectory = path.join(baseLocation, 'actions', 'temp');
+}
+function getMaven(version) {
+    return __awaiter(this, void 0, void 0, function* () {
+        let toolPath;
+        toolPath = tc.find('maven', version);
+        if (!toolPath) {
+            toolPath = yield downloadMaven(version);
+        }
+        toolPath = path.join(toolPath, 'bin');
+        core.addPath(toolPath);
+    });
+}
+exports.getMaven = getMaven;
+function downloadMaven(version) {
+    return __awaiter(this, void 0, void 0, function* () {
+        const toolDirectoryName = `apache-maven-${version}`;
+        const downloadUrl = `https://archive.apache.org/dist/maven/maven-3/${version}/binaries/${toolDirectoryName}-bin.tar.gz`;
+        console.log(`downloading ${downloadUrl}`);
+        try {
+            const downloadPath = yield tc.downloadTool(downloadUrl);
+            const extractedPath = yield tc.extractTar(downloadPath);
+            let toolRoot = path.join(extractedPath, toolDirectoryName);
+            return yield tc.cacheDir(toolRoot, 'maven', version);
+        }
+        catch (err) {
+            throw err;
+        }
+    });
+}
diff --git a/setup-maven/lib/setup-maven.js b/setup-maven/lib/setup-maven.js
new file mode 100644
index 0000000..48148b7
--- /dev/null
+++ b/setup-maven/lib/setup-maven.js
@@ -0,0 +1,34 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __importStar(require("@actions/core"));
+const installer = __importStar(require("./installer"));
+function run() {
+    return __awaiter(this, void 0, void 0, function* () {
+        try {
+            let version = core.getInput('maven-version');
+            if (version) {
+                yield installer.getMaven(version);
+            }
+        }
+        catch (error) {
+            core.setFailed(error.message);
+        }
+    });
+}
+run();
diff --git a/setup-maven/node_modules/.bin/semver b/setup-maven/node_modules/.bin/semver
new file mode 100755
index 0000000..666034a
--- /dev/null
+++ b/setup-maven/node_modules/.bin/semver
@@ -0,0 +1,174 @@
+#!/usr/bin/env node
+// Standalone semver comparison program.
+// Exits successfully and prints matching version(s) if
+// any supplied version is valid and passes all tests.
+
+var argv = process.argv.slice(2)
+
+var versions = []
+
+var range = []
+
+var inc = null
+
+var version = require('../package.json').version
+
+var loose = false
+
+var includePrerelease = false
+
+var coerce = false
+
+var rtl = false
+
+var identifier
+
+var semver = require('../semver')
+
+var reverse = false
+
+var options = {}
+
+main()
+
+function main () {
+  if (!argv.length) return help()
+  while (argv.length) {
+    var a = argv.shift()
+    var indexOfEqualSign = a.indexOf('=')
+    if (indexOfEqualSign !== -1) {
+      a = a.slice(0, indexOfEqualSign)
+      argv.unshift(a.slice(indexOfEqualSign + 1))
+    }
+    switch (a) {
+      case '-rv': case '-rev': case '--rev': case '--reverse':
+        reverse = true
+        break
+      case '-l': case '--loose':
+        loose = true
+        break
+      case '-p': case '--include-prerelease':
+        includePrerelease = true
+        break
+      case '-v': case '--version':
+        versions.push(argv.shift())
+        break
+      case '-i': case '--inc': case '--increment':
+        switch (argv[0]) {
+          case 'major': case 'minor': case 'patch': case 'prerelease':
+          case 'premajor': case 'preminor': case 'prepatch':
+            inc = argv.shift()
+            break
+          default:
+            inc = 'patch'
+            break
+        }
+        break
+      case '--preid':
+        identifier = argv.shift()
+        break
+      case '-r': case '--range':
+        range.push(argv.shift())
+        break
+      case '-c': case '--coerce':
+        coerce = true
+        break
+      case '--rtl':
+        rtl = true
+        break
+      case '--ltr':
+        rtl = false
+        break
+      case '-h': case '--help': case '-?':
+        return help()
+      default:
+        versions.push(a)
+        break
+    }
+  }
+
+  var options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl }
+
+  versions = versions.map(function (v) {
+    return coerce ? (semver.coerce(v, options) || { version: v }).version : v
+  }).filter(function (v) {
+    return semver.valid(v)
+  })
+  if (!versions.length) return fail()
+  if (inc && (versions.length !== 1 || range.length)) { return failInc() }
+
+  for (var i = 0, l = range.length; i < l; i++) {
+    versions = versions.filter(function (v) {
+      return semver.satisfies(v, range[i], options)
+    })
+    if (!versions.length) return fail()
+  }
+  return success(versions)
+}
+
+function failInc () {
+  console.error('--inc can only be used on a single version with no range')
+  fail()
+}
+
+function fail () { process.exit(1) }
+
+function success () {
+  var compare = reverse ? 'rcompare' : 'compare'
+  versions.sort(function (a, b) {
+    return semver[compare](a, b, options)
+  }).map(function (v) {
+    return semver.clean(v, options)
+  }).map(function (v) {
+    return inc ? semver.inc(v, inc, options, identifier) : v
+  }).forEach(function (v, i, _) { console.log(v) })
+}
+
+function help () {
+  console.log(['SemVer ' + version,
+    '',
+    'A JavaScript implementation of the https://semver.org/ specification',
+    'Copyright Isaac Z. Schlueter',
+    '',
+    'Usage: semver [options] <version> [<version> [...]]',
+    'Prints valid versions sorted by SemVer precedence',
+    '',
+    'Options:',
+    '-r --range <range>',
+    '        Print versions that match the specified range.',
+    '',
+    '-i --increment [<level>]',
+    '        Increment a version by the specified level.  Level can',
+    '        be one of: major, minor, patch, premajor, preminor,',
+    "        prepatch, or prerelease.  Default level is 'patch'.",
+    '        Only one version may be specified.',
+    '',
+    '--preid <identifier>',
+    '        Identifier to be used to prefix premajor, preminor,',
+    '        prepatch or prerelease version increments.',
+    '',
+    '-l --loose',
+    '        Interpret versions and ranges loosely',
+    '',
+    '-p --include-prerelease',
+    '        Always include prerelease versions in range matching',
+    '',
+    '-c --coerce',
+    '        Coerce a string into SemVer if possible',
+    '        (does not imply --loose)',
+    '',
+    '--rtl',
+    '        Coerce version strings right to left',
+    '',
+    '--ltr',
+    '        Coerce version strings left to right (default)',
+    '',
+    'Program exits successfully if any valid version satisfies',
+    'all supplied ranges, and prints all satisfying versions.',
+    '',
+    'If no satisfying versions are found, then exits failure.',
+    '',
+    'Versions are printed in ascending order, so supplying',
+    'multiple versions to the utility will just sort them.'
+  ].join('\n'))
+}
diff --git a/setup-maven/node_modules/.bin/uuid b/setup-maven/node_modules/.bin/uuid
new file mode 100755
index 0000000..502626e
--- /dev/null
+++ b/setup-maven/node_modules/.bin/uuid
@@ -0,0 +1,65 @@
+#!/usr/bin/env node
+var assert = require('assert');
+
+function usage() {
+  console.log('Usage:');
+  console.log('  uuid');
+  console.log('  uuid v1');
+  console.log('  uuid v3 <name> <namespace uuid>');
+  console.log('  uuid v4');
+  console.log('  uuid v5 <name> <namespace uuid>');
+  console.log('  uuid --help');
+  console.log('\nNote: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122');
+}
+
+var args = process.argv.slice(2);
+
+if (args.indexOf('--help') >= 0) {
+  usage();
+  process.exit(0);
+}
+var version = args.shift() || 'v4';
+
+switch (version) {
+  case 'v1':
+    var uuidV1 = require('../v1');
+    console.log(uuidV1());
+    break;
+
+  case 'v3':
+    var uuidV3 = require('../v3');
+
+    var name = args.shift();
+    var namespace = args.shift();
+    assert(name != null, 'v3 name not specified');
+    assert(namespace != null, 'v3 namespace not specified');
+
+    if (namespace == 'URL') namespace = uuidV3.URL;
+    if (namespace == 'DNS') namespace = uuidV3.DNS;
+
+    console.log(uuidV3(name, namespace));
+    break;
+
+  case 'v4':
+    var uuidV4 = require('../v4');
+    console.log(uuidV4());
+    break;
+
+  case 'v5':
+    var uuidV5 = require('../v5');
+
+    var name = args.shift();
+    var namespace = args.shift();
+    assert(name != null, 'v5 name not specified');
+    assert(namespace != null, 'v5 namespace not specified');
+
+    if (namespace == 'URL') namespace = uuidV5.URL;
+    if (namespace == 'DNS') namespace = uuidV5.DNS;
+
+    console.log(uuidV5(name, namespace));
+    break;
+
+  default:
+    usage();
+    process.exit(1);
+}
diff --git a/setup-maven/node_modules/.bin/which b/setup-maven/node_modules/.bin/which
new file mode 100755
index 0000000..7cee372
--- /dev/null
+++ b/setup-maven/node_modules/.bin/which
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+var which = require("../")
+if (process.argv.length < 3)
+  usage()
+
+function usage () {
+  console.error('usage: which [-as] program ...')
+  process.exit(1)
+}
+
+var all = false
+var silent = false
+var dashdash = false
+var args = process.argv.slice(2).filter(function (arg) {
+  if (dashdash || !/^-/.test(arg))
+    return true
+
+  if (arg === '--') {
+    dashdash = true
+    return false
+  }
+
+  var flags = arg.substr(1).split('')
+  for (var f = 0; f < flags.length; f++) {
+    var flag = flags[f]
+    switch (flag) {
+      case 's':
+        silent = true
+        break
+      case 'a':
+        all = true
+        break
+      default:
+        console.error('which: illegal option -- ' + flag)
+        usage()
+    }
+  }
+  return false
+})
+
+process.exit(args.reduce(function (pv, current) {
+  try {
+    var f = which.sync(current, { all: all })
+    if (all)
+      f = f.join('\n')
+    if (!silent)
+      console.log(f)
+    return pv;
+  } catch (e) {
+    return 1;
+  }
+}, 0))
diff --git a/setup-maven/node_modules/@actions/core/README.md b/setup-maven/node_modules/@actions/core/README.md
new file mode 100644
index 0000000..457f73c
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/README.md
@@ -0,0 +1,140 @@
+# `@actions/core`
+
+> Core functions for setting results, logging, registering secrets and exporting variables across actions
+
+## Usage
+
+### Import the package
+
+```js
+// javascript
+const core = require('@actions/core');
+
+// typescript
+import * as core from '@actions/core';
+```
+
+#### Inputs/Outputs
+
+Action inputs can be read with `getInput`.  Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.
+
+```js
+const myInput = core.getInput('inputName', { required: true });
+
+core.setOutput('outputKey', 'outputVal');
+```
+
+#### Exporting variables
+
+Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.
+
+```js
+core.exportVariable('envVar', 'Val');
+```
+
+#### Setting a secret
+
+Setting a secret registers the secret with the runner to ensure it is masked in logs.
+
+```js
+core.setSecret('myPassword');
+```
+
+#### PATH Manipulation
+
+To make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`.  The runner will prepend the path given to the jobs PATH.
+
+```js
+core.addPath('/path/to/mytool');
+```
+
+#### Exit codes
+
+You should use this library to set the failing exit code for your action.  If status is not set and the script runs to completion, that will lead to a success.
+
+```js
+const core = require('@actions/core');
+
+try {
+  // Do stuff
+}
+catch (err) {
+  // setFailed logs the message and sets a failing exit code
+  core.setFailed(`Action failed with error ${err}`);
+}
+
+Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.
+
+```
+
+#### Logging
+
+Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).
+
+```js
+const core = require('@actions/core');
+
+const myInput = core.getInput('input');
+try {
+  core.debug('Inside try block');
+  
+  if (!myInput) {
+    core.warning('myInput was not set');
+  }
+  
+  // Do stuff
+}
+catch (err) {
+  core.error(`Error ${err}, action may still succeed though`);
+}
+```
+
+This library can also wrap chunks of output in foldable groups.
+
+```js
+const core = require('@actions/core')
+
+// Manually wrap output
+core.startGroup('Do some function')
+doSomeFunction()
+core.endGroup()
+
+// Wrap an asynchronous function call
+const result = await core.group('Do something async', async () => {
+  const response = await doSomeHTTPRequest()
+  return response
+})
+```
+
+#### Action state
+
+You can use this library to save state and get state for sharing information between a given wrapper action: 
+
+**action.yml**
+```yaml
+name: 'Wrapper action sample'
+inputs:
+  name:
+    default: 'GitHub'
+runs:
+  using: 'node12'
+  main: 'main.js'
+  post: 'cleanup.js'
+```
+
+In action's `main.js`:
+
+```js
+const core = require('@actions/core');
+
+core.saveState("pidToKill", 12345);
+```
+
+In action's `cleanup.js`:
+```js
+const core = require('@actions/core');
+
+var pid = core.getState("pidToKill");
+
+process.kill(pid);
+```
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/core/lib/command.d.ts b/setup-maven/node_modules/@actions/core/lib/command.d.ts
new file mode 100644
index 0000000..7f6fecb
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/lib/command.d.ts
@@ -0,0 +1,16 @@
+interface CommandProperties {
+    [key: string]: string;
+}
+/**
+ * Commands
+ *
+ * Command Format:
+ *   ##[name key=value;key=value]message
+ *
+ * Examples:
+ *   ##[warning]This is the user warning message
+ *   ##[set-secret name=mypassword]definitelyNotAPassword!
+ */
+export declare function issueCommand(command: string, properties: CommandProperties, message: string): void;
+export declare function issue(name: string, message?: string): void;
+export {};
diff --git a/setup-maven/node_modules/@actions/core/lib/command.js b/setup-maven/node_modules/@actions/core/lib/command.js
new file mode 100644
index 0000000..b0ea009
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/lib/command.js
@@ -0,0 +1,66 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const os = require("os");
+/**
+ * Commands
+ *
+ * Command Format:
+ *   ##[name key=value;key=value]message
+ *
+ * Examples:
+ *   ##[warning]This is the user warning message
+ *   ##[set-secret name=mypassword]definitelyNotAPassword!
+ */
+function issueCommand(command, properties, message) {
+    const cmd = new Command(command, properties, message);
+    process.stdout.write(cmd.toString() + os.EOL);
+}
+exports.issueCommand = issueCommand;
+function issue(name, message = '') {
+    issueCommand(name, {}, message);
+}
+exports.issue = issue;
+const CMD_STRING = '::';
+class Command {
+    constructor(command, properties, message) {
+        if (!command) {
+            command = 'missing.command';
+        }
+        this.command = command;
+        this.properties = properties;
+        this.message = message;
+    }
+    toString() {
+        let cmdStr = CMD_STRING + this.command;
+        if (this.properties && Object.keys(this.properties).length > 0) {
+            cmdStr += ' ';
+            for (const key in this.properties) {
+                if (this.properties.hasOwnProperty(key)) {
+                    const val = this.properties[key];
+                    if (val) {
+                        // safely append the val - avoid blowing up when attempting to
+                        // call .replace() if message is not a string for some reason
+                        cmdStr += `${key}=${escape(`${val || ''}`)},`;
+                    }
+                }
+            }
+        }
+        cmdStr += CMD_STRING;
+        // safely append the message - avoid blowing up when attempting to
+        // call .replace() if message is not a string for some reason
+        const message = `${this.message || ''}`;
+        cmdStr += escapeData(message);
+        return cmdStr;
+    }
+}
+function escapeData(s) {
+    return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A');
+}
+function escape(s) {
+    return s
+        .replace(/\r/g, '%0D')
+        .replace(/\n/g, '%0A')
+        .replace(/]/g, '%5D')
+        .replace(/;/g, '%3B');
+}
+//# sourceMappingURL=command.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/core/lib/command.js.map b/setup-maven/node_modules/@actions/core/lib/command.js.map
new file mode 100644
index 0000000..918ab25
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/lib/command.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,8DAA8D;wBAC9D,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAA;qBAC9C;iBACF;aACF;SACF;QAED,MAAM,IAAI,UAAU,CAAA;QAEpB,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;QACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/core/lib/core.d.ts b/setup-maven/node_modules/@actions/core/lib/core.d.ts
new file mode 100644
index 0000000..6483c3c
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/lib/core.d.ts
@@ -0,0 +1,112 @@
+/**
+ * Interface for getInput options
+ */
+export interface InputOptions {
+    /** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */
+    required?: boolean;
+}
+/**
+ * The code to exit an action
+ */
+export declare enum ExitCode {
+    /**
+     * A code indicating that the action was successful
+     */
+    Success = 0,
+    /**
+     * A code indicating that the action was a failure
+     */
+    Failure = 1
+}
+/**
+ * Sets env variable for this action and future actions in the job
+ * @param name the name of the variable to set
+ * @param val the value of the variable
+ */
+export declare function exportVariable(name: string, val: string): void;
+/**
+ * Registers a secret which will get masked from logs
+ * @param secret value of the secret
+ */
+export declare function setSecret(secret: string): void;
+/**
+ * Prepends inputPath to the PATH (for this action and future actions)
+ * @param inputPath
+ */
+export declare function addPath(inputPath: string): void;
+/**
+ * Gets the value of an input.  The value is also trimmed.
+ *
+ * @param     name     name of the input to get
+ * @param     options  optional. See InputOptions.
+ * @returns   string
+ */
+export declare function getInput(name: string, options?: InputOptions): string;
+/**
+ * Sets the value of an output.
+ *
+ * @param     name     name of the output to set
+ * @param     value    value to store
+ */
+export declare function setOutput(name: string, value: string): void;
+/**
+ * Sets the action status to failed.
+ * When the action exits it will be with an exit code of 1
+ * @param message add error issue message
+ */
+export declare function setFailed(message: string): void;
+/**
+ * Writes debug message to user log
+ * @param message debug message
+ */
+export declare function debug(message: string): void;
+/**
+ * Adds an error issue
+ * @param message error issue message
+ */
+export declare function error(message: string): void;
+/**
+ * Adds an warning issue
+ * @param message warning issue message
+ */
+export declare function warning(message: string): void;
+/**
+ * Writes info to log with console.log.
+ * @param message info message
+ */
+export declare function info(message: string): void;
+/**
+ * Begin an output group.
+ *
+ * Output until the next `groupEnd` will be foldable in this group
+ *
+ * @param name The name of the output group
+ */
+export declare function startGroup(name: string): void;
+/**
+ * End an output group.
+ */
+export declare function endGroup(): void;
+/**
+ * Wrap an asynchronous function call in a group.
+ *
+ * Returns the same type as the function itself.
+ *
+ * @param name The name of the group
+ * @param fn The function to wrap in the group
+ */
+export declare function group<T>(name: string, fn: () => Promise<T>): Promise<T>;
+/**
+ * Saves state for current action, the state can only be retrieved by this action's post job execution.
+ *
+ * @param     name     name of the state to store
+ * @param     value    value to store
+ */
+export declare function saveState(name: string, value: string): void;
+/**
+ * Gets the value of an state set by this action's main execution.
+ *
+ * @param     name     name of the state to get
+ * @returns   string
+ */
+export declare function getState(name: string): string;
diff --git a/setup-maven/node_modules/@actions/core/lib/core.js b/setup-maven/node_modules/@actions/core/lib/core.js
new file mode 100644
index 0000000..f43d507
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/lib/core.js
@@ -0,0 +1,195 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const command_1 = require("./command");
+const os = require("os");
+const path = require("path");
+/**
+ * The code to exit an action
+ */
+var ExitCode;
+(function (ExitCode) {
+    /**
+     * A code indicating that the action was successful
+     */
+    ExitCode[ExitCode["Success"] = 0] = "Success";
+    /**
+     * A code indicating that the action was a failure
+     */
+    ExitCode[ExitCode["Failure"] = 1] = "Failure";
+})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
+//-----------------------------------------------------------------------
+// Variables
+//-----------------------------------------------------------------------
+/**
+ * Sets env variable for this action and future actions in the job
+ * @param name the name of the variable to set
+ * @param val the value of the variable
+ */
+function exportVariable(name, val) {
+    process.env[name] = val;
+    command_1.issueCommand('set-env', { name }, val);
+}
+exports.exportVariable = exportVariable;
+/**
+ * Registers a secret which will get masked from logs
+ * @param secret value of the secret
+ */
+function setSecret(secret) {
+    command_1.issueCommand('add-mask', {}, secret);
+}
+exports.setSecret = setSecret;
+/**
+ * Prepends inputPath to the PATH (for this action and future actions)
+ * @param inputPath
+ */
+function addPath(inputPath) {
+    command_1.issueCommand('add-path', {}, inputPath);
+    process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
+}
+exports.addPath = addPath;
+/**
+ * Gets the value of an input.  The value is also trimmed.
+ *
+ * @param     name     name of the input to get
+ * @param     options  optional. See InputOptions.
+ * @returns   string
+ */
+function getInput(name, options) {
+    const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
+    if (options && options.required && !val) {
+        throw new Error(`Input required and not supplied: ${name}`);
+    }
+    return val.trim();
+}
+exports.getInput = getInput;
+/**
+ * Sets the value of an output.
+ *
+ * @param     name     name of the output to set
+ * @param     value    value to store
+ */
+function setOutput(name, value) {
+    command_1.issueCommand('set-output', { name }, value);
+}
+exports.setOutput = setOutput;
+//-----------------------------------------------------------------------
+// Results
+//-----------------------------------------------------------------------
+/**
+ * Sets the action status to failed.
+ * When the action exits it will be with an exit code of 1
+ * @param message add error issue message
+ */
+function setFailed(message) {
+    process.exitCode = ExitCode.Failure;
+    error(message);
+}
+exports.setFailed = setFailed;
+//-----------------------------------------------------------------------
+// Logging Commands
+//-----------------------------------------------------------------------
+/**
+ * Writes debug message to user log
+ * @param message debug message
+ */
+function debug(message) {
+    command_1.issueCommand('debug', {}, message);
+}
+exports.debug = debug;
+/**
+ * Adds an error issue
+ * @param message error issue message
+ */
+function error(message) {
+    command_1.issue('error', message);
+}
+exports.error = error;
+/**
+ * Adds an warning issue
+ * @param message warning issue message
+ */
+function warning(message) {
+    command_1.issue('warning', message);
+}
+exports.warning = warning;
+/**
+ * Writes info to log with console.log.
+ * @param message info message
+ */
+function info(message) {
+    process.stdout.write(message + os.EOL);
+}
+exports.info = info;
+/**
+ * Begin an output group.
+ *
+ * Output until the next `groupEnd` will be foldable in this group
+ *
+ * @param name The name of the output group
+ */
+function startGroup(name) {
+    command_1.issue('group', name);
+}
+exports.startGroup = startGroup;
+/**
+ * End an output group.
+ */
+function endGroup() {
+    command_1.issue('endgroup');
+}
+exports.endGroup = endGroup;
+/**
+ * Wrap an asynchronous function call in a group.
+ *
+ * Returns the same type as the function itself.
+ *
+ * @param name The name of the group
+ * @param fn The function to wrap in the group
+ */
+function group(name, fn) {
+    return __awaiter(this, void 0, void 0, function* () {
+        startGroup(name);
+        let result;
+        try {
+            result = yield fn();
+        }
+        finally {
+            endGroup();
+        }
+        return result;
+    });
+}
+exports.group = group;
+//-----------------------------------------------------------------------
+// Wrapper action state
+//-----------------------------------------------------------------------
+/**
+ * Saves state for current action, the state can only be retrieved by this action's post job execution.
+ *
+ * @param     name     name of the state to store
+ * @param     value    value to store
+ */
+function saveState(name, value) {
+    command_1.issueCommand('save-state', { name }, value);
+}
+exports.saveState = saveState;
+/**
+ * Gets the value of an state set by this action's main execution.
+ *
+ * @param     name     name of the state to get
+ * @returns   string
+ */
+function getState(name) {
+    return process.env[`STATE_${name}`] || '';
+}
+exports.getState = getState;
+//# sourceMappingURL=core.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/core/lib/core.js.map b/setup-maven/node_modules/@actions/core/lib/core.js.map
new file mode 100644
index 0000000..6eda8da
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/lib/core.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA6C;AAE7C,yBAAwB;AACxB,6BAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAFD,8BAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,oBAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC;AAED,yEAAyE;AACzE,uBAAuB;AACvB,yEAAyE;AAEzE;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAFD,4BAEC"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/core/package.json b/setup-maven/node_modules/@actions/core/package.json
new file mode 100644
index 0000000..f267deb
--- /dev/null
+++ b/setup-maven/node_modules/@actions/core/package.json
@@ -0,0 +1,65 @@
+{
+  "_from": "@actions/core@^1.0.0",
+  "_id": "@actions/core@1.2.0",
+  "_inBundle": false,
+  "_integrity": "sha512-ZKdyhlSlyz38S6YFfPnyNgCDZuAF2T0Qv5eHflNWytPS8Qjvz39bZFMry9Bb/dpSnqWcNeav5yM2CTYpJeY+Dw==",
+  "_location": "/@actions/core",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@actions/core@^1.0.0",
+    "name": "@actions/core",
+    "escapedName": "@actions%2fcore",
+    "scope": "@actions",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/",
+    "/@actions/tool-cache"
+  ],
+  "_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.0.tgz",
+  "_shasum": "aa5f52b26c362c821d41557e599371a42f6c0b3d",
+  "_spec": "@actions/core@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven",
+  "bugs": {
+    "url": "https://github.com/actions/toolkit/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Actions core lib",
+  "devDependencies": {
+    "@types/node": "^12.0.2"
+  },
+  "directories": {
+    "lib": "lib",
+    "test": "__tests__"
+  },
+  "files": [
+    "lib"
+  ],
+  "homepage": "https://github.com/actions/toolkit/tree/master/packages/core",
+  "keywords": [
+    "github",
+    "actions",
+    "core"
+  ],
+  "license": "MIT",
+  "main": "lib/core.js",
+  "name": "@actions/core",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/actions/toolkit.git",
+    "directory": "packages/core"
+  },
+  "scripts": {
+    "test": "echo \"Error: run tests from root\" && exit 1",
+    "tsc": "tsc"
+  },
+  "version": "1.2.0"
+}
diff --git a/setup-maven/node_modules/@actions/exec/LICENSE.md b/setup-maven/node_modules/@actions/exec/LICENSE.md
new file mode 100644
index 0000000..e5a73f4
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/LICENSE.md
@@ -0,0 +1,7 @@
+Copyright 2019 GitHub
+
+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.
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/exec/README.md b/setup-maven/node_modules/@actions/exec/README.md
new file mode 100644
index 0000000..e3eff74
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/README.md
@@ -0,0 +1,60 @@
+# `@actions/exec`
+
+## Usage
+
+#### Basic
+
+You can use this package to execute your tools on the command line in a cross platform way:
+
+```js
+const exec = require('@actions/exec');
+
+await exec.exec('node index.js');
+```
+
+#### Args
+
+You can also pass in arg arrays:
+
+```js
+const exec = require('@actions/exec');
+
+await exec.exec('node', ['index.js', 'foo=bar']);
+```
+
+#### Output/options
+
+Capture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5):
+
+```js
+const exec = require('@actions/exec');
+
+let myOutput = '';
+let myError = '';
+
+const options = {};
+options.listeners = {
+  stdout: (data: Buffer) => {
+    myOutput += data.toString();
+  },
+  stderr: (data: Buffer) => {
+    myError += data.toString();
+  }
+};
+options.cwd = './lib';
+
+await exec.exec('node', ['index.js', 'foo=bar'], options);
+```
+
+#### Exec tools not in the PATH
+
+You can use it in conjunction with the `which` function from `@actions/io` to execute tools that are not in the PATH:
+
+```js
+const exec = require('@actions/exec');
+const io = require('@actions/io');
+
+const pythonPath: string = await io.which('python', true)
+
+await exec.exec(`"${pythonPath}"`, ['main.py']);
+```
diff --git a/setup-maven/node_modules/@actions/exec/lib/exec.d.ts b/setup-maven/node_modules/@actions/exec/lib/exec.d.ts
new file mode 100644
index 0000000..8c64aae
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/exec.d.ts
@@ -0,0 +1,12 @@
+import * as im from './interfaces';
+/**
+ * Exec a command.
+ * Output will be streamed to the live console.
+ * Returns promise with return code
+ *
+ * @param     commandLine        command to execute (can include additional args). Must be correctly escaped.
+ * @param     args               optional arguments for tool. Escaping is handled by the lib.
+ * @param     options            optional exec options.  See ExecOptions
+ * @returns   Promise<number>    exit code
+ */
+export declare function exec(commandLine: string, args?: string[], options?: im.ExecOptions): Promise<number>;
diff --git a/setup-maven/node_modules/@actions/exec/lib/exec.js b/setup-maven/node_modules/@actions/exec/lib/exec.js
new file mode 100644
index 0000000..2748deb
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/exec.js
@@ -0,0 +1,37 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const tr = require("./toolrunner");
+/**
+ * Exec a command.
+ * Output will be streamed to the live console.
+ * Returns promise with return code
+ *
+ * @param     commandLine        command to execute (can include additional args). Must be correctly escaped.
+ * @param     args               optional arguments for tool. Escaping is handled by the lib.
+ * @param     options            optional exec options.  See ExecOptions
+ * @returns   Promise<number>    exit code
+ */
+function exec(commandLine, args, options) {
+    return __awaiter(this, void 0, void 0, function* () {
+        const commandArgs = tr.argStringToArray(commandLine);
+        if (commandArgs.length === 0) {
+            throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
+        }
+        // Path to tool to execute should be first arg
+        const toolPath = commandArgs[0];
+        args = commandArgs.slice(1).concat(args || []);
+        const runner = new tr.ToolRunner(toolPath, args, options);
+        return runner.exec();
+    });
+}
+exports.exec = exec;
+//# sourceMappingURL=exec.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/exec/lib/exec.js.map b/setup-maven/node_modules/@actions/exec/lib/exec.js.map
new file mode 100644
index 0000000..0789521
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/exec.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,mCAAkC;AAElC;;;;;;;;;GASG;AACH,SAAsB,IAAI,CACxB,WAAmB,EACnB,IAAe,EACf,OAAwB;;QAExB,MAAM,WAAW,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;SACpE;QACD,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACxE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACtB,CAAC;CAAA;AAdD,oBAcC"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/exec/lib/interfaces.d.ts b/setup-maven/node_modules/@actions/exec/lib/interfaces.d.ts
new file mode 100644
index 0000000..1861823
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/interfaces.d.ts
@@ -0,0 +1,35 @@
+/// <reference types="node" />
+import * as stream from 'stream';
+/**
+ * Interface for exec options
+ */
+export interface ExecOptions {
+    /** optional working directory.  defaults to current */
+    cwd?: string;
+    /** optional envvar dictionary.  defaults to current process's env */
+    env?: {
+        [key: string]: string;
+    };
+    /** optional.  defaults to false */
+    silent?: boolean;
+    /** optional out stream to use. Defaults to process.stdout */
+    outStream?: stream.Writable;
+    /** optional err stream to use. Defaults to process.stderr */
+    errStream?: stream.Writable;
+    /** optional. whether to skip quoting/escaping arguments if needed.  defaults to false. */
+    windowsVerbatimArguments?: boolean;
+    /** optional.  whether to fail if output to stderr.  defaults to false */
+    failOnStdErr?: boolean;
+    /** optional.  defaults to failing on non zero.  ignore will not fail leaving it up to the caller */
+    ignoreReturnCode?: boolean;
+    /** optional. How long in ms to wait for STDIO streams to close after the exit event of the process before terminating. defaults to 10000 */
+    delay?: number;
+    /** optional. Listeners for output. Callback functions that will be called on these events */
+    listeners?: {
+        stdout?: (data: Buffer) => void;
+        stderr?: (data: Buffer) => void;
+        stdline?: (data: string) => void;
+        errline?: (data: string) => void;
+        debug?: (data: string) => void;
+    };
+}
diff --git a/setup-maven/node_modules/@actions/exec/lib/interfaces.js b/setup-maven/node_modules/@actions/exec/lib/interfaces.js
new file mode 100644
index 0000000..db91911
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/interfaces.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=interfaces.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/exec/lib/interfaces.js.map b/setup-maven/node_modules/@actions/exec/lib/interfaces.js.map
new file mode 100644
index 0000000..8fb5f7d
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/interfaces.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/exec/lib/toolrunner.d.ts b/setup-maven/node_modules/@actions/exec/lib/toolrunner.d.ts
new file mode 100644
index 0000000..9bbbb1e
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/toolrunner.d.ts
@@ -0,0 +1,37 @@
+/// <reference types="node" />
+import * as events from 'events';
+import * as im from './interfaces';
+export declare class ToolRunner extends events.EventEmitter {
+    constructor(toolPath: string, args?: string[], options?: im.ExecOptions);
+    private toolPath;
+    private args;
+    private options;
+    private _debug;
+    private _getCommandString;
+    private _processLineBuffer;
+    private _getSpawnFileName;
+    private _getSpawnArgs;
+    private _endsWith;
+    private _isCmdFile;
+    private _windowsQuoteCmdArg;
+    private _uvQuoteCmdArg;
+    private _cloneExecOptions;
+    private _getSpawnOptions;
+    /**
+     * Exec a tool.
+     * Output will be streamed to the live console.
+     * Returns promise with return code
+     *
+     * @param     tool     path to tool to exec
+     * @param     options  optional exec options.  See ExecOptions
+     * @returns   number
+     */
+    exec(): Promise<number>;
+}
+/**
+ * Convert an arg string to an array of args. Handles escaping
+ *
+ * @param    argString   string of arguments
+ * @returns  string[]    array of arguments
+ */
+export declare function argStringToArray(argString: string): string[];
diff --git a/setup-maven/node_modules/@actions/exec/lib/toolrunner.js b/setup-maven/node_modules/@actions/exec/lib/toolrunner.js
new file mode 100644
index 0000000..17d78f3
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/toolrunner.js
@@ -0,0 +1,574 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const os = require("os");
+const events = require("events");
+const child = require("child_process");
+/* eslint-disable @typescript-eslint/unbound-method */
+const IS_WINDOWS = process.platform === 'win32';
+/*
+ * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
+ */
+class ToolRunner extends events.EventEmitter {
+    constructor(toolPath, args, options) {
+        super();
+        if (!toolPath) {
+            throw new Error("Parameter 'toolPath' cannot be null or empty.");
+        }
+        this.toolPath = toolPath;
+        this.args = args || [];
+        this.options = options || {};
+    }
+    _debug(message) {
+        if (this.options.listeners && this.options.listeners.debug) {
+            this.options.listeners.debug(message);
+        }
+    }
+    _getCommandString(options, noPrefix) {
+        const toolPath = this._getSpawnFileName();
+        const args = this._getSpawnArgs(options);
+        let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
+        if (IS_WINDOWS) {
+            // Windows + cmd file
+            if (this._isCmdFile()) {
+                cmd += toolPath;
+                for (const a of args) {
+                    cmd += ` ${a}`;
+                }
+            }
+            // Windows + verbatim
+            else if (options.windowsVerbatimArguments) {
+                cmd += `"${toolPath}"`;
+                for (const a of args) {
+                    cmd += ` ${a}`;
+                }
+            }
+            // Windows (regular)
+            else {
+                cmd += this._windowsQuoteCmdArg(toolPath);
+                for (const a of args) {
+                    cmd += ` ${this._windowsQuoteCmdArg(a)}`;
+                }
+            }
+        }
+        else {
+            // OSX/Linux - this can likely be improved with some form of quoting.
+            // creating processes on Unix is fundamentally different than Windows.
+            // on Unix, execvp() takes an arg array.
+            cmd += toolPath;
+            for (const a of args) {
+                cmd += ` ${a}`;
+            }
+        }
+        return cmd;
+    }
+    _processLineBuffer(data, strBuffer, onLine) {
+        try {
+            let s = strBuffer + data.toString();
+            let n = s.indexOf(os.EOL);
+            while (n > -1) {
+                const line = s.substring(0, n);
+                onLine(line);
+                // the rest of the string ...
+                s = s.substring(n + os.EOL.length);
+                n = s.indexOf(os.EOL);
+            }
+            strBuffer = s;
+        }
+        catch (err) {
+            // streaming lines to console is best effort.  Don't fail a build.
+            this._debug(`error processing line. Failed with error ${err}`);
+        }
+    }
+    _getSpawnFileName() {
+        if (IS_WINDOWS) {
+            if (this._isCmdFile()) {
+                return process.env['COMSPEC'] || 'cmd.exe';
+            }
+        }
+        return this.toolPath;
+    }
+    _getSpawnArgs(options) {
+        if (IS_WINDOWS) {
+            if (this._isCmdFile()) {
+                let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
+                for (const a of this.args) {
+                    argline += ' ';
+                    argline += options.windowsVerbatimArguments
+                        ? a
+                        : this._windowsQuoteCmdArg(a);
+                }
+                argline += '"';
+                return [argline];
+            }
+        }
+        return this.args;
+    }
+    _endsWith(str, end) {
+        return str.endsWith(end);
+    }
+    _isCmdFile() {
+        const upperToolPath = this.toolPath.toUpperCase();
+        return (this._endsWith(upperToolPath, '.CMD') ||
+            this._endsWith(upperToolPath, '.BAT'));
+    }
+    _windowsQuoteCmdArg(arg) {
+        // for .exe, apply the normal quoting rules that libuv applies
+        if (!this._isCmdFile()) {
+            return this._uvQuoteCmdArg(arg);
+        }
+        // otherwise apply quoting rules specific to the cmd.exe command line parser.
+        // the libuv rules are generic and are not designed specifically for cmd.exe
+        // command line parser.
+        //
+        // for a detailed description of the cmd.exe command line parser, refer to
+        // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912
+        // need quotes for empty arg
+        if (!arg) {
+            return '""';
+        }
+        // determine whether the arg needs to be quoted
+        const cmdSpecialChars = [
+            ' ',
+            '\t',
+            '&',
+            '(',
+            ')',
+            '[',
+            ']',
+            '{',
+            '}',
+            '^',
+            '=',
+            ';',
+            '!',
+            "'",
+            '+',
+            ',',
+            '`',
+            '~',
+            '|',
+            '<',
+            '>',
+            '"'
+        ];
+        let needsQuotes = false;
+        for (const char of arg) {
+            if (cmdSpecialChars.some(x => x === char)) {
+                needsQuotes = true;
+                break;
+            }
+        }
+        // short-circuit if quotes not needed
+        if (!needsQuotes) {
+            return arg;
+        }
+        // the following quoting rules are very similar to the rules that by libuv applies.
+        //
+        // 1) wrap the string in quotes
+        //
+        // 2) double-up quotes - i.e. " => ""
+        //
+        //    this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately
+        //    doesn't work well with a cmd.exe command line.
+        //
+        //    note, replacing " with "" also works well if the arg is passed to a downstream .NET console app.
+        //    for example, the command line:
+        //          foo.exe "myarg:""my val"""
+        //    is parsed by a .NET console app into an arg array:
+        //          [ "myarg:\"my val\"" ]
+        //    which is the same end result when applying libuv quoting rules. although the actual
+        //    command line from libuv quoting rules would look like:
+        //          foo.exe "myarg:\"my val\""
+        //
+        // 3) double-up slashes that precede a quote,
+        //    e.g.  hello \world    => "hello \world"
+        //          hello\"world    => "hello\\""world"
+        //          hello\\"world   => "hello\\\\""world"
+        //          hello world\    => "hello world\\"
+        //
+        //    technically this is not required for a cmd.exe command line, or the batch argument parser.
+        //    the reasons for including this as a .cmd quoting rule are:
+        //
+        //    a) this is optimized for the scenario where the argument is passed from the .cmd file to an
+        //       external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
+        //
+        //    b) it's what we've been doing previously (by deferring to node default behavior) and we
+        //       haven't heard any complaints about that aspect.
+        //
+        // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
+        // escaped when used on the command line directly - even though within a .cmd file % can be escaped
+        // by using %%.
+        //
+        // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
+        // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
+        //
+        // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
+        // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
+        // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
+        // to an external program.
+        //
+        // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
+        // % can be escaped within a .cmd file.
+        let reverse = '"';
+        let quoteHit = true;
+        for (let i = arg.length; i > 0; i--) {
+            // walk the string in reverse
+            reverse += arg[i - 1];
+            if (quoteHit && arg[i - 1] === '\\') {
+                reverse += '\\'; // double the slash
+            }
+            else if (arg[i - 1] === '"') {
+                quoteHit = true;
+                reverse += '"'; // double the quote
+            }
+            else {
+                quoteHit = false;
+            }
+        }
+        reverse += '"';
+        return reverse
+            .split('')
+            .reverse()
+            .join('');
+    }
+    _uvQuoteCmdArg(arg) {
+        // Tool runner wraps child_process.spawn() and needs to apply the same quoting as
+        // Node in certain cases where the undocumented spawn option windowsVerbatimArguments
+        // is used.
+        //
+        // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,
+        // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),
+        // pasting copyright notice from Node within this function:
+        //
+        //      Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+        //
+        //      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.
+        if (!arg) {
+            // Need double quotation for empty argument
+            return '""';
+        }
+        if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) {
+            // No quotation needed
+            return arg;
+        }
+        if (!arg.includes('"') && !arg.includes('\\')) {
+            // No embedded double quotes or backslashes, so I can just wrap
+            // quote marks around the whole thing.
+            return `"${arg}"`;
+        }
+        // Expected input/output:
+        //   input : hello"world
+        //   output: "hello\"world"
+        //   input : hello""world
+        //   output: "hello\"\"world"
+        //   input : hello\world
+        //   output: hello\world
+        //   input : hello\\world
+        //   output: hello\\world
+        //   input : hello\"world
+        //   output: "hello\\\"world"
+        //   input : hello\\"world
+        //   output: "hello\\\\\"world"
+        //   input : hello world\
+        //   output: "hello world\\" - note the comment in libuv actually reads "hello world\"
+        //                             but it appears the comment is wrong, it should be "hello world\\"
+        let reverse = '"';
+        let quoteHit = true;
+        for (let i = arg.length; i > 0; i--) {
+            // walk the string in reverse
+            reverse += arg[i - 1];
+            if (quoteHit && arg[i - 1] === '\\') {
+                reverse += '\\';
+            }
+            else if (arg[i - 1] === '"') {
+                quoteHit = true;
+                reverse += '\\';
+            }
+            else {
+                quoteHit = false;
+            }
+        }
+        reverse += '"';
+        return reverse
+            .split('')
+            .reverse()
+            .join('');
+    }
+    _cloneExecOptions(options) {
+        options = options || {};
+        const result = {
+            cwd: options.cwd || process.cwd(),
+            env: options.env || process.env,
+            silent: options.silent || false,
+            windowsVerbatimArguments: options.windowsVerbatimArguments || false,
+            failOnStdErr: options.failOnStdErr || false,
+            ignoreReturnCode: options.ignoreReturnCode || false,
+            delay: options.delay || 10000
+        };
+        result.outStream = options.outStream || process.stdout;
+        result.errStream = options.errStream || process.stderr;
+        return result;
+    }
+    _getSpawnOptions(options, toolPath) {
+        options = options || {};
+        const result = {};
+        result.cwd = options.cwd;
+        result.env = options.env;
+        result['windowsVerbatimArguments'] =
+            options.windowsVerbatimArguments || this._isCmdFile();
+        if (options.windowsVerbatimArguments) {
+            result.argv0 = `"${toolPath}"`;
+        }
+        return result;
+    }
+    /**
+     * Exec a tool.
+     * Output will be streamed to the live console.
+     * Returns promise with return code
+     *
+     * @param     tool     path to tool to exec
+     * @param     options  optional exec options.  See ExecOptions
+     * @returns   number
+     */
+    exec() {
+        return __awaiter(this, void 0, void 0, function* () {
+            return new Promise((resolve, reject) => {
+                this._debug(`exec tool: ${this.toolPath}`);
+                this._debug('arguments:');
+                for (const arg of this.args) {
+                    this._debug(`   ${arg}`);
+                }
+                const optionsNonNull = this._cloneExecOptions(this.options);
+                if (!optionsNonNull.silent && optionsNonNull.outStream) {
+                    optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);
+                }
+                const state = new ExecState(optionsNonNull, this.toolPath);
+                state.on('debug', (message) => {
+                    this._debug(message);
+                });
+                const fileName = this._getSpawnFileName();
+                const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
+                const stdbuffer = '';
+                if (cp.stdout) {
+                    cp.stdout.on('data', (data) => {
+                        if (this.options.listeners && this.options.listeners.stdout) {
+                            this.options.listeners.stdout(data);
+                        }
+                        if (!optionsNonNull.silent && optionsNonNull.outStream) {
+                            optionsNonNull.outStream.write(data);
+                        }
+                        this._processLineBuffer(data, stdbuffer, (line) => {
+                            if (this.options.listeners && this.options.listeners.stdline) {
+                                this.options.listeners.stdline(line);
+                            }
+                        });
+                    });
+                }
+                const errbuffer = '';
+                if (cp.stderr) {
+                    cp.stderr.on('data', (data) => {
+                        state.processStderr = true;
+                        if (this.options.listeners && this.options.listeners.stderr) {
+                            this.options.listeners.stderr(data);
+                        }
+                        if (!optionsNonNull.silent &&
+                            optionsNonNull.errStream &&
+                            optionsNonNull.outStream) {
+                            const s = optionsNonNull.failOnStdErr
+                                ? optionsNonNull.errStream
+                                : optionsNonNull.outStream;
+                            s.write(data);
+                        }
+                        this._processLineBuffer(data, errbuffer, (line) => {
+                            if (this.options.listeners && this.options.listeners.errline) {
+                                this.options.listeners.errline(line);
+                            }
+                        });
+                    });
+                }
+                cp.on('error', (err) => {
+                    state.processError = err.message;
+                    state.processExited = true;
+                    state.processClosed = true;
+                    state.CheckComplete();
+                });
+                cp.on('exit', (code) => {
+                    state.processExitCode = code;
+                    state.processExited = true;
+                    this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
+                    state.CheckComplete();
+                });
+                cp.on('close', (code) => {
+                    state.processExitCode = code;
+                    state.processExited = true;
+                    state.processClosed = true;
+                    this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
+                    state.CheckComplete();
+                });
+                state.on('done', (error, exitCode) => {
+                    if (stdbuffer.length > 0) {
+                        this.emit('stdline', stdbuffer);
+                    }
+                    if (errbuffer.length > 0) {
+                        this.emit('errline', errbuffer);
+                    }
+                    cp.removeAllListeners();
+                    if (error) {
+                        reject(error);
+                    }
+                    else {
+                        resolve(exitCode);
+                    }
+                });
+            });
+        });
+    }
+}
+exports.ToolRunner = ToolRunner;
+/**
+ * Convert an arg string to an array of args. Handles escaping
+ *
+ * @param    argString   string of arguments
+ * @returns  string[]    array of arguments
+ */
+function argStringToArray(argString) {
+    const args = [];
+    let inQuotes = false;
+    let escaped = false;
+    let arg = '';
+    function append(c) {
+        // we only escape double quotes.
+        if (escaped && c !== '"') {
+            arg += '\\';
+        }
+        arg += c;
+        escaped = false;
+    }
+    for (let i = 0; i < argString.length; i++) {
+        const c = argString.charAt(i);
+        if (c === '"') {
+            if (!escaped) {
+                inQuotes = !inQuotes;
+            }
+            else {
+                append(c);
+            }
+            continue;
+        }
+        if (c === '\\' && escaped) {
+            append(c);
+            continue;
+        }
+        if (c === '\\' && inQuotes) {
+            escaped = true;
+            continue;
+        }
+        if (c === ' ' && !inQuotes) {
+            if (arg.length > 0) {
+                args.push(arg);
+                arg = '';
+            }
+            continue;
+        }
+        append(c);
+    }
+    if (arg.length > 0) {
+        args.push(arg.trim());
+    }
+    return args;
+}
+exports.argStringToArray = argStringToArray;
+class ExecState extends events.EventEmitter {
+    constructor(options, toolPath) {
+        super();
+        this.processClosed = false; // tracks whether the process has exited and stdio is closed
+        this.processError = '';
+        this.processExitCode = 0;
+        this.processExited = false; // tracks whether the process has exited
+        this.processStderr = false; // tracks whether stderr was written to
+        this.delay = 10000; // 10 seconds
+        this.done = false;
+        this.timeout = null;
+        if (!toolPath) {
+            throw new Error('toolPath must not be empty');
+        }
+        this.options = options;
+        this.toolPath = toolPath;
+        if (options.delay) {
+            this.delay = options.delay;
+        }
+    }
+    CheckComplete() {
+        if (this.done) {
+            return;
+        }
+        if (this.processClosed) {
+            this._setResult();
+        }
+        else if (this.processExited) {
+            this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);
+        }
+    }
+    _debug(message) {
+        this.emit('debug', message);
+    }
+    _setResult() {
+        // determine whether there is an error
+        let error;
+        if (this.processExited) {
+            if (this.processError) {
+                error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
+            }
+            else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {
+                error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
+            }
+            else if (this.processStderr && this.options.failOnStdErr) {
+                error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
+            }
+        }
+        // clear the timeout
+        if (this.timeout) {
+            clearTimeout(this.timeout);
+            this.timeout = null;
+        }
+        this.done = true;
+        this.emit('done', error, this.processExitCode);
+    }
+    static HandleTimeout(state) {
+        if (state.done) {
+            return;
+        }
+        if (!state.processClosed && state.processExited) {
+            const message = `The STDIO streams did not close within ${state.delay /
+                1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
+            state._debug(message);
+        }
+        state._setResult();
+    }
+}
+//# sourceMappingURL=toolrunner.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/exec/lib/toolrunner.js.map b/setup-maven/node_modules/@actions/exec/lib/toolrunner.js.map
new file mode 100644
index 0000000..de911cc
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/lib/toolrunner.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"toolrunner.js","sourceRoot":"","sources":["../src/toolrunner.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,yBAAwB;AACxB,iCAAgC;AAChC,uCAAsC;AAItC,sDAAsD;AAEtD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAE/C;;GAEG;AACH,MAAa,UAAW,SAAQ,MAAM,CAAC,YAAY;IACjD,YAAY,QAAgB,EAAE,IAAe,EAAE,OAAwB;QACrE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;SACjE;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;IAC9B,CAAC;IAMO,MAAM,CAAC,OAAe;QAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE;YAC1D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;SACtC;IACH,CAAC;IAEO,iBAAiB,CACvB,OAAuB,EACvB,QAAkB;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAA,CAAC,0CAA0C;QAChF,IAAI,UAAU,EAAE;YACd,qBAAqB;YACrB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrB,GAAG,IAAI,QAAQ,CAAA;gBACf,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,GAAG,IAAI,IAAI,CAAC,EAAE,CAAA;iBACf;aACF;YACD,qBAAqB;iBAChB,IAAI,OAAO,CAAC,wBAAwB,EAAE;gBACzC,GAAG,IAAI,IAAI,QAAQ,GAAG,CAAA;gBACtB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,GAAG,IAAI,IAAI,CAAC,EAAE,CAAA;iBACf;aACF;YACD,oBAAoB;iBACf;gBACH,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAA;gBACzC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,GAAG,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAA;iBACzC;aACF;SACF;aAAM;YACL,qEAAqE;YACrE,sEAAsE;YACtE,wCAAwC;YACxC,GAAG,IAAI,QAAQ,CAAA;YACf,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,GAAG,IAAI,IAAI,CAAC,EAAE,CAAA;aACf;SACF;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;IAEO,kBAAkB,CACxB,IAAY,EACZ,SAAiB,EACjB,MAA8B;QAE9B,IAAI;YACF,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YACnC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;YAEzB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;gBACb,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC9B,MAAM,CAAC,IAAI,CAAC,CAAA;gBAEZ,6BAA6B;gBAC7B,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBAClC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;aACtB;YAED,SAAS,GAAG,CAAC,CAAA;SACd;QAAC,OAAO,GAAG,EAAE;YACZ,kEAAkE;YAClE,IAAI,CAAC,MAAM,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAA;SAC/D;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,UAAU,EAAE;YACd,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrB,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAA;aAC3C;SACF;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAEO,aAAa,CAAC,OAAuB;QAC3C,IAAI,UAAU,EAAE;YACd,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrB,IAAI,OAAO,GAAG,aAAa,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;gBACpE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;oBACzB,OAAO,IAAI,GAAG,CAAA;oBACd,OAAO,IAAI,OAAO,CAAC,wBAAwB;wBACzC,CAAC,CAAC,CAAC;wBACH,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;iBAChC;gBAED,OAAO,IAAI,GAAG,CAAA;gBACd,OAAO,CAAC,OAAO,CAAC,CAAA;aACjB;SACF;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEO,SAAS,CAAC,GAAW,EAAE,GAAW;QACxC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAEO,UAAU;QAChB,MAAM,aAAa,GAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAA;QACzD,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CACtC,CAAA;IACH,CAAC;IAEO,mBAAmB,CAAC,GAAW;QACrC,8DAA8D;QAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;SAChC;QAED,6EAA6E;QAC7E,4EAA4E;QAC5E,uBAAuB;QACvB,EAAE;QACF,0EAA0E;QAC1E,4HAA4H;QAE5H,4BAA4B;QAC5B,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,IAAI,CAAA;SACZ;QAED,+CAA+C;QAC/C,MAAM,eAAe,GAAG;YACtB,GAAG;YACH,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACJ,CAAA;QACD,IAAI,WAAW,GAAG,KAAK,CAAA;QACvB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;YACtB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;gBACzC,WAAW,GAAG,IAAI,CAAA;gBAClB,MAAK;aACN;SACF;QAED,qCAAqC;QACrC,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,GAAG,CAAA;SACX;QAED,mFAAmF;QACnF,EAAE;QACF,+BAA+B;QAC/B,EAAE;QACF,qCAAqC;QACrC,EAAE;QACF,mGAAmG;QACnG,oDAAoD;QACpD,EAAE;QACF,sGAAsG;QACtG,oCAAoC;QACpC,sCAAsC;QACtC,wDAAwD;QACxD,kCAAkC;QAClC,yFAAyF;QACzF,4DAA4D;QAC5D,sCAAsC;QACtC,EAAE;QACF,6CAA6C;QAC7C,6CAA6C;QAC7C,+CAA+C;QAC/C,iDAAiD;QACjD,8CAA8C;QAC9C,EAAE;QACF,gGAAgG;QAChG,gEAAgE;QAChE,EAAE;QACF,iGAAiG;QACjG,kGAAkG;QAClG,EAAE;QACF,6FAA6F;QAC7F,wDAAwD;QACxD,EAAE;QACF,oGAAoG;QACpG,mGAAmG;QACnG,eAAe;QACf,EAAE;QACF,sGAAsG;QACtG,sGAAsG;QACtG,EAAE;QACF,gGAAgG;QAChG,kGAAkG;QAClG,oGAAoG;QACpG,0BAA0B;QAC1B,EAAE;QACF,iGAAiG;QACjG,uCAAuC;QACvC,IAAI,OAAO,GAAG,GAAG,CAAA;QACjB,IAAI,QAAQ,GAAG,IAAI,CAAA;QACnB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACnC,6BAA6B;YAC7B,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACrB,IAAI,QAAQ,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;gBACnC,OAAO,IAAI,IAAI,CAAA,CAAC,mBAAmB;aACpC;iBAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBAC7B,QAAQ,GAAG,IAAI,CAAA;gBACf,OAAO,IAAI,GAAG,CAAA,CAAC,mBAAmB;aACnC;iBAAM;gBACL,QAAQ,GAAG,KAAK,CAAA;aACjB;SACF;QAED,OAAO,IAAI,GAAG,CAAA;QACd,OAAO,OAAO;aACX,KAAK,CAAC,EAAE,CAAC;aACT,OAAO,EAAE;aACT,IAAI,CAAC,EAAE,CAAC,CAAA;IACb,CAAC;IAEO,cAAc,CAAC,GAAW;QAChC,iFAAiF;QACjF,qFAAqF;QACrF,WAAW;QACX,EAAE;QACF,qFAAqF;QACrF,uFAAuF;QACvF,2DAA2D;QAC3D,EAAE;QACF,gFAAgF;QAChF,EAAE;QACF,oFAAoF;QACpF,gFAAgF;QAChF,kFAAkF;QAClF,mFAAmF;QACnF,kFAAkF;QAClF,gEAAgE;QAChE,EAAE;QACF,kFAAkF;QAClF,2DAA2D;QAC3D,EAAE;QACF,kFAAkF;QAClF,gFAAgF;QAChF,mFAAmF;QACnF,8EAA8E;QAC9E,+EAA+E;QAC/E,oFAAoF;QACpF,wBAAwB;QAExB,IAAI,CAAC,GAAG,EAAE;YACR,2CAA2C;YAC3C,OAAO,IAAI,CAAA;SACZ;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnE,sBAAsB;YACtB,OAAO,GAAG,CAAA;SACX;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC7C,+DAA+D;YAC/D,sCAAsC;YACtC,OAAO,IAAI,GAAG,GAAG,CAAA;SAClB;QAED,yBAAyB;QACzB,wBAAwB;QACxB,2BAA2B;QAC3B,yBAAyB;QACzB,6BAA6B;QAC7B,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,yBAAyB;QACzB,yBAAyB;QACzB,6BAA6B;QAC7B,0BAA0B;QAC1B,+BAA+B;QAC/B,yBAAyB;QACzB,sFAAsF;QACtF,gGAAgG;QAChG,IAAI,OAAO,GAAG,GAAG,CAAA;QACjB,IAAI,QAAQ,GAAG,IAAI,CAAA;QACnB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACnC,6BAA6B;YAC7B,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACrB,IAAI,QAAQ,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;gBACnC,OAAO,IAAI,IAAI,CAAA;aAChB;iBAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBAC7B,QAAQ,GAAG,IAAI,CAAA;gBACf,OAAO,IAAI,IAAI,CAAA;aAChB;iBAAM;gBACL,QAAQ,GAAG,KAAK,CAAA;aACjB;SACF;QAED,OAAO,IAAI,GAAG,CAAA;QACd,OAAO,OAAO;aACX,KAAK,CAAC,EAAE,CAAC;aACT,OAAO,EAAE;aACT,IAAI,CAAC,EAAE,CAAC,CAAA;IACb,CAAC;IAEO,iBAAiB,CAAC,OAAwB;QAChD,OAAO,GAAG,OAAO,IAAoB,EAAE,CAAA;QACvC,MAAM,MAAM,GAAmC;YAC7C,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YACjC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;YAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,IAAI,KAAK;YACnE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;YAC3C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;YACnD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;SAC9B,CAAA;QACD,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAqB,OAAO,CAAC,MAAM,CAAA;QACvE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAqB,OAAO,CAAC,MAAM,CAAA;QACvE,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,gBAAgB,CACtB,OAAuB,EACvB,QAAgB;QAEhB,OAAO,GAAG,OAAO,IAAoB,EAAE,CAAA;QACvC,MAAM,MAAM,GAAuB,EAAE,CAAA;QACrC,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QACxB,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QACxB,MAAM,CAAC,0BAA0B,CAAC;YAChC,OAAO,CAAC,wBAAwB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;QACvD,IAAI,OAAO,CAAC,wBAAwB,EAAE;YACpC,MAAM,CAAC,KAAK,GAAG,IAAI,QAAQ,GAAG,CAAA;SAC/B;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;;;OAQG;IACG,IAAI;;YACR,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;gBAC1C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;gBACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;oBAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;iBACzB;gBAED,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE;oBACtD,cAAc,CAAC,SAAS,CAAC,KAAK,CAC5B,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,CAChD,CAAA;iBACF;gBAED,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAC1D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;oBACpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBACtB,CAAC,CAAC,CAAA;gBAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACzC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CACpB,QAAQ,EACR,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAC9C,CAAA;gBAED,MAAM,SAAS,GAAG,EAAE,CAAA;gBACpB,IAAI,EAAE,CAAC,MAAM,EAAE;oBACb,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;wBACpC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;4BAC3D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;yBACpC;wBAED,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE;4BACtD,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;yBACrC;wBAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;4BACxD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;gCAC5D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;6BACrC;wBACH,CAAC,CAAC,CAAA;oBACJ,CAAC,CAAC,CAAA;iBACH;gBAED,MAAM,SAAS,GAAG,EAAE,CAAA;gBACpB,IAAI,EAAE,CAAC,MAAM,EAAE;oBACb,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;wBACpC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;wBAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;4BAC3D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;yBACpC;wBAED,IACE,CAAC,cAAc,CAAC,MAAM;4BACtB,cAAc,CAAC,SAAS;4BACxB,cAAc,CAAC,SAAS,EACxB;4BACA,MAAM,CAAC,GAAG,cAAc,CAAC,YAAY;gCACnC,CAAC,CAAC,cAAc,CAAC,SAAS;gCAC1B,CAAC,CAAC,cAAc,CAAC,SAAS,CAAA;4BAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;yBACd;wBAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;4BACxD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;gCAC5D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;6BACrC;wBACH,CAAC,CAAC,CAAA;oBACJ,CAAC,CAAC,CAAA;iBACH;gBAED,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;oBAC5B,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,OAAO,CAAA;oBAChC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;oBAC1B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;oBAC1B,KAAK,CAAC,aAAa,EAAE,CAAA;gBACvB,CAAC,CAAC,CAAA;gBAEF,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;oBAC7B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAA;oBAC5B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;oBAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,wBAAwB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;oBACtE,KAAK,CAAC,aAAa,EAAE,CAAA;gBACvB,CAAC,CAAC,CAAA;gBAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;oBAC9B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAA;oBAC5B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;oBAC1B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;oBAC1B,IAAI,CAAC,MAAM,CAAC,uCAAuC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;oBACpE,KAAK,CAAC,aAAa,EAAE,CAAA;gBACvB,CAAC,CAAC,CAAA;gBAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAY,EAAE,QAAgB,EAAE,EAAE;oBAClD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;qBAChC;oBAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;qBAChC;oBAED,EAAE,CAAC,kBAAkB,EAAE,CAAA;oBAEvB,IAAI,KAAK,EAAE;wBACT,MAAM,CAAC,KAAK,CAAC,CAAA;qBACd;yBAAM;wBACL,OAAO,CAAC,QAAQ,CAAC,CAAA;qBAClB;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;CACF;AA9eD,gCA8eC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,MAAM,IAAI,GAAa,EAAE,CAAA;IAEzB,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,GAAG,GAAG,EAAE,CAAA;IAEZ,SAAS,MAAM,CAAC,CAAS;QACvB,gCAAgC;QAChC,IAAI,OAAO,IAAI,CAAC,KAAK,GAAG,EAAE;YACxB,GAAG,IAAI,IAAI,CAAA;SACZ;QAED,GAAG,IAAI,CAAC,CAAA;QACR,OAAO,GAAG,KAAK,CAAA;IACjB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAE7B,IAAI,CAAC,KAAK,GAAG,EAAE;YACb,IAAI,CAAC,OAAO,EAAE;gBACZ,QAAQ,GAAG,CAAC,QAAQ,CAAA;aACrB;iBAAM;gBACL,MAAM,CAAC,CAAC,CAAC,CAAA;aACV;YACD,SAAQ;SACT;QAED,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,EAAE;YACzB,MAAM,CAAC,CAAC,CAAC,CAAA;YACT,SAAQ;SACT;QAED,IAAI,CAAC,KAAK,IAAI,IAAI,QAAQ,EAAE;YAC1B,OAAO,GAAG,IAAI,CAAA;YACd,SAAQ;SACT;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC1B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACd,GAAG,GAAG,EAAE,CAAA;aACT;YACD,SAAQ;SACT;QAED,MAAM,CAAC,CAAC,CAAC,CAAA;KACV;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;KACtB;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAvDD,4CAuDC;AAED,MAAM,SAAU,SAAQ,MAAM,CAAC,YAAY;IACzC,YAAY,OAAuB,EAAE,QAAgB;QACnD,KAAK,EAAE,CAAA;QAaT,kBAAa,GAAY,KAAK,CAAA,CAAC,4DAA4D;QAC3F,iBAAY,GAAW,EAAE,CAAA;QACzB,oBAAe,GAAW,CAAC,CAAA;QAC3B,kBAAa,GAAY,KAAK,CAAA,CAAC,wCAAwC;QACvE,kBAAa,GAAY,KAAK,CAAA,CAAC,uCAAuC;QAC9D,UAAK,GAAG,KAAK,CAAA,CAAC,aAAa;QAC3B,SAAI,GAAY,KAAK,CAAA;QAErB,YAAO,GAAwB,IAAI,CAAA;QAnBzC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;SAC9C;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;SAC3B;IACH,CAAC;IAaD,aAAa;QACX,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAM;SACP;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE,CAAA;SAClB;aAAM,IAAI,IAAI,CAAC,aAAa,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;SACrE;IACH,CAAC;IAEO,MAAM,CAAC,OAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7B,CAAC;IAEO,UAAU;QAChB,sCAAsC;QACtC,IAAI,KAAwB,CAAA;QAC5B,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,KAAK,GAAG,IAAI,KAAK,CACf,8DACE,IAAI,CAAC,QACP,4DACE,IAAI,CAAC,YACP,EAAE,CACH,CAAA;aACF;iBAAM,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;gBACvE,KAAK,GAAG,IAAI,KAAK,CACf,gBAAgB,IAAI,CAAC,QAAQ,2BAC3B,IAAI,CAAC,eACP,EAAE,CACH,CAAA;aACF;iBAAM,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;gBAC1D,KAAK,GAAG,IAAI,KAAK,CACf,gBACE,IAAI,CAAC,QACP,sEAAsE,CACvE,CAAA;aACF;SACF;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;SACpB;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;IAChD,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,KAAgB;QAC3C,IAAI,KAAK,CAAC,IAAI,EAAE;YACd,OAAM;SACP;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE;YAC/C,MAAM,OAAO,GAAG,0CAA0C,KAAK,CAAC,KAAK;gBACnE,IAAI,4CACJ,KAAK,CAAC,QACR,0FAA0F,CAAA;YAC1F,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;SACtB;QAED,KAAK,CAAC,UAAU,EAAE,CAAA;IACpB,CAAC;CACF"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/exec/package.json b/setup-maven/node_modules/@actions/exec/package.json
new file mode 100644
index 0000000..7af9624
--- /dev/null
+++ b/setup-maven/node_modules/@actions/exec/package.json
@@ -0,0 +1,64 @@
+{
+  "_from": "@actions/exec@^1.0.1",
+  "_id": "@actions/exec@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-nvFkxwiicvpzNiCBF4wFBDfnBvi7xp/as7LE1hBxBxKG2L29+gkIPBiLKMVORL+Hg3JNf07AKRfl0V5djoypjQ==",
+  "_location": "/@actions/exec",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@actions/exec@^1.0.1",
+    "name": "@actions/exec",
+    "escapedName": "@actions%2fexec",
+    "scope": "@actions",
+    "rawSpec": "^1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.1"
+  },
+  "_requiredBy": [
+    "/@actions/tool-cache"
+  ],
+  "_resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.1.tgz",
+  "_shasum": "1624b541165697e7008d7c87bc1f69f191263c6c",
+  "_spec": "@actions/exec@^1.0.1",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@actions/tool-cache",
+  "bugs": {
+    "url": "https://github.com/actions/toolkit/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Actions exec lib",
+  "devDependencies": {
+    "@actions/io": "^1.0.1"
+  },
+  "directories": {
+    "lib": "lib",
+    "test": "__tests__"
+  },
+  "files": [
+    "lib"
+  ],
+  "gitHead": "a2ab4bcf78e4f7080f0d45856e6eeba16f0bbc52",
+  "homepage": "https://github.com/actions/toolkit/tree/master/packages/exec",
+  "keywords": [
+    "github",
+    "actions",
+    "exec"
+  ],
+  "license": "MIT",
+  "main": "lib/exec.js",
+  "name": "@actions/exec",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/actions/toolkit.git"
+  },
+  "scripts": {
+    "test": "echo \"Error: run tests from root\" && exit 1",
+    "tsc": "tsc"
+  },
+  "version": "1.0.1"
+}
diff --git a/setup-maven/node_modules/@actions/github/LICENSE.md b/setup-maven/node_modules/@actions/github/LICENSE.md
new file mode 100644
index 0000000..e5a73f4
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/LICENSE.md
@@ -0,0 +1,7 @@
+Copyright 2019 GitHub
+
+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.
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/github/README.md b/setup-maven/node_modules/@actions/github/README.md
new file mode 100644
index 0000000..b431256
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/README.md
@@ -0,0 +1,50 @@
+# `@actions/github`
+
+> A hydrated Octokit client.
+
+## Usage
+
+Returns an Octokit client. See https://octokit.github.io/rest.js for the API.
+
+```js
+const github = require('@actions/github');
+const core = require('@actions/core');
+
+// This should be a token with access to your repository scoped in as a secret.
+const myToken = core.getInput('myToken');
+
+const octokit = new github.GitHub(myToken);
+
+const { data: pullRequest } = await octokit.pulls.get({
+    owner: 'octokit',
+    repo: 'rest.js',
+    pull_number: 123,
+    mediaType: {
+      format: 'diff'
+    }
+});
+
+console.log(pullRequest);
+```
+
+You can pass client options (except `auth`, which is handled by the token argument), as specified by [Octokit](https://octokit.github.io/rest.js/), as a second argument to the `GitHub` constructor.
+
+You can also make GraphQL requests. See https://github.com/octokit/graphql.js for the API.
+
+```js
+const result = await octokit.graphql(query, variables);
+```
+
+Finally, you can get the context of the current action:
+
+```js
+const github = require('@actions/github');
+
+const context = github.context;
+
+const newIssue = await octokit.issues.create({
+  ...context.repo,
+  title: 'New issue!',
+  body: 'Hello Universe!'
+});
+```
diff --git a/setup-maven/node_modules/@actions/github/lib/context.d.ts b/setup-maven/node_modules/@actions/github/lib/context.d.ts
new file mode 100644
index 0000000..3ee7583
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/context.d.ts
@@ -0,0 +1,26 @@
+import { WebhookPayload } from './interfaces';
+export declare class Context {
+    /**
+     * Webhook payload object that triggered the workflow
+     */
+    payload: WebhookPayload;
+    eventName: string;
+    sha: string;
+    ref: string;
+    workflow: string;
+    action: string;
+    actor: string;
+    /**
+     * Hydrate the context from the environment
+     */
+    constructor();
+    readonly issue: {
+        owner: string;
+        repo: string;
+        number: number;
+    };
+    readonly repo: {
+        owner: string;
+        repo: string;
+    };
+}
diff --git a/setup-maven/node_modules/@actions/github/lib/context.js b/setup-maven/node_modules/@actions/github/lib/context.js
new file mode 100644
index 0000000..0df128f
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/context.js
@@ -0,0 +1,45 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs_1 = require("fs");
+const os_1 = require("os");
+class Context {
+    /**
+     * Hydrate the context from the environment
+     */
+    constructor() {
+        this.payload = {};
+        if (process.env.GITHUB_EVENT_PATH) {
+            if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {
+                this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));
+            }
+            else {
+                process.stdout.write(`GITHUB_EVENT_PATH ${process.env.GITHUB_EVENT_PATH} does not exist${os_1.EOL}`);
+            }
+        }
+        this.eventName = process.env.GITHUB_EVENT_NAME;
+        this.sha = process.env.GITHUB_SHA;
+        this.ref = process.env.GITHUB_REF;
+        this.workflow = process.env.GITHUB_WORKFLOW;
+        this.action = process.env.GITHUB_ACTION;
+        this.actor = process.env.GITHUB_ACTOR;
+    }
+    get issue() {
+        const payload = this.payload;
+        return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pullRequest || payload).number });
+    }
+    get repo() {
+        if (process.env.GITHUB_REPOSITORY) {
+            const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
+            return { owner, repo };
+        }
+        if (this.payload.repository) {
+            return {
+                owner: this.payload.repository.owner.login,
+                repo: this.payload.repository.name
+            };
+        }
+        throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
+    }
+}
+exports.Context = Context;
+//# sourceMappingURL=context.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/github/lib/context.js.map b/setup-maven/node_modules/@actions/github/lib/context.js.map
new file mode 100644
index 0000000..24eabd8
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/context.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;AAEA,2BAA2C;AAC3C,2BAAsB;AAEtB,MAAa,OAAO;IAalB;;OAEG;IACH;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;YACjC,IAAI,eAAU,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;gBAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CACvB,iBAAY,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAChE,CAAA;aACF;iBAAM;gBACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBACE,OAAO,CAAC,GAAG,CAAC,iBACd,kBAAkB,QAAG,EAAE,CACxB,CAAA;aACF;SACF;QACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAA2B,CAAA;QACxD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAoB,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAoB,CAAA;QAC3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAyB,CAAA;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAuB,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAsB,CAAA;IACjD,CAAC;IAED,IAAI,KAAK;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAE5B,uCACK,IAAI,CAAC,IAAI,KACZ,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC,MAAM,IACjE;IACH,CAAC;IAED,IAAI,IAAI;QACN,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;YACjC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC9D,OAAO,EAAC,KAAK,EAAE,IAAI,EAAC,CAAA;SACrB;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3B,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK;gBAC1C,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;aACnC,CAAA;SACF;QAED,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;IACH,CAAC;CACF;AAjED,0BAiEC"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/github/lib/github.d.ts b/setup-maven/node_modules/@actions/github/lib/github.d.ts
new file mode 100644
index 0000000..7c5b9f2
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/github.d.ts
@@ -0,0 +1,8 @@
+import { GraphQlQueryResponse, Variables } from '@octokit/graphql';
+import Octokit from '@octokit/rest';
+import * as Context from './context';
+export declare const context: Context.Context;
+export declare class GitHub extends Octokit {
+    graphql: (query: string, variables?: Variables) => Promise<GraphQlQueryResponse>;
+    constructor(token: string, opts?: Omit<Octokit.Options, 'auth'>);
+}
diff --git a/setup-maven/node_modules/@actions/github/lib/github.js b/setup-maven/node_modules/@actions/github/lib/github.js
new file mode 100644
index 0000000..d5c782f
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/github.js
@@ -0,0 +1,29 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts
+const graphql_1 = require("@octokit/graphql");
+const rest_1 = __importDefault(require("@octokit/rest"));
+const Context = __importStar(require("./context"));
+// We need this in order to extend Octokit
+rest_1.default.prototype = new rest_1.default();
+exports.context = new Context.Context();
+class GitHub extends rest_1.default {
+    constructor(token, opts = {}) {
+        super(Object.assign(Object.assign({}, opts), { auth: `token ${token}` }));
+        this.graphql = graphql_1.defaults({
+            headers: { authorization: `token ${token}` }
+        });
+    }
+}
+exports.GitHub = GitHub;
+//# sourceMappingURL=github.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/github/lib/github.js.map b/setup-maven/node_modules/@actions/github/lib/github.js.map
new file mode 100644
index 0000000..0c268e8
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/github.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gGAAgG;AAChG,8CAA0E;AAC1E,yDAAmC;AACnC,mDAAoC;AAEpC,0CAA0C;AAC1C,cAAO,CAAC,SAAS,GAAG,IAAI,cAAO,EAAE,CAAA;AAEpB,QAAA,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;AAE5C,MAAa,MAAO,SAAQ,cAAO;IAMjC,YAAY,KAAa,EAAE,OAAsC,EAAE;QACjE,KAAK,iCAAK,IAAI,KAAE,IAAI,EAAE,SAAS,KAAK,EAAE,IAAE,CAAA;QACxC,IAAI,CAAC,OAAO,GAAG,kBAAQ,CAAC;YACtB,OAAO,EAAE,EAAC,aAAa,EAAE,SAAS,KAAK,EAAE,EAAC;SAC3C,CAAC,CAAA;IACJ,CAAC;CACF;AAZD,wBAYC"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/github/lib/interfaces.d.ts b/setup-maven/node_modules/@actions/github/lib/interfaces.d.ts
new file mode 100644
index 0000000..23788cc
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/interfaces.d.ts
@@ -0,0 +1,36 @@
+export interface PayloadRepository {
+    [key: string]: any;
+    full_name?: string;
+    name: string;
+    owner: {
+        [key: string]: any;
+        login: string;
+        name?: string;
+    };
+    html_url?: string;
+}
+export interface WebhookPayload {
+    [key: string]: any;
+    repository?: PayloadRepository;
+    issue?: {
+        [key: string]: any;
+        number: number;
+        html_url?: string;
+        body?: string;
+    };
+    pull_request?: {
+        [key: string]: any;
+        number: number;
+        html_url?: string;
+        body?: string;
+    };
+    sender?: {
+        [key: string]: any;
+        type: string;
+    };
+    action?: string;
+    installation?: {
+        id: number;
+        [key: string]: any;
+    };
+}
diff --git a/setup-maven/node_modules/@actions/github/lib/interfaces.js b/setup-maven/node_modules/@actions/github/lib/interfaces.js
new file mode 100644
index 0000000..a660b5e
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/interfaces.js
@@ -0,0 +1,4 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-explicit-any */
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=interfaces.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/github/lib/interfaces.js.map b/setup-maven/node_modules/@actions/github/lib/interfaces.js.map
new file mode 100644
index 0000000..dc2c960
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/lib/interfaces.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";AAAA,uDAAuD"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/github/package.json b/setup-maven/node_modules/@actions/github/package.json
new file mode 100644
index 0000000..f0055d6
--- /dev/null
+++ b/setup-maven/node_modules/@actions/github/package.json
@@ -0,0 +1,68 @@
+{
+  "_from": "@actions/github@^1.0.0",
+  "_id": "@actions/github@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-cHf6PyoNMdei13jEdGPhKprIMFmjVVW/dnM5/9QmQDJ1ZTaGVyezUSCUIC/ySNLRvDUpeFwPYMdThSEJldSbUw==",
+  "_location": "/@actions/github",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@actions/github@^1.0.0",
+    "name": "@actions/github",
+    "escapedName": "@actions%2fgithub",
+    "scope": "@actions",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/@actions/github/-/github-1.1.0.tgz",
+  "_shasum": "06f34e6b0cf07eb2b3641de3e680dbfae6bcd400",
+  "_spec": "@actions/github@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven",
+  "bugs": {
+    "url": "https://github.com/actions/toolkit/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@octokit/graphql": "^2.0.1",
+    "@octokit/rest": "^16.15.0"
+  },
+  "deprecated": false,
+  "description": "Actions github lib",
+  "devDependencies": {
+    "jest": "^24.7.1"
+  },
+  "directories": {
+    "lib": "lib",
+    "test": "__tests__"
+  },
+  "files": [
+    "lib"
+  ],
+  "gitHead": "a2ab4bcf78e4f7080f0d45856e6eeba16f0bbc52",
+  "homepage": "https://github.com/actions/toolkit/tree/master/packages/github",
+  "keywords": [
+    "github",
+    "actions"
+  ],
+  "license": "MIT",
+  "main": "lib/github.js",
+  "name": "@actions/github",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/actions/toolkit.git"
+  },
+  "scripts": {
+    "build": "tsc",
+    "test": "jest",
+    "tsc": "tsc"
+  },
+  "version": "1.1.0"
+}
diff --git a/setup-maven/node_modules/@actions/io/LICENSE.md b/setup-maven/node_modules/@actions/io/LICENSE.md
new file mode 100644
index 0000000..e5a73f4
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/LICENSE.md
@@ -0,0 +1,7 @@
+Copyright 2019 GitHub
+
+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.
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/io/README.md b/setup-maven/node_modules/@actions/io/README.md
new file mode 100644
index 0000000..9aadf2f
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/README.md
@@ -0,0 +1,53 @@
+# `@actions/io`
+
+> Core functions for cli filesystem scenarios
+
+## Usage
+
+#### mkdir -p
+
+Recursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified:
+
+```js
+const io = require('@actions/io');
+
+await io.mkdirP('path/to/make');
+```
+
+#### cp/mv
+
+Copy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv):
+
+```js
+const io = require('@actions/io');
+
+// Recursive must be true for directories
+const options = { recursive: true, force: false }
+
+await io.cp('path/to/directory', 'path/to/dest', options);
+await io.mv('path/to/file', 'path/to/dest');
+```
+
+#### rm -rf
+
+Remove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified.
+
+```js
+const io = require('@actions/io');
+
+await io.rmRF('path/to/directory');
+await io.rmRF('path/to/file');
+```
+
+#### which
+
+Get the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which).
+
+```js
+const exec = require('@actions/exec');
+const io = require('@actions/io');
+
+const pythonPath: string = await io.which('python', true)
+
+await exec.exec(`"${pythonPath}"`, ['main.py']);
+```
diff --git a/setup-maven/node_modules/@actions/io/lib/io-util.d.ts b/setup-maven/node_modules/@actions/io/lib/io-util.d.ts
new file mode 100644
index 0000000..f0214fe
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/lib/io-util.d.ts
@@ -0,0 +1,29 @@
+/// <reference types="node" />
+import * as fs from 'fs';
+export declare const chmod: typeof fs.promises.chmod, copyFile: typeof fs.promises.copyFile, lstat: typeof fs.promises.lstat, mkdir: typeof fs.promises.mkdir, readdir: typeof fs.promises.readdir, readlink: typeof fs.promises.readlink, rename: typeof fs.promises.rename, rmdir: typeof fs.promises.rmdir, stat: typeof fs.promises.stat, symlink: typeof fs.promises.symlink, unlink: typeof fs.promises.unlink;
+export declare const IS_WINDOWS: boolean;
+export declare function exists(fsPath: string): Promise<boolean>;
+export declare function isDirectory(fsPath: string, useStat?: boolean): Promise<boolean>;
+/**
+ * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
+ * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
+ */
+export declare function isRooted(p: string): boolean;
+/**
+ * Recursively create a directory at `fsPath`.
+ *
+ * This implementation is optimistic, meaning it attempts to create the full
+ * path first, and backs up the path stack from there.
+ *
+ * @param fsPath The path to create
+ * @param maxDepth The maximum recursion depth
+ * @param depth The current recursion depth
+ */
+export declare function mkdirP(fsPath: string, maxDepth?: number, depth?: number): Promise<void>;
+/**
+ * Best effort attempt to determine whether a file exists and is executable.
+ * @param filePath    file path to check
+ * @param extensions  additional file extensions to try
+ * @return if file exists and is executable, returns the file path. otherwise empty string.
+ */
+export declare function tryGetExecutablePath(filePath: string, extensions: string[]): Promise<string>;
diff --git a/setup-maven/node_modules/@actions/io/lib/io-util.js b/setup-maven/node_modules/@actions/io/lib/io-util.js
new file mode 100644
index 0000000..17b3bba
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/lib/io-util.js
@@ -0,0 +1,195 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const assert_1 = require("assert");
+const fs = require("fs");
+const path = require("path");
+_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
+exports.IS_WINDOWS = process.platform === 'win32';
+function exists(fsPath) {
+    return __awaiter(this, void 0, void 0, function* () {
+        try {
+            yield exports.stat(fsPath);
+        }
+        catch (err) {
+            if (err.code === 'ENOENT') {
+                return false;
+            }
+            throw err;
+        }
+        return true;
+    });
+}
+exports.exists = exists;
+function isDirectory(fsPath, useStat = false) {
+    return __awaiter(this, void 0, void 0, function* () {
+        const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);
+        return stats.isDirectory();
+    });
+}
+exports.isDirectory = isDirectory;
+/**
+ * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
+ * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
+ */
+function isRooted(p) {
+    p = normalizeSeparators(p);
+    if (!p) {
+        throw new Error('isRooted() parameter "p" cannot be empty');
+    }
+    if (exports.IS_WINDOWS) {
+        return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello
+        ); // e.g. C: or C:\hello
+    }
+    return p.startsWith('/');
+}
+exports.isRooted = isRooted;
+/**
+ * Recursively create a directory at `fsPath`.
+ *
+ * This implementation is optimistic, meaning it attempts to create the full
+ * path first, and backs up the path stack from there.
+ *
+ * @param fsPath The path to create
+ * @param maxDepth The maximum recursion depth
+ * @param depth The current recursion depth
+ */
+function mkdirP(fsPath, maxDepth = 1000, depth = 1) {
+    return __awaiter(this, void 0, void 0, function* () {
+        assert_1.ok(fsPath, 'a path argument must be provided');
+        fsPath = path.resolve(fsPath);
+        if (depth >= maxDepth)
+            return exports.mkdir(fsPath);
+        try {
+            yield exports.mkdir(fsPath);
+            return;
+        }
+        catch (err) {
+            switch (err.code) {
+                case 'ENOENT': {
+                    yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);
+                    yield exports.mkdir(fsPath);
+                    return;
+                }
+                default: {
+                    let stats;
+                    try {
+                        stats = yield exports.stat(fsPath);
+                    }
+                    catch (err2) {
+                        throw err;
+                    }
+                    if (!stats.isDirectory())
+                        throw err;
+                }
+            }
+        }
+    });
+}
+exports.mkdirP = mkdirP;
+/**
+ * Best effort attempt to determine whether a file exists and is executable.
+ * @param filePath    file path to check
+ * @param extensions  additional file extensions to try
+ * @return if file exists and is executable, returns the file path. otherwise empty string.
+ */
+function tryGetExecutablePath(filePath, extensions) {
+    return __awaiter(this, void 0, void 0, function* () {
+        let stats = undefined;
+        try {
+            // test file exists
+            stats = yield exports.stat(filePath);
+        }
+        catch (err) {
+            if (err.code !== 'ENOENT') {
+                // eslint-disable-next-line no-console
+                console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
+            }
+        }
+        if (stats && stats.isFile()) {
+            if (exports.IS_WINDOWS) {
+                // on Windows, test for valid extension
+                const upperExt = path.extname(filePath).toUpperCase();
+                if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {
+                    return filePath;
+                }
+            }
+            else {
+                if (isUnixExecutable(stats)) {
+                    return filePath;
+                }
+            }
+        }
+        // try each extension
+        const originalFilePath = filePath;
+        for (const extension of extensions) {
+            filePath = originalFilePath + extension;
+            stats = undefined;
+            try {
+                stats = yield exports.stat(filePath);
+            }
+            catch (err) {
+                if (err.code !== 'ENOENT') {
+                    // eslint-disable-next-line no-console
+                    console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
+                }
+            }
+            if (stats && stats.isFile()) {
+                if (exports.IS_WINDOWS) {
+                    // preserve the case of the actual file (since an extension was appended)
+                    try {
+                        const directory = path.dirname(filePath);
+                        const upperName = path.basename(filePath).toUpperCase();
+                        for (const actualName of yield exports.readdir(directory)) {
+                            if (upperName === actualName.toUpperCase()) {
+                                filePath = path.join(directory, actualName);
+                                break;
+                            }
+                        }
+                    }
+                    catch (err) {
+                        // eslint-disable-next-line no-console
+                        console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
+                    }
+                    return filePath;
+                }
+                else {
+                    if (isUnixExecutable(stats)) {
+                        return filePath;
+                    }
+                }
+            }
+        }
+        return '';
+    });
+}
+exports.tryGetExecutablePath = tryGetExecutablePath;
+function normalizeSeparators(p) {
+    p = p || '';
+    if (exports.IS_WINDOWS) {
+        // convert slashes on Windows
+        p = p.replace(/\//g, '\\');
+        // remove redundant slashes
+        return p.replace(/\\\\+/g, '\\');
+    }
+    // remove redundant slashes
+    return p.replace(/\/\/+/g, '/');
+}
+// on Mac/Linux, test the execute bit
+//     R   W  X  R  W X R W X
+//   256 128 64 32 16 8 4 2 1
+function isUnixExecutable(stats) {
+    return ((stats.mode & 1) > 0 ||
+        ((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||
+        ((stats.mode & 64) > 0 && stats.uid === process.getuid()));
+}
+//# sourceMappingURL=io-util.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/io/lib/io-util.js.map b/setup-maven/node_modules/@actions/io/lib/io-util.js.map
new file mode 100644
index 0000000..76cd3b9
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/lib/io-util.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"io-util.js","sourceRoot":"","sources":["../src/io-util.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyB;AACzB,yBAAwB;AACxB,6BAA4B;AAEf,gBAYE,qTAAA;AAEF,QAAA,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAEtD,SAAsB,MAAM,CAAC,MAAc;;QACzC,IAAI;YACF,MAAM,YAAI,CAAC,MAAM,CAAC,CAAA;SACnB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,OAAO,KAAK,CAAA;aACb;YAED,MAAM,GAAG,CAAA;SACV;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAZD,wBAYC;AAED,SAAsB,WAAW,CAC/B,MAAc,EACd,UAAmB,KAAK;;QAExB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,YAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;QAChE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC;CAAA;AAND,kCAMC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,CAAS;IAChC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,CAAC,CAAC,EAAE;QACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;KAC5D;IAED,IAAI,kBAAU,EAAE;QACd,OAAO,CACL,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,8BAA8B;SACxE,CAAA,CAAC,sBAAsB;KACzB;IAED,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAbD,4BAaC;AAED;;;;;;;;;GASG;AACH,SAAsB,MAAM,CAC1B,MAAc,EACd,WAAmB,IAAI,EACvB,QAAgB,CAAC;;QAEjB,WAAE,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAA;QAE9C,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAE7B,IAAI,KAAK,IAAI,QAAQ;YAAE,OAAO,aAAK,CAAC,MAAM,CAAC,CAAA;QAE3C,IAAI;YACF,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;YACnB,OAAM;SACP;QAAC,OAAO,GAAG,EAAE;YACZ,QAAQ,GAAG,CAAC,IAAI,EAAE;gBAChB,KAAK,QAAQ,CAAC,CAAC;oBACb,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;oBACvD,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;oBACnB,OAAM;iBACP;gBACD,OAAO,CAAC,CAAC;oBACP,IAAI,KAAe,CAAA;oBAEnB,IAAI;wBACF,KAAK,GAAG,MAAM,YAAI,CAAC,MAAM,CAAC,CAAA;qBAC3B;oBAAC,OAAO,IAAI,EAAE;wBACb,MAAM,GAAG,CAAA;qBACV;oBAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;wBAAE,MAAM,GAAG,CAAA;iBACpC;aACF;SACF;IACH,CAAC;CAAA;AAlCD,wBAkCC;AAED;;;;;GAKG;AACH,SAAsB,oBAAoB,CACxC,QAAgB,EAChB,UAAoB;;QAEpB,IAAI,KAAK,GAAyB,SAAS,CAAA;QAC3C,IAAI;YACF,mBAAmB;YACnB,KAAK,GAAG,MAAM,YAAI,CAAC,QAAQ,CAAC,CAAA;SAC7B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CACT,uEAAuE,QAAQ,MAAM,GAAG,EAAE,CAC3F,CAAA;aACF;SACF;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;YAC3B,IAAI,kBAAU,EAAE;gBACd,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;gBACrD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,EAAE;oBACpE,OAAO,QAAQ,CAAA;iBAChB;aACF;iBAAM;gBACL,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAC3B,OAAO,QAAQ,CAAA;iBAChB;aACF;SACF;QAED,qBAAqB;QACrB,MAAM,gBAAgB,GAAG,QAAQ,CAAA;QACjC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,QAAQ,GAAG,gBAAgB,GAAG,SAAS,CAAA;YAEvC,KAAK,GAAG,SAAS,CAAA;YACjB,IAAI;gBACF,KAAK,GAAG,MAAM,YAAI,CAAC,QAAQ,CAAC,CAAA;aAC7B;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACzB,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CACT,uEAAuE,QAAQ,MAAM,GAAG,EAAE,CAC3F,CAAA;iBACF;aACF;YAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;gBAC3B,IAAI,kBAAU,EAAE;oBACd,yEAAyE;oBACzE,IAAI;wBACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;wBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;wBACvD,KAAK,MAAM,UAAU,IAAI,MAAM,eAAO,CAAC,SAAS,CAAC,EAAE;4BACjD,IAAI,SAAS,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE;gCAC1C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;gCAC3C,MAAK;6BACN;yBACF;qBACF;oBAAC,OAAO,GAAG,EAAE;wBACZ,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CACT,yEAAyE,QAAQ,MAAM,GAAG,EAAE,CAC7F,CAAA;qBACF;oBAED,OAAO,QAAQ,CAAA;iBAChB;qBAAM;oBACL,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;wBAC3B,OAAO,QAAQ,CAAA;qBAChB;iBACF;aACF;SACF;QAED,OAAO,EAAE,CAAA;IACX,CAAC;CAAA;AA5ED,oDA4EC;AAED,SAAS,mBAAmB,CAAC,CAAS;IACpC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IACX,IAAI,kBAAU,EAAE;QACd,6BAA6B;QAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAE1B,2BAA2B;QAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;KACjC;IAED,2BAA2B;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC;AAED,qCAAqC;AACrC,6BAA6B;AAC7B,6BAA6B;AAC7B,SAAS,gBAAgB,CAAC,KAAe;IACvC,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAC1D,CAAA;AACH,CAAC"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/io/lib/io.d.ts b/setup-maven/node_modules/@actions/io/lib/io.d.ts
new file mode 100644
index 0000000..a4ea5a7
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/lib/io.d.ts
@@ -0,0 +1,56 @@
+/**
+ * Interface for cp/mv options
+ */
+export interface CopyOptions {
+    /** Optional. Whether to recursively copy all subdirectories. Defaults to false */
+    recursive?: boolean;
+    /** Optional. Whether to overwrite existing files in the destination. Defaults to true */
+    force?: boolean;
+}
+/**
+ * Interface for cp/mv options
+ */
+export interface MoveOptions {
+    /** Optional. Whether to overwrite existing files in the destination. Defaults to true */
+    force?: boolean;
+}
+/**
+ * Copies a file or folder.
+ * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
+ *
+ * @param     source    source path
+ * @param     dest      destination path
+ * @param     options   optional. See CopyOptions.
+ */
+export declare function cp(source: string, dest: string, options?: CopyOptions): Promise<void>;
+/**
+ * Moves a path.
+ *
+ * @param     source    source path
+ * @param     dest      destination path
+ * @param     options   optional. See MoveOptions.
+ */
+export declare function mv(source: string, dest: string, options?: MoveOptions): Promise<void>;
+/**
+ * Remove a path recursively with force
+ *
+ * @param inputPath path to remove
+ */
+export declare function rmRF(inputPath: string): Promise<void>;
+/**
+ * Make a directory.  Creates the full path with folders in between
+ * Will throw if it fails
+ *
+ * @param   fsPath        path to create
+ * @returns Promise<void>
+ */
+export declare function mkdirP(fsPath: string): Promise<void>;
+/**
+ * Returns path of a tool had the tool actually been invoked.  Resolves via paths.
+ * If you check and the tool does not exist, it will throw.
+ *
+ * @param     tool              name of the tool
+ * @param     check             whether to check if tool exists
+ * @returns   Promise<string>   path to tool
+ */
+export declare function which(tool: string, check?: boolean): Promise<string>;
diff --git a/setup-maven/node_modules/@actions/io/lib/io.js b/setup-maven/node_modules/@actions/io/lib/io.js
new file mode 100644
index 0000000..ad5bdb9
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/lib/io.js
@@ -0,0 +1,290 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const childProcess = require("child_process");
+const path = require("path");
+const util_1 = require("util");
+const ioUtil = require("./io-util");
+const exec = util_1.promisify(childProcess.exec);
+/**
+ * Copies a file or folder.
+ * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
+ *
+ * @param     source    source path
+ * @param     dest      destination path
+ * @param     options   optional. See CopyOptions.
+ */
+function cp(source, dest, options = {}) {
+    return __awaiter(this, void 0, void 0, function* () {
+        const { force, recursive } = readCopyOptions(options);
+        const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
+        // Dest is an existing file, but not forcing
+        if (destStat && destStat.isFile() && !force) {
+            return;
+        }
+        // If dest is an existing directory, should copy inside.
+        const newDest = destStat && destStat.isDirectory()
+            ? path.join(dest, path.basename(source))
+            : dest;
+        if (!(yield ioUtil.exists(source))) {
+            throw new Error(`no such file or directory: ${source}`);
+        }
+        const sourceStat = yield ioUtil.stat(source);
+        if (sourceStat.isDirectory()) {
+            if (!recursive) {
+                throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
+            }
+            else {
+                yield cpDirRecursive(source, newDest, 0, force);
+            }
+        }
+        else {
+            if (path.relative(source, newDest) === '') {
+                // a file cannot be copied to itself
+                throw new Error(`'${newDest}' and '${source}' are the same file`);
+            }
+            yield copyFile(source, newDest, force);
+        }
+    });
+}
+exports.cp = cp;
+/**
+ * Moves a path.
+ *
+ * @param     source    source path
+ * @param     dest      destination path
+ * @param     options   optional. See MoveOptions.
+ */
+function mv(source, dest, options = {}) {
+    return __awaiter(this, void 0, void 0, function* () {
+        if (yield ioUtil.exists(dest)) {
+            let destExists = true;
+            if (yield ioUtil.isDirectory(dest)) {
+                // If dest is directory copy src into dest
+                dest = path.join(dest, path.basename(source));
+                destExists = yield ioUtil.exists(dest);
+            }
+            if (destExists) {
+                if (options.force == null || options.force) {
+                    yield rmRF(dest);
+                }
+                else {
+                    throw new Error('Destination already exists');
+                }
+            }
+        }
+        yield mkdirP(path.dirname(dest));
+        yield ioUtil.rename(source, dest);
+    });
+}
+exports.mv = mv;
+/**
+ * Remove a path recursively with force
+ *
+ * @param inputPath path to remove
+ */
+function rmRF(inputPath) {
+    return __awaiter(this, void 0, void 0, function* () {
+        if (ioUtil.IS_WINDOWS) {
+            // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
+            // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
+            try {
+                if (yield ioUtil.isDirectory(inputPath, true)) {
+                    yield exec(`rd /s /q "${inputPath}"`);
+                }
+                else {
+                    yield exec(`del /f /a "${inputPath}"`);
+                }
+            }
+            catch (err) {
+                // if you try to delete a file that doesn't exist, desired result is achieved
+                // other errors are valid
+                if (err.code !== 'ENOENT')
+                    throw err;
+            }
+            // Shelling out fails to remove a symlink folder with missing source, this unlink catches that
+            try {
+                yield ioUtil.unlink(inputPath);
+            }
+            catch (err) {
+                // if you try to delete a file that doesn't exist, desired result is achieved
+                // other errors are valid
+                if (err.code !== 'ENOENT')
+                    throw err;
+            }
+        }
+        else {
+            let isDir = false;
+            try {
+                isDir = yield ioUtil.isDirectory(inputPath);
+            }
+            catch (err) {
+                // if you try to delete a file that doesn't exist, desired result is achieved
+                // other errors are valid
+                if (err.code !== 'ENOENT')
+                    throw err;
+                return;
+            }
+            if (isDir) {
+                yield exec(`rm -rf "${inputPath}"`);
+            }
+            else {
+                yield ioUtil.unlink(inputPath);
+            }
+        }
+    });
+}
+exports.rmRF = rmRF;
+/**
+ * Make a directory.  Creates the full path with folders in between
+ * Will throw if it fails
+ *
+ * @param   fsPath        path to create
+ * @returns Promise<void>
+ */
+function mkdirP(fsPath) {
+    return __awaiter(this, void 0, void 0, function* () {
+        yield ioUtil.mkdirP(fsPath);
+    });
+}
+exports.mkdirP = mkdirP;
+/**
+ * Returns path of a tool had the tool actually been invoked.  Resolves via paths.
+ * If you check and the tool does not exist, it will throw.
+ *
+ * @param     tool              name of the tool
+ * @param     check             whether to check if tool exists
+ * @returns   Promise<string>   path to tool
+ */
+function which(tool, check) {
+    return __awaiter(this, void 0, void 0, function* () {
+        if (!tool) {
+            throw new Error("parameter 'tool' is required");
+        }
+        // recursive when check=true
+        if (check) {
+            const result = yield which(tool, false);
+            if (!result) {
+                if (ioUtil.IS_WINDOWS) {
+                    throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
+                }
+                else {
+                    throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
+                }
+            }
+        }
+        try {
+            // build the list of extensions to try
+            const extensions = [];
+            if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {
+                for (const extension of process.env.PATHEXT.split(path.delimiter)) {
+                    if (extension) {
+                        extensions.push(extension);
+                    }
+                }
+            }
+            // if it's rooted, return it if exists. otherwise return empty.
+            if (ioUtil.isRooted(tool)) {
+                const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
+                if (filePath) {
+                    return filePath;
+                }
+                return '';
+            }
+            // if any path separators, return empty
+            if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) {
+                return '';
+            }
+            // build the list of directories
+            //
+            // Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
+            // it feels like we should not do this. Checking the current directory seems like more of a use
+            // case of a shell, and the which() function exposed by the toolkit should strive for consistency
+            // across platforms.
+            const directories = [];
+            if (process.env.PATH) {
+                for (const p of process.env.PATH.split(path.delimiter)) {
+                    if (p) {
+                        directories.push(p);
+                    }
+                }
+            }
+            // return the first match
+            for (const directory of directories) {
+                const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);
+                if (filePath) {
+                    return filePath;
+                }
+            }
+            return '';
+        }
+        catch (err) {
+            throw new Error(`which failed with message ${err.message}`);
+        }
+    });
+}
+exports.which = which;
+function readCopyOptions(options) {
+    const force = options.force == null ? true : options.force;
+    const recursive = Boolean(options.recursive);
+    return { force, recursive };
+}
+function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
+    return __awaiter(this, void 0, void 0, function* () {
+        // Ensure there is not a run away recursive copy
+        if (currentDepth >= 255)
+            return;
+        currentDepth++;
+        yield mkdirP(destDir);
+        const files = yield ioUtil.readdir(sourceDir);
+        for (const fileName of files) {
+            const srcFile = `${sourceDir}/${fileName}`;
+            const destFile = `${destDir}/${fileName}`;
+            const srcFileStat = yield ioUtil.lstat(srcFile);
+            if (srcFileStat.isDirectory()) {
+                // Recurse
+                yield cpDirRecursive(srcFile, destFile, currentDepth, force);
+            }
+            else {
+                yield copyFile(srcFile, destFile, force);
+            }
+        }
+        // Change the mode for the newly created directory
+        yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
+    });
+}
+// Buffered file copy
+function copyFile(srcFile, destFile, force) {
+    return __awaiter(this, void 0, void 0, function* () {
+        if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
+            // unlink/re-link it
+            try {
+                yield ioUtil.lstat(destFile);
+                yield ioUtil.unlink(destFile);
+            }
+            catch (e) {
+                // Try to override file permission
+                if (e.code === 'EPERM') {
+                    yield ioUtil.chmod(destFile, '0666');
+                    yield ioUtil.unlink(destFile);
+                }
+                // other errors = it doesn't exist, no work to do
+            }
+            // Copy over symlink
+            const symlinkFull = yield ioUtil.readlink(srcFile);
+            yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);
+        }
+        else if (!(yield ioUtil.exists(destFile)) || force) {
+            yield ioUtil.copyFile(srcFile, destFile);
+        }
+    });
+}
+//# sourceMappingURL=io.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/io/lib/io.js.map b/setup-maven/node_modules/@actions/io/lib/io.js.map
new file mode 100644
index 0000000..91db963
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/lib/io.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,8CAA6C;AAC7C,6BAA4B;AAC5B,+BAA8B;AAC9B,oCAAmC;AAEnC,MAAM,IAAI,GAAG,gBAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;AAoBzC;;;;;;;GAOG;AACH,SAAsB,EAAE,CACtB,MAAc,EACd,IAAY,EACZ,UAAuB,EAAE;;QAEzB,MAAM,EAAC,KAAK,EAAE,SAAS,EAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAEnD,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7E,4CAA4C;QAC5C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE;YAC3C,OAAM;SACP;QAED,wDAAwD;QACxD,MAAM,OAAO,GACX,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE;YAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC,CAAC,IAAI,CAAA;QAEV,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAA;SACxD;QACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE5C,IAAI,UAAU,CAAC,WAAW,EAAE,EAAE;YAC5B,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,4DAA4D,CACtF,CAAA;aACF;iBAAM;gBACL,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;aAChD;SACF;aAAM;YACL,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE;gBACzC,oCAAoC;gBACpC,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,UAAU,MAAM,qBAAqB,CAAC,CAAA;aAClE;YAED,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;SACvC;IACH,CAAC;CAAA;AAxCD,gBAwCC;AAED;;;;;;GAMG;AACH,SAAsB,EAAE,CACtB,MAAc,EACd,IAAY,EACZ,UAAuB,EAAE;;QAEzB,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,UAAU,GAAG,IAAI,CAAA;YACrB,IAAI,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;gBAClC,0CAA0C;gBAC1C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;gBAC7C,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;aACvC;YAED,IAAI,UAAU,EAAE;gBACd,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;oBAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;iBACjB;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;iBAC9C;aACF;SACF;QACD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAChC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;CAAA;AAvBD,gBAuBC;AAED;;;;GAIG;AACH,SAAsB,IAAI,CAAC,SAAiB;;QAC1C,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,yHAAyH;YACzH,mGAAmG;YACnG,IAAI;gBACF,IAAI,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;oBAC7C,MAAM,IAAI,CAAC,aAAa,SAAS,GAAG,CAAC,CAAA;iBACtC;qBAAM;oBACL,MAAM,IAAI,CAAC,cAAc,SAAS,GAAG,CAAC,CAAA;iBACvC;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,6EAA6E;gBAC7E,yBAAyB;gBACzB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,GAAG,CAAA;aACrC;YAED,8FAA8F;YAC9F,IAAI;gBACF,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;aAC/B;YAAC,OAAO,GAAG,EAAE;gBACZ,6EAA6E;gBAC7E,yBAAyB;gBACzB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,GAAG,CAAA;aACrC;SACF;aAAM;YACL,IAAI,KAAK,GAAG,KAAK,CAAA;YACjB,IAAI;gBACF,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;aAC5C;YAAC,OAAO,GAAG,EAAE;gBACZ,6EAA6E;gBAC7E,yBAAyB;gBACzB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,GAAG,CAAA;gBACpC,OAAM;aACP;YAED,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,WAAW,SAAS,GAAG,CAAC,CAAA;aACpC;iBAAM;gBACL,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;aAC/B;SACF;IACH,CAAC;CAAA;AAzCD,oBAyCC;AAED;;;;;;GAMG;AACH,SAAsB,MAAM,CAAC,MAAc;;QACzC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;CAAA;AAFD,wBAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAC,IAAY,EAAE,KAAe;;QACvD,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,4BAA4B;QAC5B,IAAI,KAAK,EAAE;YACT,MAAM,MAAM,GAAW,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAE/C,IAAI,CAAC,MAAM,EAAE;gBACX,IAAI,MAAM,CAAC,UAAU,EAAE;oBACrB,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,wMAAwM,CAClP,CAAA;iBACF;qBAAM;oBACL,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,gMAAgM,CAC1O,CAAA;iBACF;aACF;SACF;QAED,IAAI;YACF,sCAAsC;YACtC,MAAM,UAAU,GAAa,EAAE,CAAA;YAC/B,IAAI,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;gBAC5C,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBACjE,IAAI,SAAS,EAAE;wBACb,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;qBAC3B;iBACF;aACF;YAED,+DAA+D;YAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACzB,MAAM,QAAQ,GAAW,MAAM,MAAM,CAAC,oBAAoB,CACxD,IAAI,EACJ,UAAU,CACX,CAAA;gBAED,IAAI,QAAQ,EAAE;oBACZ,OAAO,QAAQ,CAAA;iBAChB;gBAED,OAAO,EAAE,CAAA;aACV;YAED,uCAAuC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;gBACpE,OAAO,EAAE,CAAA;aACV;YAED,gCAAgC;YAChC,EAAE;YACF,iGAAiG;YACjG,+FAA+F;YAC/F,iGAAiG;YACjG,oBAAoB;YACpB,MAAM,WAAW,GAAa,EAAE,CAAA;YAEhC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;gBACpB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBACtD,IAAI,CAAC,EAAE;wBACL,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;qBACpB;iBACF;aACF;YAED,yBAAyB;YACzB,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE;gBACnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAChD,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,EAC3B,UAAU,CACX,CAAA;gBACD,IAAI,QAAQ,EAAE;oBACZ,OAAO,QAAQ,CAAA;iBAChB;aACF;YAED,OAAO,EAAE,CAAA;SACV;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;SAC5D;IACH,CAAC;CAAA;AAnFD,sBAmFC;AAED,SAAS,eAAe,CAAC,OAAoB;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAA;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5C,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,CAAA;AAC3B,CAAC;AAED,SAAe,cAAc,CAC3B,SAAiB,EACjB,OAAe,EACf,YAAoB,EACpB,KAAc;;QAEd,gDAAgD;QAChD,IAAI,YAAY,IAAI,GAAG;YAAE,OAAM;QAC/B,YAAY,EAAE,CAAA;QAEd,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;QAErB,MAAM,KAAK,GAAa,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAEvD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;YAC5B,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAA;YAC1C,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAA;YACzC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAE/C,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE;gBAC7B,UAAU;gBACV,MAAM,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;aAC7D;iBAAM;gBACL,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;aACzC;SACF;QAED,kDAAkD;QAClD,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAClE,CAAC;CAAA;AAED,qBAAqB;AACrB,SAAe,QAAQ,CACrB,OAAe,EACf,QAAgB,EAChB,KAAc;;QAEd,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE;YAClD,oBAAoB;YACpB,IAAI;gBACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAC5B,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;aAC9B;YAAC,OAAO,CAAC,EAAE;gBACV,kCAAkC;gBAClC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;oBACtB,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;oBACpC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;iBAC9B;gBACD,iDAAiD;aAClD;YAED,oBAAoB;YACpB,MAAM,WAAW,GAAW,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC1D,MAAM,MAAM,CAAC,OAAO,CAClB,WAAW,EACX,QAAQ,EACR,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACtC,CAAA;SACF;aAAM,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,EAAE;YACpD,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;SACzC;IACH,CAAC;CAAA"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/io/package.json b/setup-maven/node_modules/@actions/io/package.json
new file mode 100644
index 0000000..311dba1
--- /dev/null
+++ b/setup-maven/node_modules/@actions/io/package.json
@@ -0,0 +1,62 @@
+{
+  "_from": "@actions/io@^1.0.0",
+  "_id": "@actions/io@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-rhq+tfZukbtaus7xyUtwKfuiCRXd1hWSfmJNEpFgBQJ4woqPEpsBw04awicjwz9tyG2/MVhAEMfVn664Cri5zA==",
+  "_location": "/@actions/io",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@actions/io@^1.0.0",
+    "name": "@actions/io",
+    "escapedName": "@actions%2fio",
+    "scope": "@actions",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/",
+    "/@actions/tool-cache"
+  ],
+  "_resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.1.tgz",
+  "_shasum": "81a9418fe2bbdef2d2717a8e9f85188b9c565aca",
+  "_spec": "@actions/io@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven",
+  "bugs": {
+    "url": "https://github.com/actions/toolkit/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Actions io lib",
+  "directories": {
+    "lib": "lib",
+    "test": "__tests__"
+  },
+  "files": [
+    "lib"
+  ],
+  "gitHead": "a2ab4bcf78e4f7080f0d45856e6eeba16f0bbc52",
+  "homepage": "https://github.com/actions/toolkit/tree/master/packages/io",
+  "keywords": [
+    "github",
+    "actions",
+    "io"
+  ],
+  "license": "MIT",
+  "main": "lib/io.js",
+  "name": "@actions/io",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/actions/toolkit.git"
+  },
+  "scripts": {
+    "test": "echo \"Error: run tests from root\" && exit 1",
+    "tsc": "tsc"
+  },
+  "version": "1.0.1"
+}
diff --git a/setup-maven/node_modules/@actions/tool-cache/README.md b/setup-maven/node_modules/@actions/tool-cache/README.md
new file mode 100644
index 0000000..e00bb4b
--- /dev/null
+++ b/setup-maven/node_modules/@actions/tool-cache/README.md
@@ -0,0 +1,82 @@
+# `@actions/tool-cache`
+
+> Functions necessary for downloading and caching tools.
+
+## Usage
+
+#### Download
+
+You can use this to download tools (or other files) from a download URL:
+
+```js
+const tc = require('@actions/tool-cache');
+
+const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
+```
+
+#### Extract
+
+These can then be extracted in platform specific ways:
+
+```js
+const tc = require('@actions/tool-cache');
+
+if (process.platform === 'win32') {
+  const node12Path = tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');
+  const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');
+
+  // Or alternately
+  const node12Path = tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');
+  const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');
+}
+else {
+  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
+  const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
+}
+```
+
+#### Cache
+
+Finally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for private runners (private runners are still in development but are on the roadmap).
+
+You'll often want to add it to the path as part of this step:
+
+```js
+const tc = require('@actions/tool-cache');
+const core = require('@actions/core');
+
+const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
+const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
+
+const cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');
+core.addPath(cachedPath);
+```
+
+You can also cache files for reuse.
+
+```js
+const tc = require('@actions/tool-cache');
+
+tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0');
+```
+
+#### Find
+
+Finally, you can find directories and files you've previously cached:
+
+```js
+const tc = require('@actions/tool-cache');
+const core = require('@actions/core');
+
+const nodeDirectory = tc.find('node', '12.x', 'x64');
+core.addPath(nodeDirectory);
+```
+
+You can even find all cached versions of a tool:
+
+```js
+const tc = require('@actions/tool-cache');
+
+const allNodeVersions = tc.findAllVersions('node');
+console.log(`Versions of node available: ${allNodeVersions}`);
+```
diff --git a/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.d.ts b/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.d.ts
new file mode 100644
index 0000000..ca6fa07
--- /dev/null
+++ b/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.d.ts
@@ -0,0 +1,79 @@
+export declare class HTTPError extends Error {
+    readonly httpStatusCode: number | undefined;
+    constructor(httpStatusCode: number | undefined);
+}
+/**
+ * Download a tool from an url and stream it into a file
+ *
+ * @param url       url of tool to download
+ * @returns         path to downloaded tool
+ */
+export declare function downloadTool(url: string): Promise<string>;
+/**
+ * Extract a .7z file
+ *
+ * @param file     path to the .7z file
+ * @param dest     destination directory. Optional.
+ * @param _7zPath  path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
+ * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
+ * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
+ * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
+ * interface, it is smaller than the full command line interface, and it does support long paths. At the
+ * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
+ * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
+ * to 7zr.exe can be pass to this function.
+ * @returns        path to the destination directory
+ */
+export declare function extract7z(file: string, dest?: string, _7zPath?: string): Promise<string>;
+/**
+ * Extract a tar
+ *
+ * @param file     path to the tar
+ * @param dest     destination directory. Optional.
+ * @param flags    flags for the tar. Optional.
+ * @returns        path to the destination directory
+ */
+export declare function extractTar(file: string, dest?: string, flags?: string): Promise<string>;
+/**
+ * Extract a zip
+ *
+ * @param file     path to the zip
+ * @param dest     destination directory. Optional.
+ * @returns        path to the destination directory
+ */
+export declare function extractZip(file: string, dest?: string): Promise<string>;
+/**
+ * Caches a directory and installs it into the tool cacheDir
+ *
+ * @param sourceDir    the directory to cache into tools
+ * @param tool          tool name
+ * @param version       version of the tool.  semver format
+ * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
+ */
+export declare function cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string>;
+/**
+ * Caches a downloaded file (GUID) and installs it
+ * into the tool cache with a given targetName
+ *
+ * @param sourceFile    the file to cache into tools.  Typically a result of downloadTool which is a guid.
+ * @param targetFile    the name of the file name in the tools directory
+ * @param tool          tool name
+ * @param version       version of the tool.  semver format
+ * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
+ */
+export declare function cacheFile(sourceFile: string, targetFile: string, tool: string, version: string, arch?: string): Promise<string>;
+/**
+ * Finds the path to a tool version in the local installed tool cache
+ *
+ * @param toolName      name of the tool
+ * @param versionSpec   version of the tool
+ * @param arch          optional arch.  defaults to arch of computer
+ */
+export declare function find(toolName: string, versionSpec: string, arch?: string): string;
+/**
+ * Finds the paths to all versions of a tool that are installed in the local tool cache
+ *
+ * @param toolName  name of the tool
+ * @param arch      optional arch.  defaults to arch of computer
+ */
+export declare function findAllVersions(toolName: string, arch?: string): string[];
diff --git a/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.js b/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.js
new file mode 100644
index 0000000..bb04f17
--- /dev/null
+++ b/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.js
@@ -0,0 +1,438 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = require("@actions/core");
+const io = require("@actions/io");
+const fs = require("fs");
+const os = require("os");
+const path = require("path");
+const httpm = require("typed-rest-client/HttpClient");
+const semver = require("semver");
+const uuidV4 = require("uuid/v4");
+const exec_1 = require("@actions/exec/lib/exec");
+const assert_1 = require("assert");
+class HTTPError extends Error {
+    constructor(httpStatusCode) {
+        super(`Unexpected HTTP response: ${httpStatusCode}`);
+        this.httpStatusCode = httpStatusCode;
+        Object.setPrototypeOf(this, new.target.prototype);
+    }
+}
+exports.HTTPError = HTTPError;
+const IS_WINDOWS = process.platform === 'win32';
+const userAgent = 'actions/tool-cache';
+// On load grab temp directory and cache directory and remove them from env (currently don't want to expose this)
+let tempDirectory = process.env['RUNNER_TEMP'] || '';
+let cacheRoot = process.env['RUNNER_TOOL_CACHE'] || '';
+// If directories not found, place them in common temp locations
+if (!tempDirectory || !cacheRoot) {
+    let baseLocation;
+    if (IS_WINDOWS) {
+        // On windows use the USERPROFILE env variable
+        baseLocation = process.env['USERPROFILE'] || 'C:\\';
+    }
+    else {
+        if (process.platform === 'darwin') {
+            baseLocation = '/Users';
+        }
+        else {
+            baseLocation = '/home';
+        }
+    }
+    if (!tempDirectory) {
+        tempDirectory = path.join(baseLocation, 'actions', 'temp');
+    }
+    if (!cacheRoot) {
+        cacheRoot = path.join(baseLocation, 'actions', 'cache');
+    }
+}
+/**
+ * Download a tool from an url and stream it into a file
+ *
+ * @param url       url of tool to download
+ * @returns         path to downloaded tool
+ */
+function downloadTool(url) {
+    return __awaiter(this, void 0, void 0, function* () {
+        // Wrap in a promise so that we can resolve from within stream callbacks
+        return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+            try {
+                const http = new httpm.HttpClient(userAgent, [], {
+                    allowRetries: true,
+                    maxRetries: 3
+                });
+                const destPath = path.join(tempDirectory, uuidV4());
+                yield io.mkdirP(tempDirectory);
+                core.debug(`Downloading ${url}`);
+                core.debug(`Downloading ${destPath}`);
+                if (fs.existsSync(destPath)) {
+                    throw new Error(`Destination file path ${destPath} already exists`);
+                }
+                const response = yield http.get(url);
+                if (response.message.statusCode !== 200) {
+                    const err = new HTTPError(response.message.statusCode);
+                    core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
+                    throw err;
+                }
+                const file = fs.createWriteStream(destPath);
+                file.on('open', () => __awaiter(this, void 0, void 0, function* () {
+                    try {
+                        const stream = response.message.pipe(file);
+                        stream.on('close', () => {
+                            core.debug('download complete');
+                            resolve(destPath);
+                        });
+                    }
+                    catch (err) {
+                        core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
+                        reject(err);
+                    }
+                }));
+                file.on('error', err => {
+                    file.end();
+                    reject(err);
+                });
+            }
+            catch (err) {
+                reject(err);
+            }
+        }));
+    });
+}
+exports.downloadTool = downloadTool;
+/**
+ * Extract a .7z file
+ *
+ * @param file     path to the .7z file
+ * @param dest     destination directory. Optional.
+ * @param _7zPath  path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
+ * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
+ * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
+ * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
+ * interface, it is smaller than the full command line interface, and it does support long paths. At the
+ * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
+ * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
+ * to 7zr.exe can be pass to this function.
+ * @returns        path to the destination directory
+ */
+function extract7z(file, dest, _7zPath) {
+    return __awaiter(this, void 0, void 0, function* () {
+        assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS');
+        assert_1.ok(file, 'parameter "file" is required');
+        dest = dest || (yield _createExtractFolder(dest));
+        const originalCwd = process.cwd();
+        process.chdir(dest);
+        if (_7zPath) {
+            try {
+                const args = [
+                    'x',
+                    '-bb1',
+                    '-bd',
+                    '-sccUTF-8',
+                    file
+                ];
+                const options = {
+                    silent: true
+                };
+                yield exec_1.exec(`"${_7zPath}"`, args, options);
+            }
+            finally {
+                process.chdir(originalCwd);
+            }
+        }
+        else {
+            const escapedScript = path
+                .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1')
+                .replace(/'/g, "''")
+                .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
+            const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, '');
+            const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
+            const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`;
+            const args = [
+                '-NoLogo',
+                '-Sta',
+                '-NoProfile',
+                '-NonInteractive',
+                '-ExecutionPolicy',
+                'Unrestricted',
+                '-Command',
+                command
+            ];
+            const options = {
+                silent: true
+            };
+            try {
+                const powershellPath = yield io.which('powershell', true);
+                yield exec_1.exec(`"${powershellPath}"`, args, options);
+            }
+            finally {
+                process.chdir(originalCwd);
+            }
+        }
+        return dest;
+    });
+}
+exports.extract7z = extract7z;
+/**
+ * Extract a tar
+ *
+ * @param file     path to the tar
+ * @param dest     destination directory. Optional.
+ * @param flags    flags for the tar. Optional.
+ * @returns        path to the destination directory
+ */
+function extractTar(file, dest, flags = 'xz') {
+    return __awaiter(this, void 0, void 0, function* () {
+        if (!file) {
+            throw new Error("parameter 'file' is required");
+        }
+        dest = dest || (yield _createExtractFolder(dest));
+        const tarPath = yield io.which('tar', true);
+        yield exec_1.exec(`"${tarPath}"`, [flags, '-C', dest, '-f', file]);
+        return dest;
+    });
+}
+exports.extractTar = extractTar;
+/**
+ * Extract a zip
+ *
+ * @param file     path to the zip
+ * @param dest     destination directory. Optional.
+ * @returns        path to the destination directory
+ */
+function extractZip(file, dest) {
+    return __awaiter(this, void 0, void 0, function* () {
+        if (!file) {
+            throw new Error("parameter 'file' is required");
+        }
+        dest = dest || (yield _createExtractFolder(dest));
+        if (IS_WINDOWS) {
+            yield extractZipWin(file, dest);
+        }
+        else {
+            yield extractZipNix(file, dest);
+        }
+        return dest;
+    });
+}
+exports.extractZip = extractZip;
+function extractZipWin(file, dest) {
+    return __awaiter(this, void 0, void 0, function* () {
+        // build the powershell command
+        const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
+        const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
+        const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`;
+        // run powershell
+        const powershellPath = yield io.which('powershell');
+        const args = [
+            '-NoLogo',
+            '-Sta',
+            '-NoProfile',
+            '-NonInteractive',
+            '-ExecutionPolicy',
+            'Unrestricted',
+            '-Command',
+            command
+        ];
+        yield exec_1.exec(`"${powershellPath}"`, args);
+    });
+}
+function extractZipNix(file, dest) {
+    return __awaiter(this, void 0, void 0, function* () {
+        const unzipPath = yield io.which('unzip');
+        yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest });
+    });
+}
+/**
+ * Caches a directory and installs it into the tool cacheDir
+ *
+ * @param sourceDir    the directory to cache into tools
+ * @param tool          tool name
+ * @param version       version of the tool.  semver format
+ * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
+ */
+function cacheDir(sourceDir, tool, version, arch) {
+    return __awaiter(this, void 0, void 0, function* () {
+        version = semver.clean(version) || version;
+        arch = arch || os.arch();
+        core.debug(`Caching tool ${tool} ${version} ${arch}`);
+        core.debug(`source dir: ${sourceDir}`);
+        if (!fs.statSync(sourceDir).isDirectory()) {
+            throw new Error('sourceDir is not a directory');
+        }
+        // Create the tool dir
+        const destPath = yield _createToolPath(tool, version, arch);
+        // copy each child item. do not move. move can fail on Windows
+        // due to anti-virus software having an open handle on a file.
+        for (const itemName of fs.readdirSync(sourceDir)) {
+            const s = path.join(sourceDir, itemName);
+            yield io.cp(s, destPath, { recursive: true });
+        }
+        // write .complete
+        _completeToolPath(tool, version, arch);
+        return destPath;
+    });
+}
+exports.cacheDir = cacheDir;
+/**
+ * Caches a downloaded file (GUID) and installs it
+ * into the tool cache with a given targetName
+ *
+ * @param sourceFile    the file to cache into tools.  Typically a result of downloadTool which is a guid.
+ * @param targetFile    the name of the file name in the tools directory
+ * @param tool          tool name
+ * @param version       version of the tool.  semver format
+ * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
+ */
+function cacheFile(sourceFile, targetFile, tool, version, arch) {
+    return __awaiter(this, void 0, void 0, function* () {
+        version = semver.clean(version) || version;
+        arch = arch || os.arch();
+        core.debug(`Caching tool ${tool} ${version} ${arch}`);
+        core.debug(`source file: ${sourceFile}`);
+        if (!fs.statSync(sourceFile).isFile()) {
+            throw new Error('sourceFile is not a file');
+        }
+        // create the tool dir
+        const destFolder = yield _createToolPath(tool, version, arch);
+        // copy instead of move. move can fail on Windows due to
+        // anti-virus software having an open handle on a file.
+        const destPath = path.join(destFolder, targetFile);
+        core.debug(`destination file ${destPath}`);
+        yield io.cp(sourceFile, destPath);
+        // write .complete
+        _completeToolPath(tool, version, arch);
+        return destFolder;
+    });
+}
+exports.cacheFile = cacheFile;
+/**
+ * Finds the path to a tool version in the local installed tool cache
+ *
+ * @param toolName      name of the tool
+ * @param versionSpec   version of the tool
+ * @param arch          optional arch.  defaults to arch of computer
+ */
+function find(toolName, versionSpec, arch) {
+    if (!toolName) {
+        throw new Error('toolName parameter is required');
+    }
+    if (!versionSpec) {
+        throw new Error('versionSpec parameter is required');
+    }
+    arch = arch || os.arch();
+    // attempt to resolve an explicit version
+    if (!_isExplicitVersion(versionSpec)) {
+        const localVersions = findAllVersions(toolName, arch);
+        const match = _evaluateVersions(localVersions, versionSpec);
+        versionSpec = match;
+    }
+    // check for the explicit version in the cache
+    let toolPath = '';
+    if (versionSpec) {
+        versionSpec = semver.clean(versionSpec) || '';
+        const cachePath = path.join(cacheRoot, toolName, versionSpec, arch);
+        core.debug(`checking cache: ${cachePath}`);
+        if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) {
+            core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`);
+            toolPath = cachePath;
+        }
+        else {
+            core.debug('not found');
+        }
+    }
+    return toolPath;
+}
+exports.find = find;
+/**
+ * Finds the paths to all versions of a tool that are installed in the local tool cache
+ *
+ * @param toolName  name of the tool
+ * @param arch      optional arch.  defaults to arch of computer
+ */
+function findAllVersions(toolName, arch) {
+    const versions = [];
+    arch = arch || os.arch();
+    const toolPath = path.join(cacheRoot, toolName);
+    if (fs.existsSync(toolPath)) {
+        const children = fs.readdirSync(toolPath);
+        for (const child of children) {
+            if (_isExplicitVersion(child)) {
+                const fullPath = path.join(toolPath, child, arch || '');
+                if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) {
+                    versions.push(child);
+                }
+            }
+        }
+    }
+    return versions;
+}
+exports.findAllVersions = findAllVersions;
+function _createExtractFolder(dest) {
+    return __awaiter(this, void 0, void 0, function* () {
+        if (!dest) {
+            // create a temp dir
+            dest = path.join(tempDirectory, uuidV4());
+        }
+        yield io.mkdirP(dest);
+        return dest;
+    });
+}
+function _createToolPath(tool, version, arch) {
+    return __awaiter(this, void 0, void 0, function* () {
+        const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || '');
+        core.debug(`destination ${folderPath}`);
+        const markerPath = `${folderPath}.complete`;
+        yield io.rmRF(folderPath);
+        yield io.rmRF(markerPath);
+        yield io.mkdirP(folderPath);
+        return folderPath;
+    });
+}
+function _completeToolPath(tool, version, arch) {
+    const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || '');
+    const markerPath = `${folderPath}.complete`;
+    fs.writeFileSync(markerPath, '');
+    core.debug('finished caching tool');
+}
+function _isExplicitVersion(versionSpec) {
+    const c = semver.clean(versionSpec) || '';
+    core.debug(`isExplicit: ${c}`);
+    const valid = semver.valid(c) != null;
+    core.debug(`explicit? ${valid}`);
+    return valid;
+}
+function _evaluateVersions(versions, versionSpec) {
+    let version = '';
+    core.debug(`evaluating ${versions.length} versions`);
+    versions = versions.sort((a, b) => {
+        if (semver.gt(a, b)) {
+            return 1;
+        }
+        return -1;
+    });
+    for (let i = versions.length - 1; i >= 0; i--) {
+        const potential = versions[i];
+        const satisfied = semver.satisfies(potential, versionSpec);
+        if (satisfied) {
+            version = potential;
+            break;
+        }
+    }
+    if (version) {
+        core.debug(`matched: ${version}`);
+    }
+    else {
+        core.debug('match not found');
+    }
+    return version;
+}
+//# sourceMappingURL=tool-cache.js.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.js.map b/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.js.map
new file mode 100644
index 0000000..8d905c2
--- /dev/null
+++ b/setup-maven/node_modules/@actions/tool-cache/lib/tool-cache.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../src/tool-cache.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAqC;AACrC,kCAAiC;AACjC,yBAAwB;AACxB,yBAAwB;AACxB,6BAA4B;AAC5B,sDAAqD;AACrD,iCAAgC;AAChC,kCAAiC;AACjC,iDAA2C;AAE3C,mCAAyB;AAEzB,MAAa,SAAU,SAAQ,KAAK;IAClC,YAAqB,cAAkC;QACrD,KAAK,CAAC,6BAA6B,cAAc,EAAE,CAAC,CAAA;QADjC,mBAAc,GAAd,cAAc,CAAoB;QAErD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACnD,CAAC;CACF;AALD,8BAKC;AAED,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAC/C,MAAM,SAAS,GAAG,oBAAoB,CAAA;AAEtC,iHAAiH;AACjH,IAAI,aAAa,GAAW,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;AAC5D,IAAI,SAAS,GAAW,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAA;AAC9D,gEAAgE;AAChE,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE;IAChC,IAAI,YAAoB,CAAA;IACxB,IAAI,UAAU,EAAE;QACd,8CAA8C;QAC9C,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,MAAM,CAAA;KACpD;SAAM;QACL,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACjC,YAAY,GAAG,QAAQ,CAAA;SACxB;aAAM;YACL,YAAY,GAAG,OAAO,CAAA;SACvB;KACF;IACD,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;KAC3D;IACD,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;KACxD;CACF;AAED;;;;;GAKG;AACH,SAAsB,YAAY,CAAC,GAAW;;QAC5C,wEAAwE;QACxE,OAAO,IAAI,OAAO,CAAS,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACnD,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,EAAE;oBAC/C,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,CAAC;iBACd,CAAC,CAAA;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;gBAEnD,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;gBAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAA;gBAChC,IAAI,CAAC,KAAK,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAA;gBAErC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,iBAAiB,CAAC,CAAA;iBACpE;gBAED,MAAM,QAAQ,GAA6B,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAE9D,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,KAAK,GAAG,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;oBACtD,IAAI,CAAC,KAAK,CACR,4BAA4B,GAAG,WAC7B,QAAQ,CAAC,OAAO,CAAC,UACnB,aAAa,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,CAC/C,CAAA;oBACD,MAAM,GAAG,CAAA;iBACV;gBAED,MAAM,IAAI,GAA0B,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBAClE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAS,EAAE;oBACzB,IAAI;wBACF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAC1C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;4BACtB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;4BAC/B,OAAO,CAAC,QAAQ,CAAC,CAAA;wBACnB,CAAC,CAAC,CAAA;qBACH;oBAAC,OAAO,GAAG,EAAE;wBACZ,IAAI,CAAC,KAAK,CACR,4BAA4B,GAAG,WAC7B,QAAQ,CAAC,OAAO,CAAC,UACnB,aAAa,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,CAC/C,CAAA;wBACD,MAAM,CAAC,GAAG,CAAC,CAAA;qBACZ;gBACH,CAAC,CAAA,CAAC,CAAA;gBACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;oBACrB,IAAI,CAAC,GAAG,EAAE,CAAA;oBACV,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC,CAAC,CAAA;aACH;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,CAAC,GAAG,CAAC,CAAA;aACZ;QACH,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC;CAAA;AAvDD,oCAuDC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAsB,SAAS,CAC7B,IAAY,EACZ,IAAa,EACb,OAAgB;;QAEhB,WAAE,CAAC,UAAU,EAAE,yCAAyC,CAAC,CAAA;QACzD,WAAE,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAA;QAExC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QAEjD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,OAAO,EAAE;YACX,IAAI;gBACF,MAAM,IAAI,GAAa;oBACrB,GAAG;oBACH,MAAM;oBACN,KAAK;oBACL,WAAW;oBACX,IAAI;iBACL,CAAA;gBACD,MAAM,OAAO,GAAgB;oBAC3B,MAAM,EAAE,IAAI;iBACb,CAAA;gBACD,MAAM,WAAI,CAAC,IAAI,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;aAC1C;oBAAS;gBACR,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;aAC3B;SACF;aAAM;YACL,MAAM,aAAa,GAAG,IAAI;iBACvB,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC;iBACpD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;iBACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA,CAAC,6DAA6D;YACxF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACpE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACtE,MAAM,OAAO,GAAG,MAAM,aAAa,cAAc,WAAW,cAAc,aAAa,GAAG,CAAA;YAC1F,MAAM,IAAI,GAAa;gBACrB,SAAS;gBACT,MAAM;gBACN,YAAY;gBACZ,iBAAiB;gBACjB,kBAAkB;gBAClB,cAAc;gBACd,UAAU;gBACV,OAAO;aACR,CAAA;YACD,MAAM,OAAO,GAAgB;gBAC3B,MAAM,EAAE,IAAI;aACb,CAAA;YACD,IAAI;gBACF,MAAM,cAAc,GAAW,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBACjE,MAAM,WAAI,CAAC,IAAI,cAAc,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;aACjD;oBAAS;gBACR,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;aAC3B;SACF;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AA1DD,8BA0DC;AAED;;;;;;;GAOG;AACH,SAAsB,UAAU,CAC9B,IAAY,EACZ,IAAa,EACb,QAAgB,IAAI;;QAEpB,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QACjD,MAAM,OAAO,GAAW,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACnD,MAAM,WAAI,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAE3D,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAdD,gCAcC;AAED;;;;;;GAMG;AACH,SAAsB,UAAU,CAAC,IAAY,EAAE,IAAa;;QAC1D,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QAEjD,IAAI,UAAU,EAAE;YACd,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAChC;aAAM;YACL,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAChC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAdD,gCAcC;AAED,SAAe,aAAa,CAAC,IAAY,EAAE,IAAY;;QACrD,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA,CAAC,6DAA6D;QAClI,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,sKAAsK,WAAW,OAAO,WAAW,IAAI,CAAA;QAEvN,iBAAiB;QACjB,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG;YACX,SAAS;YACT,MAAM;YACN,YAAY;YACZ,iBAAiB;YACjB,kBAAkB;YAClB,cAAc;YACd,UAAU;YACV,OAAO;SACR,CAAA;QACD,MAAM,WAAI,CAAC,IAAI,cAAc,GAAG,EAAE,IAAI,CAAC,CAAA;IACzC,CAAC;CAAA;AAED,SAAe,aAAa,CAAC,IAAY,EAAE,IAAY;;QACrD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,WAAI,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAA;IACnD,CAAC;CAAA;AAED;;;;;;;GAOG;AACH,SAAsB,QAAQ,CAC5B,SAAiB,EACjB,IAAY,EACZ,OAAe,EACf,IAAa;;QAEb,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA;QAC1C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC,KAAK,CAAC,eAAe,SAAS,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,sBAAsB;QACtB,MAAM,QAAQ,GAAW,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QACnE,8DAA8D;QAC9D,8DAA8D;QAC9D,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACxC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;SAC5C;QAED,kBAAkB;QAClB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAEtC,OAAO,QAAQ,CAAA;IACjB,CAAC;CAAA;AA5BD,4BA4BC;AAED;;;;;;;;;GASG;AACH,SAAsB,SAAS,CAC7B,UAAkB,EAClB,UAAkB,EAClB,IAAY,EACZ,OAAe,EACf,IAAa;;QAEb,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA;QAC1C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC,KAAK,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAW,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAErE,wDAAwD;QACxD,uDAAuD;QACvD,MAAM,QAAQ,GAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QAC1D,IAAI,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;QAC1C,MAAM,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEjC,kBAAkB;QAClB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAEtC,OAAO,UAAU,CAAA;IACnB,CAAC;CAAA;AA7BD,8BA6BC;AAED;;;;;;GAMG;AACH,SAAgB,IAAI,CAClB,QAAgB,EAChB,WAAmB,EACnB,IAAa;IAEb,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;KAClD;IAED,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;KACrD;IAED,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;IAExB,yCAAyC;IACzC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;QACpC,MAAM,aAAa,GAAa,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QAC3D,WAAW,GAAG,KAAK,CAAA;KACpB;IAED,8CAA8C;IAC9C,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,IAAI,WAAW,EAAE;QACf,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;QACnE,IAAI,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAA;QAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,SAAS,WAAW,CAAC,EAAE;YACtE,IAAI,CAAC,KAAK,CAAC,uBAAuB,QAAQ,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC,CAAA;YACpE,QAAQ,GAAG,SAAS,CAAA;SACrB;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;SACxB;KACF;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AApCD,oBAoCC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAgB,EAAE,IAAa;IAC7D,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAE/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QACnD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC5B,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;gBACvD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,QAAQ,WAAW,CAAC,EAAE;oBACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBACrB;aACF;SACF;KACF;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAnBD,0CAmBC;AAED,SAAe,oBAAoB,CAAC,IAAa;;QAC/C,IAAI,CAAC,IAAI,EAAE;YACT,oBAAoB;YACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;SAC1C;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAED,SAAe,eAAe,CAC5B,IAAY,EACZ,OAAe,EACf,IAAa;;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,IAAI,EACJ,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,EAChC,IAAI,IAAI,EAAE,CACX,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,eAAe,UAAU,EAAE,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,GAAG,UAAU,WAAW,CAAA;QAC3C,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzB,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzB,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC3B,OAAO,UAAU,CAAA;IACnB,CAAC;CAAA;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAE,IAAa;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,IAAI,EACJ,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,EAChC,IAAI,IAAI,EAAE,CACX,CAAA;IACD,MAAM,UAAU,GAAG,GAAG,UAAU,WAAW,CAAA;IAC3C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAChC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IACzC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IACrC,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC,CAAA;IAEhC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB,EAAE,WAAmB;IAChE,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,CAAC,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAA;IACpD,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACnB,OAAO,CAAC,CAAA;SACT;QACD,OAAO,CAAC,CAAC,CAAA;IACX,CAAC,CAAC,CAAA;IACF,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAW,QAAQ,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,SAAS,GAAY,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACnE,IAAI,SAAS,EAAE;YACb,OAAO,GAAG,SAAS,CAAA;YACnB,MAAK;SACN;KACF;IAED,IAAI,OAAO,EAAE;QACX,IAAI,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAA;KAClC;SAAM;QACL,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;KAC9B;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/tool-cache/package.json b/setup-maven/node_modules/@actions/tool-cache/package.json
new file mode 100644
index 0000000..4dce04b
--- /dev/null
+++ b/setup-maven/node_modules/@actions/tool-cache/package.json
@@ -0,0 +1,75 @@
+{
+  "_from": "@actions/tool-cache@^1.0.0",
+  "_id": "@actions/tool-cache@1.1.2",
+  "_inBundle": false,
+  "_integrity": "sha512-IJczPaZr02ECa3Lgws/TJEVco9tjOujiQSZbO3dHuXXjhd5vrUtfOgGwhmz3/f97L910OraPZ8SknofUk6RvOQ==",
+  "_location": "/@actions/tool-cache",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@actions/tool-cache@^1.0.0",
+    "name": "@actions/tool-cache",
+    "escapedName": "@actions%2ftool-cache",
+    "scope": "@actions",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.1.2.tgz",
+  "_shasum": "304d44cecb9547324731e03ca004a3905e6530d2",
+  "_spec": "@actions/tool-cache@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven",
+  "bugs": {
+    "url": "https://github.com/actions/toolkit/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@actions/core": "^1.1.0",
+    "@actions/exec": "^1.0.1",
+    "@actions/io": "^1.0.1",
+    "semver": "^6.1.0",
+    "typed-rest-client": "^1.4.0",
+    "uuid": "^3.3.2"
+  },
+  "deprecated": false,
+  "description": "Actions tool-cache lib",
+  "devDependencies": {
+    "@types/nock": "^10.0.3",
+    "@types/semver": "^6.0.0",
+    "@types/uuid": "^3.4.4",
+    "nock": "^10.0.6"
+  },
+  "directories": {
+    "lib": "lib",
+    "test": "__tests__"
+  },
+  "files": [
+    "lib",
+    "scripts"
+  ],
+  "homepage": "https://github.com/actions/toolkit/tree/master/packages/exec",
+  "keywords": [
+    "github",
+    "actions",
+    "exec"
+  ],
+  "license": "MIT",
+  "main": "lib/tool-cache.js",
+  "name": "@actions/tool-cache",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/actions/toolkit.git"
+  },
+  "scripts": {
+    "test": "echo \"Error: run tests from root\" && exit 1",
+    "tsc": "tsc"
+  },
+  "version": "1.1.2"
+}
diff --git a/setup-maven/node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1 b/setup-maven/node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1
new file mode 100644
index 0000000..8b39bb4
--- /dev/null
+++ b/setup-maven/node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1
@@ -0,0 +1,60 @@
+[CmdletBinding()]
+param(
+    [Parameter(Mandatory = $true)]
+    [string]$Source,
+
+    [Parameter(Mandatory = $true)]
+    [string]$Target)
+
+# This script translates the output from 7zdec into UTF8. Node has limited
+# built-in support for encodings.
+#
+# 7zdec uses the system default code page. The system default code page varies
+# depending on the locale configuration. On an en-US box, the system default code
+# page is Windows-1252.
+#
+# Note, on a typical en-US box, testing with the 'ç' character is a good way to
+# determine whether data is passed correctly between processes. This is because
+# the 'ç' character has a different code point across each of the common encodings
+# on a typical en-US box, i.e.
+#   1) the default console-output code page (IBM437)
+#   2) the system default code page (i.e. CP_ACP) (Windows-1252)
+#   3) UTF8
+
+$ErrorActionPreference = 'Stop'
+
+# Redefine the wrapper over STDOUT to use UTF8. Node expects UTF8 by default.
+$stdout = [System.Console]::OpenStandardOutput()
+$utf8 = New-Object System.Text.UTF8Encoding($false) # do not emit BOM
+$writer = New-Object System.IO.StreamWriter($stdout, $utf8)
+[System.Console]::SetOut($writer)
+
+# All subsequent output must be written using [System.Console]::WriteLine(). In
+# PowerShell 4, Write-Host and Out-Default do not consider the updated stream writer.
+
+Set-Location -LiteralPath $Target
+
+# Print the ##command.
+$_7zdec = Join-Path -Path "$PSScriptRoot" -ChildPath "externals/7zdec.exe"
+[System.Console]::WriteLine("##[command]$_7zdec x `"$Source`"")
+
+# The $OutputEncoding variable instructs PowerShell how to interpret the output
+# from the external command.
+$OutputEncoding = [System.Text.Encoding]::Default
+
+# Note, the output from 7zdec.exe needs to be iterated over. Otherwise PowerShell.exe
+# will launch the external command in such a way that it inherits the streams.
+& $_7zdec x $Source 2>&1 |
+    ForEach-Object {
+        if ($_ -is [System.Management.Automation.ErrorRecord]) {
+            [System.Console]::WriteLine($_.Exception.Message)
+        }
+        else {
+            [System.Console]::WriteLine($_)
+        }
+    }
+[System.Console]::WriteLine("##[debug]7zdec.exe exit code '$LASTEXITCODE'")
+[System.Console]::Out.Flush()
+if ($LASTEXITCODE -ne 0) {
+    exit $LASTEXITCODE
+}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@actions/tool-cache/scripts/externals/7zdec.exe b/setup-maven/node_modules/@actions/tool-cache/scripts/externals/7zdec.exe
new file mode 100644
index 0000000..1106aa0
--- /dev/null
+++ b/setup-maven/node_modules/@actions/tool-cache/scripts/externals/7zdec.exe
Binary files differ
diff --git a/setup-maven/node_modules/@octokit/endpoint/LICENSE b/setup-maven/node_modules/@octokit/endpoint/LICENSE
new file mode 100644
index 0000000..af5366d
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2018 Octokit contributors
+
+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/setup-maven/node_modules/@octokit/endpoint/README.md b/setup-maven/node_modules/@octokit/endpoint/README.md
new file mode 100644
index 0000000..5ac8429
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/README.md
@@ -0,0 +1,421 @@
+# endpoint.js
+
+> Turns GitHub REST API endpoints into generic request options
+
+[![@latest](https://img.shields.io/npm/v/@octokit/endpoint.svg)](https://www.npmjs.com/package/@octokit/endpoint)
+![Build Status](https://github.com/octokit/endpoint.js/workflows/Test/badge.svg)
+[![Greenkeeper](https://badges.greenkeeper.io/octokit/endpoint.js.svg)](https://greenkeeper.io/)
+
+`@octokit/endpoint` combines [GitHub REST API routes](https://developer.github.com/v3/) with your parameters and turns them into generic request options that can be used in any request library.
+
+<!-- update table of contents by running `npx markdown-toc README.md -i` -->
+<!-- toc -->
+
+- [Usage](#usage)
+- [API](#api)
+  - [endpoint()](#endpointroute-options-or-endpointoptions)
+  - [endpoint.defaults()](#endpointdefaults)
+  - [endpoint.DEFAULTS](#endpointdefaults-1)
+  - [endpoint.merge()](#endpointmergeroute-options-or-endpointmergeoptions)
+  - [endpoint.parse()](#endpointparse)
+- [Special cases](#special-cases)
+  - [The `data` parameter – set request body directly](#the-data-parameter--set-request-body-directly)
+  - [Set parameters for both the URL/query and the request body](#set-parameters-for-both-the-urlquery-and-the-request-body)
+- [LICENSE](#license)
+
+<!-- tocstop -->
+
+## Usage
+
+<table>
+<tbody valign=top align=left>
+<tr><th>
+Browsers
+</th><td width=100%>
+Load <code>@octokit/endpoint</code> directly from <a href="https://cdn.pika.dev">cdn.pika.dev</a>
+        
+```html
+<script type="module">
+import { endpoint } from "https://cdn.pika.dev/@octokit/endpoint";
+</script>
+```
+
+</td></tr>
+<tr><th>
+Node
+</th><td>
+
+Install with <code>npm install @octokit/endpoint</code>
+
+```js
+const { endpoint } = require("@octokit/endpoint");
+// or: import { endpoint } from "@octokit/endpoint";
+```
+
+</td></tr>
+</tbody>
+</table>
+
+Example for [List organization repositories](https://developer.github.com/v3/repos/#list-organization-repositories)
+
+```js
+const requestOptions = endpoint("GET /orgs/:org/repos", {
+  headers: {
+    authorization: "token 0000000000000000000000000000000000000001"
+  },
+  org: "octokit",
+  type: "private"
+});
+```
+
+The resulting `requestOptions` looks as follows
+
+```json
+{
+  "method": "GET",
+  "url": "https://api.github.com/orgs/octokit/repos?type=private",
+  "headers": {
+    "accept": "application/vnd.github.v3+json",
+    "authorization": "token 0000000000000000000000000000000000000001",
+    "user-agent": "octokit/endpoint.js v1.2.3"
+  }
+}
+```
+
+You can pass `requestOptions` to common request libraries
+
+```js
+const { url, ...options } = requestOptions;
+// using with fetch (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
+fetch(url, options);
+// using with request (https://github.com/request/request)
+request(requestOptions);
+// using with got (https://github.com/sindresorhus/got)
+got[options.method](url, options);
+// using with axios
+axios(requestOptions);
+```
+
+## API
+
+### `endpoint(route, options)` or `endpoint(options)`
+
+<table>
+  <thead align=left>
+    <tr>
+      <th>
+        name
+      </th>
+      <th>
+        type
+      </th>
+      <th width=100%>
+        description
+      </th>
+    </tr>
+  </thead>
+  <tbody align=left valign=top>
+    <tr>
+      <th>
+        <code>route</code>
+      </th>
+      <td>
+        String
+      </td>
+      <td>
+        If set, it has to be a string consisting of URL and the request method, e.g., <code>GET /orgs/:org</code>. If it’s set to a URL, only the method defaults to <code>GET</code>.
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.method</code>
+      </th>
+      <td>
+        String
+      </td>
+      <td>
+        <strong>Required unless <code>route</code> is set.</strong> Any supported <a href="https://developer.github.com/v3/#http-verbs">http verb</a>. <em>Defaults to <code>GET</code></em>.
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.url</code>
+      </th>
+      <td>
+        String
+      </td>
+      <td>
+        <strong>Required unless <code>route</code> is set.</strong> A path or full URL which may contain <code>:variable</code> or <code>{variable}</code> placeholders,
+        e.g., <code>/orgs/:org/repos</code>. The <code>url</code> is parsed using <a href="https://github.com/bramstein/url-template">url-template</a>.
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.baseUrl</code>
+      </th>
+      <td>
+        String
+      </td>
+      <td>
+        <em>Defaults to <code>https://api.github.com</code></em>.
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.headers</code>
+      </th>
+      <td>
+        Object
+      </td>
+      <td>
+        Custom headers. Passed headers are merged with defaults:<br>
+        <em><code>headers['user-agent']</code> defaults to <code>octokit-endpoint.js/1.2.3</code> (where <code>1.2.3</code> is the released version)</em>.<br>
+        <em><code>headers['accept']</code> defaults to <code>application/vnd.github.v3+json</code></em>.<br>
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.mediaType.format</code>
+      </th>
+      <td>
+        String
+      </td>
+      <td>
+        Media type param, such as <code>raw</code>, <code>diff</code>, or <code>text+json</code>. See <a href="https://developer.github.com/v3/media/">Media Types</a>. Setting <code>options.mediaType.format</code> will amend the <code>headers.accept</code> value.
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.mediaType.previews</code>
+      </th>
+      <td>
+        Array of Strings
+      </td>
+      <td>
+        Name of previews, such as <code>mercy</code>, <code>symmetra</code>, or <code>scarlet-witch</code>. See <a href="https://developer.github.com/v3/previews/">API Previews</a>. If <code>options.mediaType.previews</code> was set as default, the new previews will be merged into the default ones. Setting <code>options.mediaType.previews</code> will amend the <code>headers.accept</code> value. <code>options.mediaType.previews</code> will be merged with an existing array set using <code>.defaults()</code>.
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.data</code>
+      </th>
+      <td>
+        Any
+      </td>
+      <td>
+        Set request body directly instead of setting it to JSON based on additional parameters. See <a href="#data-parameter">"The <code>data</code> parameter"</a> below.
+      </td>
+    </tr>
+    <tr>
+      <th>
+        <code>options.request</code>
+      </th>
+      <td>
+        Object
+      </td>
+      <td>
+        Pass custom meta information for the request. The <code>request</code> object will be returned as is.
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+All other options will be passed depending on the `method` and `url` options.
+
+1. If the option key has a placeholder in the `url`, it will be used as the replacement. For example, if the passed options are `{url: '/orgs/:org/repos', org: 'foo'}` the returned `options.url` is `https://api.github.com/orgs/foo/repos`.
+2. If the `method` is `GET` or `HEAD`, the option is passed as a query parameter.
+3. Otherwise, the parameter is passed in the request body as a JSON key.
+
+**Result**
+
+`endpoint()` is a synchronous method and returns an object with the following keys:
+
+<table>
+  <thead align=left>
+    <tr>
+      <th>
+        key
+      </th>
+      <th>
+        type
+      </th>
+      <th width=100%>
+        description
+      </th>
+    </tr>
+  </thead>
+  <tbody align=left valign=top>
+    <tr>
+      <th><code>method</code></th>
+      <td>String</td>
+      <td>The http method. Always lowercase.</td>
+    </tr>
+    <tr>
+      <th><code>url</code></th>
+      <td>String</td>
+      <td>The url with placeholders replaced with passed parameters.</td>
+    </tr>
+    <tr>
+      <th><code>headers</code></th>
+      <td>Object</td>
+      <td>All header names are lowercased.</td>
+    </tr>
+    <tr>
+      <th><code>body</code></th>
+      <td>Any</td>
+      <td>The request body if one is present. Only for <code>PATCH</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code> requests.</td>
+    </tr>
+    <tr>
+      <th><code>request</code></th>
+      <td>Object</td>
+      <td>Request meta option, it will be returned as it was passed into <code>endpoint()</code></td>
+    </tr>
+  </tbody>
+</table>
+
+### `endpoint.defaults()`
+
+Override or set default options. Example:
+
+```js
+const request = require("request");
+const myEndpoint = require("@octokit/endpoint").defaults({
+  baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
+  headers: {
+    "user-agent": "myApp/1.2.3",
+    authorization: `token 0000000000000000000000000000000000000001`
+  },
+  org: "my-project",
+  per_page: 100
+});
+
+request(myEndpoint(`GET /orgs/:org/repos`));
+```
+
+You can call `.defaults()` again on the returned method, the defaults will cascade.
+
+```js
+const myProjectEndpoint = endpoint.defaults({
+  baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
+  headers: {
+    "user-agent": "myApp/1.2.3"
+  },
+  org: "my-project"
+});
+const myProjectEndpointWithAuth = myProjectEndpoint.defaults({
+  headers: {
+    authorization: `token 0000000000000000000000000000000000000001`
+  }
+});
+```
+
+`myProjectEndpointWithAuth` now defaults the `baseUrl`, `headers['user-agent']`,
+`org` and `headers['authorization']` on top of `headers['accept']` that is set
+by the global default.
+
+### `endpoint.DEFAULTS`
+
+The current default options.
+
+```js
+endpoint.DEFAULTS.baseUrl; // https://api.github.com
+const myEndpoint = endpoint.defaults({
+  baseUrl: "https://github-enterprise.acme-inc.com/api/v3"
+});
+myEndpoint.DEFAULTS.baseUrl; // https://github-enterprise.acme-inc.com/api/v3
+```
+
+### `endpoint.merge(route, options)` or `endpoint.merge(options)`
+
+Get the defaulted endpoint options, but without parsing them into request options:
+
+```js
+const myProjectEndpoint = endpoint.defaults({
+  baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
+  headers: {
+    "user-agent": "myApp/1.2.3"
+  },
+  org: "my-project"
+});
+myProjectEndpoint.merge("GET /orgs/:org/repos", {
+  headers: {
+    authorization: `token 0000000000000000000000000000000000000001`
+  },
+  org: "my-secret-project",
+  type: "private"
+});
+
+// {
+//   baseUrl: 'https://github-enterprise.acme-inc.com/api/v3',
+//   method: 'GET',
+//   url: '/orgs/:org/repos',
+//   headers: {
+//     accept: 'application/vnd.github.v3+json',
+//     authorization: `token 0000000000000000000000000000000000000001`,
+//     'user-agent': 'myApp/1.2.3'
+//   },
+//   org: 'my-secret-project',
+//   type: 'private'
+// }
+```
+
+### `endpoint.parse()`
+
+Stateless method to turn endpoint options into request options. Calling
+`endpoint(options)` is the same as calling `endpoint.parse(endpoint.merge(options))`.
+
+## Special cases
+
+<a name="data-parameter"></a>
+
+### The `data` parameter – set request body directly
+
+Some endpoints such as [Render a Markdown document in raw mode](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode) don’t have parameters that are sent as request body keys, instead, the request body needs to be set directly. In these cases, set the `data` parameter.
+
+```js
+const options = endpoint("POST /markdown/raw", {
+  data: "Hello world github/linguist#1 **cool**, and #1!",
+  headers: {
+    accept: "text/html;charset=utf-8",
+    "content-type": "text/plain"
+  }
+});
+
+// options is
+// {
+//   method: 'post',
+//   url: 'https://api.github.com/markdown/raw',
+//   headers: {
+//     accept: 'text/html;charset=utf-8',
+//     'content-type': 'text/plain',
+//     'user-agent': userAgent
+//   },
+//   body: 'Hello world github/linguist#1 **cool**, and #1!'
+// }
+```
+
+### Set parameters for both the URL/query and the request body
+
+There are API endpoints that accept both query parameters as well as a body. In that case, you need to add the query parameters as templates to `options.url`, as defined in the [RFC 6570 URI Template specification](https://tools.ietf.org/html/rfc6570).
+
+Example
+
+```js
+endpoint(
+  "POST https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}",
+  {
+    name: "example.zip",
+    label: "short description",
+    headers: {
+      "content-type": "text/plain",
+      "content-length": 14,
+      authorization: `token 0000000000000000000000000000000000000001`
+    },
+    data: "Hello, world!"
+  }
+);
+```
+
+## LICENSE
+
+[MIT](LICENSE)
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-node/index.js b/setup-maven/node_modules/@octokit/endpoint/dist-node/index.js
new file mode 100644
index 0000000..9218ced
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-node/index.js
@@ -0,0 +1,379 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var isPlainObject = _interopDefault(require('is-plain-object'));
+var universalUserAgent = require('universal-user-agent');
+
+function lowercaseKeys(object) {
+  if (!object) {
+    return {};
+  }
+
+  return Object.keys(object).reduce((newObj, key) => {
+    newObj[key.toLowerCase()] = object[key];
+    return newObj;
+  }, {});
+}
+
+function mergeDeep(defaults, options) {
+  const result = Object.assign({}, defaults);
+  Object.keys(options).forEach(key => {
+    if (isPlainObject(options[key])) {
+      if (!(key in defaults)) Object.assign(result, {
+        [key]: options[key]
+      });else result[key] = mergeDeep(defaults[key], options[key]);
+    } else {
+      Object.assign(result, {
+        [key]: options[key]
+      });
+    }
+  });
+  return result;
+}
+
+function merge(defaults, route, options) {
+  if (typeof route === "string") {
+    let [method, url] = route.split(" ");
+    options = Object.assign(url ? {
+      method,
+      url
+    } : {
+      url: method
+    }, options);
+  } else {
+    options = Object.assign({}, route);
+  } // lowercase header names before merging with defaults to avoid duplicates
+
+
+  options.headers = lowercaseKeys(options.headers);
+  const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten
+
+  if (defaults && defaults.mediaType.previews.length) {
+    mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
+  }
+
+  mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, ""));
+  return mergedOptions;
+}
+
+function addQueryParameters(url, parameters) {
+  const separator = /\?/.test(url) ? "&" : "?";
+  const names = Object.keys(parameters);
+
+  if (names.length === 0) {
+    return url;
+  }
+
+  return url + separator + names.map(name => {
+    if (name === "q") {
+      return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
+    }
+
+    return `${name}=${encodeURIComponent(parameters[name])}`;
+  }).join("&");
+}
+
+const urlVariableRegex = /\{[^}]+\}/g;
+
+function removeNonChars(variableName) {
+  return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
+}
+
+function extractUrlVariableNames(url) {
+  const matches = url.match(urlVariableRegex);
+
+  if (!matches) {
+    return [];
+  }
+
+  return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
+}
+
+function omit(object, keysToOmit) {
+  return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {
+    obj[key] = object[key];
+    return obj;
+  }, {});
+}
+
+// Based on https://github.com/bramstein/url-template, licensed under BSD
+// TODO: create separate package.
+//
+// Copyright (c) 2012-2014, Bram Stein
+// All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//  1. Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+//  2. Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//  3. The name of the author may not be used to endorse or promote products
+//     derived from this software without specific prior written permission.
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/* istanbul ignore file */
+function encodeReserved(str) {
+  return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
+    if (!/%[0-9A-Fa-f]/.test(part)) {
+      part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
+    }
+
+    return part;
+  }).join("");
+}
+
+function encodeUnreserved(str) {
+  return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
+    return "%" + c.charCodeAt(0).toString(16).toUpperCase();
+  });
+}
+
+function encodeValue(operator, value, key) {
+  value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
+
+  if (key) {
+    return encodeUnreserved(key) + "=" + value;
+  } else {
+    return value;
+  }
+}
+
+function isDefined(value) {
+  return value !== undefined && value !== null;
+}
+
+function isKeyOperator(operator) {
+  return operator === ";" || operator === "&" || operator === "?";
+}
+
+function getValues(context, operator, key, modifier) {
+  var value = context[key],
+      result = [];
+
+  if (isDefined(value) && value !== "") {
+    if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
+      value = value.toString();
+
+      if (modifier && modifier !== "*") {
+        value = value.substring(0, parseInt(modifier, 10));
+      }
+
+      result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+    } else {
+      if (modifier === "*") {
+        if (Array.isArray(value)) {
+          value.filter(isDefined).forEach(function (value) {
+            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+          });
+        } else {
+          Object.keys(value).forEach(function (k) {
+            if (isDefined(value[k])) {
+              result.push(encodeValue(operator, value[k], k));
+            }
+          });
+        }
+      } else {
+        const tmp = [];
+
+        if (Array.isArray(value)) {
+          value.filter(isDefined).forEach(function (value) {
+            tmp.push(encodeValue(operator, value));
+          });
+        } else {
+          Object.keys(value).forEach(function (k) {
+            if (isDefined(value[k])) {
+              tmp.push(encodeUnreserved(k));
+              tmp.push(encodeValue(operator, value[k].toString()));
+            }
+          });
+        }
+
+        if (isKeyOperator(operator)) {
+          result.push(encodeUnreserved(key) + "=" + tmp.join(","));
+        } else if (tmp.length !== 0) {
+          result.push(tmp.join(","));
+        }
+      }
+    }
+  } else {
+    if (operator === ";") {
+      if (isDefined(value)) {
+        result.push(encodeUnreserved(key));
+      }
+    } else if (value === "" && (operator === "&" || operator === "?")) {
+      result.push(encodeUnreserved(key) + "=");
+    } else if (value === "") {
+      result.push("");
+    }
+  }
+
+  return result;
+}
+
+function parseUrl(template) {
+  return {
+    expand: expand.bind(null, template)
+  };
+}
+
+function expand(template, context) {
+  var operators = ["+", "#", ".", "/", ";", "?", "&"];
+  return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
+    if (expression) {
+      let operator = "";
+      const values = [];
+
+      if (operators.indexOf(expression.charAt(0)) !== -1) {
+        operator = expression.charAt(0);
+        expression = expression.substr(1);
+      }
+
+      expression.split(/,/g).forEach(function (variable) {
+        var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
+        values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
+      });
+
+      if (operator && operator !== "+") {
+        var separator = ",";
+
+        if (operator === "?") {
+          separator = "&";
+        } else if (operator !== "#") {
+          separator = operator;
+        }
+
+        return (values.length !== 0 ? operator : "") + values.join(separator);
+      } else {
+        return values.join(",");
+      }
+    } else {
+      return encodeReserved(literal);
+    }
+  });
+}
+
+function parse(options) {
+  // https://fetch.spec.whatwg.org/#methods
+  let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible
+
+  let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
+  let headers = Object.assign({}, options.headers);
+  let body;
+  let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later
+
+  const urlVariableNames = extractUrlVariableNames(url);
+  url = parseUrl(url).expand(parameters);
+
+  if (!/^http/.test(url)) {
+    url = options.baseUrl + url;
+  }
+
+  const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl");
+  const remainingParameters = omit(parameters, omittedParameters);
+  const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
+
+  if (!isBinaryRequset) {
+    if (options.mediaType.format) {
+      // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
+      headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(",");
+    }
+
+    if (options.mediaType.previews.length) {
+      const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
+      headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {
+        const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
+        return `application/vnd.github.${preview}-preview${format}`;
+      }).join(",");
+    }
+  } // for GET/HEAD requests, set URL query parameters from remaining parameters
+  // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
+
+
+  if (["GET", "HEAD"].includes(method)) {
+    url = addQueryParameters(url, remainingParameters);
+  } else {
+    if ("data" in remainingParameters) {
+      body = remainingParameters.data;
+    } else {
+      if (Object.keys(remainingParameters).length) {
+        body = remainingParameters;
+      } else {
+        headers["content-length"] = 0;
+      }
+    }
+  } // default content-type for JSON if body is set
+
+
+  if (!headers["content-type"] && typeof body !== "undefined") {
+    headers["content-type"] = "application/json; charset=utf-8";
+  } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
+  // fetch does not allow to set `content-length` header, but we can set body to an empty string
+
+
+  if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
+    body = "";
+  } // Only return body/request keys if present
+
+
+  return Object.assign({
+    method,
+    url,
+    headers
+  }, typeof body !== "undefined" ? {
+    body
+  } : null, options.request ? {
+    request: options.request
+  } : null);
+}
+
+function endpointWithDefaults(defaults, route, options) {
+  return parse(merge(defaults, route, options));
+}
+
+function withDefaults(oldDefaults, newDefaults) {
+  const DEFAULTS = merge(oldDefaults, newDefaults);
+  const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
+  return Object.assign(endpoint, {
+    DEFAULTS,
+    defaults: withDefaults.bind(null, DEFAULTS),
+    merge: merge.bind(null, DEFAULTS),
+    parse
+  });
+}
+
+const VERSION = "5.5.1";
+
+const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.
+// So we use RequestParameters and add method as additional required property.
+
+const DEFAULTS = {
+  method: "GET",
+  baseUrl: "https://api.github.com",
+  headers: {
+    accept: "application/vnd.github.v3+json",
+    "user-agent": userAgent
+  },
+  mediaType: {
+    format: "",
+    previews: []
+  }
+};
+
+const endpoint = withDefaults(null, DEFAULTS);
+
+exports.endpoint = endpoint;
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-node/index.js.map b/setup-maven/node_modules/@octokit/endpoint/dist-node/index.js.map
new file mode 100644
index 0000000..d84c1b7
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-node/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/util/lowercase-keys.js","../dist-src/util/merge-deep.js","../dist-src/merge.js","../dist-src/util/add-query-parameters.js","../dist-src/util/extract-url-variable-names.js","../dist-src/util/omit.js","../dist-src/util/url-template.js","../dist-src/parse.js","../dist-src/endpoint-with-defaults.js","../dist-src/with-defaults.js","../dist-src/version.js","../dist-src/defaults.js","../dist-src/index.js"],"sourcesContent":["export function lowercaseKeys(object) {\n    if (!object) {\n        return {};\n    }\n    return Object.keys(object).reduce((newObj, key) => {\n        newObj[key.toLowerCase()] = object[key];\n        return newObj;\n    }, {});\n}\n","import isPlainObject from \"is-plain-object\";\nexport function mergeDeep(defaults, options) {\n    const result = Object.assign({}, defaults);\n    Object.keys(options).forEach(key => {\n        if (isPlainObject(options[key])) {\n            if (!(key in defaults))\n                Object.assign(result, { [key]: options[key] });\n            else\n                result[key] = mergeDeep(defaults[key], options[key]);\n        }\n        else {\n            Object.assign(result, { [key]: options[key] });\n        }\n    });\n    return result;\n}\n","import { lowercaseKeys } from \"./util/lowercase-keys\";\nimport { mergeDeep } from \"./util/merge-deep\";\nexport function merge(defaults, route, options) {\n    if (typeof route === \"string\") {\n        let [method, url] = route.split(\" \");\n        options = Object.assign(url ? { method, url } : { url: method }, options);\n    }\n    else {\n        options = Object.assign({}, route);\n    }\n    // lowercase header names before merging with defaults to avoid duplicates\n    options.headers = lowercaseKeys(options.headers);\n    const mergedOptions = mergeDeep(defaults || {}, options);\n    // mediaType.previews arrays are merged, instead of overwritten\n    if (defaults && defaults.mediaType.previews.length) {\n        mergedOptions.mediaType.previews = defaults.mediaType.previews\n            .filter(preview => !mergedOptions.mediaType.previews.includes(preview))\n            .concat(mergedOptions.mediaType.previews);\n    }\n    mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map((preview) => preview.replace(/-preview/, \"\"));\n    return mergedOptions;\n}\n","export function addQueryParameters(url, parameters) {\n    const separator = /\\?/.test(url) ? \"&\" : \"?\";\n    const names = Object.keys(parameters);\n    if (names.length === 0) {\n        return url;\n    }\n    return (url +\n        separator +\n        names\n            .map(name => {\n            if (name === \"q\") {\n                return (\"q=\" +\n                    parameters\n                        .q.split(\"+\")\n                        .map(encodeURIComponent)\n                        .join(\"+\"));\n            }\n            return `${name}=${encodeURIComponent(parameters[name])}`;\n        })\n            .join(\"&\"));\n}\n","const urlVariableRegex = /\\{[^}]+\\}/g;\nfunction removeNonChars(variableName) {\n    return variableName.replace(/^\\W+|\\W+$/g, \"\").split(/,/);\n}\nexport function extractUrlVariableNames(url) {\n    const matches = url.match(urlVariableRegex);\n    if (!matches) {\n        return [];\n    }\n    return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n","export function omit(object, keysToOmit) {\n    return Object.keys(object)\n        .filter(option => !keysToOmit.includes(option))\n        .reduce((obj, key) => {\n        obj[key] = object[key];\n        return obj;\n    }, {});\n}\n","// Based on https://github.com/bramstein/url-template, licensed under BSD\n// TODO: create separate package.\n//\n// Copyright (c) 2012-2014, Bram Stein\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n//  1. Redistributions of source code must retain the above copyright\n//     notice, this list of conditions and the following disclaimer.\n//  2. Redistributions in binary form must reproduce the above copyright\n//     notice, this list of conditions and the following disclaimer in the\n//     documentation and/or other materials provided with the distribution.\n//  3. The name of the author may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\n// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/* istanbul ignore file */\nfunction encodeReserved(str) {\n    return str\n        .split(/(%[0-9A-Fa-f]{2})/g)\n        .map(function (part) {\n        if (!/%[0-9A-Fa-f]/.test(part)) {\n            part = encodeURI(part)\n                .replace(/%5B/g, \"[\")\n                .replace(/%5D/g, \"]\");\n        }\n        return part;\n    })\n        .join(\"\");\n}\nfunction encodeUnreserved(str) {\n    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n        return (\"%\" +\n            c\n                .charCodeAt(0)\n                .toString(16)\n                .toUpperCase());\n    });\n}\nfunction encodeValue(operator, value, key) {\n    value =\n        operator === \"+\" || operator === \"#\"\n            ? encodeReserved(value)\n            : encodeUnreserved(value);\n    if (key) {\n        return encodeUnreserved(key) + \"=\" + value;\n    }\n    else {\n        return value;\n    }\n}\nfunction isDefined(value) {\n    return value !== undefined && value !== null;\n}\nfunction isKeyOperator(operator) {\n    return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\nfunction getValues(context, operator, key, modifier) {\n    var value = context[key], result = [];\n    if (isDefined(value) && value !== \"\") {\n        if (typeof value === \"string\" ||\n            typeof value === \"number\" ||\n            typeof value === \"boolean\") {\n            value = value.toString();\n            if (modifier && modifier !== \"*\") {\n                value = value.substring(0, parseInt(modifier, 10));\n            }\n            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n        }\n        else {\n            if (modifier === \"*\") {\n                if (Array.isArray(value)) {\n                    value.filter(isDefined).forEach(function (value) {\n                        result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n                    });\n                }\n                else {\n                    Object.keys(value).forEach(function (k) {\n                        if (isDefined(value[k])) {\n                            result.push(encodeValue(operator, value[k], k));\n                        }\n                    });\n                }\n            }\n            else {\n                const tmp = [];\n                if (Array.isArray(value)) {\n                    value.filter(isDefined).forEach(function (value) {\n                        tmp.push(encodeValue(operator, value));\n                    });\n                }\n                else {\n                    Object.keys(value).forEach(function (k) {\n                        if (isDefined(value[k])) {\n                            tmp.push(encodeUnreserved(k));\n                            tmp.push(encodeValue(operator, value[k].toString()));\n                        }\n                    });\n                }\n                if (isKeyOperator(operator)) {\n                    result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n                }\n                else if (tmp.length !== 0) {\n                    result.push(tmp.join(\",\"));\n                }\n            }\n        }\n    }\n    else {\n        if (operator === \";\") {\n            if (isDefined(value)) {\n                result.push(encodeUnreserved(key));\n            }\n        }\n        else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n            result.push(encodeUnreserved(key) + \"=\");\n        }\n        else if (value === \"\") {\n            result.push(\"\");\n        }\n    }\n    return result;\n}\nexport function parseUrl(template) {\n    return {\n        expand: expand.bind(null, template)\n    };\n}\nfunction expand(template, context) {\n    var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n    return template.replace(/\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g, function (_, expression, literal) {\n        if (expression) {\n            let operator = \"\";\n            const values = [];\n            if (operators.indexOf(expression.charAt(0)) !== -1) {\n                operator = expression.charAt(0);\n                expression = expression.substr(1);\n            }\n            expression.split(/,/g).forEach(function (variable) {\n                var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n                values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n            });\n            if (operator && operator !== \"+\") {\n                var separator = \",\";\n                if (operator === \"?\") {\n                    separator = \"&\";\n                }\n                else if (operator !== \"#\") {\n                    separator = operator;\n                }\n                return (values.length !== 0 ? operator : \"\") + values.join(separator);\n            }\n            else {\n                return values.join(\",\");\n            }\n        }\n        else {\n            return encodeReserved(literal);\n        }\n    });\n}\n","import { addQueryParameters } from \"./util/add-query-parameters\";\nimport { extractUrlVariableNames } from \"./util/extract-url-variable-names\";\nimport { omit } from \"./util/omit\";\nimport { parseUrl } from \"./util/url-template\";\nexport function parse(options) {\n    // https://fetch.spec.whatwg.org/#methods\n    let method = options.method.toUpperCase();\n    // replace :varname with {varname} to make it RFC 6570 compatible\n    let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{+$1}\");\n    let headers = Object.assign({}, options.headers);\n    let body;\n    let parameters = omit(options, [\n        \"method\",\n        \"baseUrl\",\n        \"url\",\n        \"headers\",\n        \"request\",\n        \"mediaType\"\n    ]);\n    // extract variable names from URL to calculate remaining variables later\n    const urlVariableNames = extractUrlVariableNames(url);\n    url = parseUrl(url).expand(parameters);\n    if (!/^http/.test(url)) {\n        url = options.baseUrl + url;\n    }\n    const omittedParameters = Object.keys(options)\n        .filter(option => urlVariableNames.includes(option))\n        .concat(\"baseUrl\");\n    const remainingParameters = omit(parameters, omittedParameters);\n    const isBinaryRequset = /application\\/octet-stream/i.test(headers.accept);\n    if (!isBinaryRequset) {\n        if (options.mediaType.format) {\n            // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw\n            headers.accept = headers.accept\n                .split(/,/)\n                .map(preview => preview.replace(/application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`))\n                .join(\",\");\n        }\n        if (options.mediaType.previews.length) {\n            const previewsFromAcceptHeader = headers.accept.match(/[\\w-]+(?=-preview)/g) || [];\n            headers.accept = previewsFromAcceptHeader\n                .concat(options.mediaType.previews)\n                .map(preview => {\n                const format = options.mediaType.format\n                    ? `.${options.mediaType.format}`\n                    : \"+json\";\n                return `application/vnd.github.${preview}-preview${format}`;\n            })\n                .join(\",\");\n        }\n    }\n    // for GET/HEAD requests, set URL query parameters from remaining parameters\n    // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters\n    if ([\"GET\", \"HEAD\"].includes(method)) {\n        url = addQueryParameters(url, remainingParameters);\n    }\n    else {\n        if (\"data\" in remainingParameters) {\n            body = remainingParameters.data;\n        }\n        else {\n            if (Object.keys(remainingParameters).length) {\n                body = remainingParameters;\n            }\n            else {\n                headers[\"content-length\"] = 0;\n            }\n        }\n    }\n    // default content-type for JSON if body is set\n    if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n        headers[\"content-type\"] = \"application/json; charset=utf-8\";\n    }\n    // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.\n    // fetch does not allow to set `content-length` header, but we can set body to an empty string\n    if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n        body = \"\";\n    }\n    // Only return body/request keys if present\n    return Object.assign({ method, url, headers }, typeof body !== \"undefined\" ? { body } : null, options.request ? { request: options.request } : null);\n}\n","import { merge } from \"./merge\";\nimport { parse } from \"./parse\";\nexport function endpointWithDefaults(defaults, route, options) {\n    return parse(merge(defaults, route, options));\n}\n","import { endpointWithDefaults } from \"./endpoint-with-defaults\";\nimport { merge } from \"./merge\";\nimport { parse } from \"./parse\";\nexport function withDefaults(oldDefaults, newDefaults) {\n    const DEFAULTS = merge(oldDefaults, newDefaults);\n    const endpoint = endpointWithDefaults.bind(null, DEFAULTS);\n    return Object.assign(endpoint, {\n        DEFAULTS,\n        defaults: withDefaults.bind(null, DEFAULTS),\n        merge: merge.bind(null, DEFAULTS),\n        parse\n    });\n}\n","export const VERSION = \"5.5.1\";\n","import { getUserAgent } from \"universal-user-agent\";\nimport { VERSION } from \"./version\";\nconst userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;\n// DEFAULTS has all properties set that EndpointOptions has, except url.\n// So we use RequestParameters and add method as additional required property.\nexport const DEFAULTS = {\n    method: \"GET\",\n    baseUrl: \"https://api.github.com\",\n    headers: {\n        accept: \"application/vnd.github.v3+json\",\n        \"user-agent\": userAgent\n    },\n    mediaType: {\n        format: \"\",\n        previews: []\n    }\n};\n","import { withDefaults } from \"./with-defaults\";\nimport { DEFAULTS } from \"./defaults\";\nexport const endpoint = withDefaults(null, DEFAULTS);\n"],"names":["lowercaseKeys","object","Object","keys","reduce","newObj","key","toLowerCase","mergeDeep","defaults","options","result","assign","forEach","isPlainObject","merge","route","method","url","split","headers","mergedOptions","mediaType","previews","length","filter","preview","includes","concat","map","replace","addQueryParameters","parameters","separator","test","names","name","q","encodeURIComponent","join","urlVariableRegex","removeNonChars","variableName","extractUrlVariableNames","matches","match","a","b","omit","keysToOmit","option","obj","encodeReserved","str","part","encodeURI","encodeUnreserved","c","charCodeAt","toString","toUpperCase","encodeValue","operator","value","isDefined","undefined","isKeyOperator","getValues","context","modifier","substring","parseInt","push","Array","isArray","k","tmp","parseUrl","template","expand","bind","operators","_","expression","literal","values","indexOf","charAt","substr","variable","exec","parse","body","urlVariableNames","baseUrl","omittedParameters","remainingParameters","isBinaryRequset","accept","format","previewsFromAcceptHeader","data","request","endpointWithDefaults","withDefaults","oldDefaults","newDefaults","DEFAULTS","endpoint","VERSION","userAgent","getUserAgent"],"mappings":";;;;;;;;;AAAO,SAASA,aAAT,CAAuBC,MAAvB,EAA+B;MAC9B,CAACA,MAAL,EAAa;WACF,EAAP;;;SAEGC,MAAM,CAACC,IAAP,CAAYF,MAAZ,EAAoBG,MAApB,CAA2B,CAACC,MAAD,EAASC,GAAT,KAAiB;IAC/CD,MAAM,CAACC,GAAG,CAACC,WAAJ,EAAD,CAAN,GAA4BN,MAAM,CAACK,GAAD,CAAlC;WACOD,MAAP;GAFG,EAGJ,EAHI,CAAP;;;ACHG,SAASG,SAAT,CAAmBC,QAAnB,EAA6BC,OAA7B,EAAsC;QACnCC,MAAM,GAAGT,MAAM,CAACU,MAAP,CAAc,EAAd,EAAkBH,QAAlB,CAAf;EACAP,MAAM,CAACC,IAAP,CAAYO,OAAZ,EAAqBG,OAArB,CAA6BP,GAAG,IAAI;QAC5BQ,aAAa,CAACJ,OAAO,CAACJ,GAAD,CAAR,CAAjB,EAAiC;UACzB,EAAEA,GAAG,IAAIG,QAAT,CAAJ,EACIP,MAAM,CAACU,MAAP,CAAcD,MAAd,EAAsB;SAAGL,GAAD,GAAOI,OAAO,CAACJ,GAAD;OAAtC,EADJ,KAGIK,MAAM,CAACL,GAAD,CAAN,GAAcE,SAAS,CAACC,QAAQ,CAACH,GAAD,CAAT,EAAgBI,OAAO,CAACJ,GAAD,CAAvB,CAAvB;KAJR,MAMK;MACDJ,MAAM,CAACU,MAAP,CAAcD,MAAd,EAAsB;SAAGL,GAAD,GAAOI,OAAO,CAACJ,GAAD;OAAtC;;GARR;SAWOK,MAAP;;;ACZG,SAASI,KAAT,CAAeN,QAAf,EAAyBO,KAAzB,EAAgCN,OAAhC,EAAyC;MACxC,OAAOM,KAAP,KAAiB,QAArB,EAA+B;QACvB,CAACC,MAAD,EAASC,GAAT,IAAgBF,KAAK,CAACG,KAAN,CAAY,GAAZ,CAApB;IACAT,OAAO,GAAGR,MAAM,CAACU,MAAP,CAAcM,GAAG,GAAG;MAAED,MAAF;MAAUC;KAAb,GAAqB;MAAEA,GAAG,EAAED;KAA7C,EAAuDP,OAAvD,CAAV;GAFJ,MAIK;IACDA,OAAO,GAAGR,MAAM,CAACU,MAAP,CAAc,EAAd,EAAkBI,KAAlB,CAAV;GANwC;;;EAS5CN,OAAO,CAACU,OAAR,GAAkBpB,aAAa,CAACU,OAAO,CAACU,OAAT,CAA/B;QACMC,aAAa,GAAGb,SAAS,CAACC,QAAQ,IAAI,EAAb,EAAiBC,OAAjB,CAA/B,CAV4C;;MAYxCD,QAAQ,IAAIA,QAAQ,CAACa,SAAT,CAAmBC,QAAnB,CAA4BC,MAA5C,EAAoD;IAChDH,aAAa,CAACC,SAAd,CAAwBC,QAAxB,GAAmCd,QAAQ,CAACa,SAAT,CAAmBC,QAAnB,CAC9BE,MAD8B,CACvBC,OAAO,IAAI,CAACL,aAAa,CAACC,SAAd,CAAwBC,QAAxB,CAAiCI,QAAjC,CAA0CD,OAA1C,CADW,EAE9BE,MAF8B,CAEvBP,aAAa,CAACC,SAAd,CAAwBC,QAFD,CAAnC;;;EAIJF,aAAa,CAACC,SAAd,CAAwBC,QAAxB,GAAmCF,aAAa,CAACC,SAAd,CAAwBC,QAAxB,CAAiCM,GAAjC,CAAsCH,OAAD,IAAaA,OAAO,CAACI,OAAR,CAAgB,UAAhB,EAA4B,EAA5B,CAAlD,CAAnC;SACOT,aAAP;;;ACpBG,SAASU,kBAAT,CAA4Bb,GAA5B,EAAiCc,UAAjC,EAA6C;QAC1CC,SAAS,GAAG,KAAKC,IAAL,CAAUhB,GAAV,IAAiB,GAAjB,GAAuB,GAAzC;QACMiB,KAAK,GAAGjC,MAAM,CAACC,IAAP,CAAY6B,UAAZ,CAAd;;MACIG,KAAK,CAACX,MAAN,KAAiB,CAArB,EAAwB;WACbN,GAAP;;;SAEIA,GAAG,GACPe,SADI,GAEJE,KAAK,CACAN,GADL,CACSO,IAAI,IAAI;QACTA,IAAI,KAAK,GAAb,EAAkB;aACN,OACJJ,UAAU,CACLK,CADL,CACOlB,KADP,CACa,GADb,EAEKU,GAFL,CAESS,kBAFT,EAGKC,IAHL,CAGU,GAHV,CADJ;;;WAMI,GAAEH,IAAK,IAAGE,kBAAkB,CAACN,UAAU,CAACI,IAAD,CAAX,CAAmB,EAAvD;GATJ,EAWKG,IAXL,CAWU,GAXV,CAFJ;;;ACNJ,MAAMC,gBAAgB,GAAG,YAAzB;;AACA,SAASC,cAAT,CAAwBC,YAAxB,EAAsC;SAC3BA,YAAY,CAACZ,OAAb,CAAqB,YAArB,EAAmC,EAAnC,EAAuCX,KAAvC,CAA6C,GAA7C,CAAP;;;AAEJ,AAAO,SAASwB,uBAAT,CAAiCzB,GAAjC,EAAsC;QACnC0B,OAAO,GAAG1B,GAAG,CAAC2B,KAAJ,CAAUL,gBAAV,CAAhB;;MACI,CAACI,OAAL,EAAc;WACH,EAAP;;;SAEGA,OAAO,CAACf,GAAR,CAAYY,cAAZ,EAA4BrC,MAA5B,CAAmC,CAAC0C,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAClB,MAAF,CAASmB,CAAT,CAA7C,EAA0D,EAA1D,CAAP;;;ACTG,SAASC,IAAT,CAAc/C,MAAd,EAAsBgD,UAAtB,EAAkC;SAC9B/C,MAAM,CAACC,IAAP,CAAYF,MAAZ,EACFwB,MADE,CACKyB,MAAM,IAAI,CAACD,UAAU,CAACtB,QAAX,CAAoBuB,MAApB,CADhB,EAEF9C,MAFE,CAEK,CAAC+C,GAAD,EAAM7C,GAAN,KAAc;IACtB6C,GAAG,CAAC7C,GAAD,CAAH,GAAWL,MAAM,CAACK,GAAD,CAAjB;WACO6C,GAAP;GAJG,EAKJ,EALI,CAAP;;;ACDJ;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAASC,cAAT,CAAwBC,GAAxB,EAA6B;SAClBA,GAAG,CACLlC,KADE,CACI,oBADJ,EAEFU,GAFE,CAEE,UAAUyB,IAAV,EAAgB;QACjB,CAAC,eAAepB,IAAf,CAAoBoB,IAApB,CAAL,EAAgC;MAC5BA,IAAI,GAAGC,SAAS,CAACD,IAAD,CAAT,CACFxB,OADE,CACM,MADN,EACc,GADd,EAEFA,OAFE,CAEM,MAFN,EAEc,GAFd,CAAP;;;WAIGwB,IAAP;GARG,EAUFf,IAVE,CAUG,EAVH,CAAP;;;AAYJ,SAASiB,gBAAT,CAA0BH,GAA1B,EAA+B;SACpBf,kBAAkB,CAACe,GAAD,CAAlB,CAAwBvB,OAAxB,CAAgC,UAAhC,EAA4C,UAAU2B,CAAV,EAAa;WACpD,MACJA,CAAC,CACIC,UADL,CACgB,CADhB,EAEKC,QAFL,CAEc,EAFd,EAGKC,WAHL,EADJ;GADG,CAAP;;;AAQJ,SAASC,WAAT,CAAqBC,QAArB,EAA+BC,KAA/B,EAAsCzD,GAAtC,EAA2C;EACvCyD,KAAK,GACDD,QAAQ,KAAK,GAAb,IAAoBA,QAAQ,KAAK,GAAjC,GACMV,cAAc,CAACW,KAAD,CADpB,GAEMP,gBAAgB,CAACO,KAAD,CAH1B;;MAIIzD,GAAJ,EAAS;WACEkD,gBAAgB,CAAClD,GAAD,CAAhB,GAAwB,GAAxB,GAA8ByD,KAArC;GADJ,MAGK;WACMA,KAAP;;;;AAGR,SAASC,SAAT,CAAmBD,KAAnB,EAA0B;SACfA,KAAK,KAAKE,SAAV,IAAuBF,KAAK,KAAK,IAAxC;;;AAEJ,SAASG,aAAT,CAAuBJ,QAAvB,EAAiC;SACtBA,QAAQ,KAAK,GAAb,IAAoBA,QAAQ,KAAK,GAAjC,IAAwCA,QAAQ,KAAK,GAA5D;;;AAEJ,SAASK,SAAT,CAAmBC,OAAnB,EAA4BN,QAA5B,EAAsCxD,GAAtC,EAA2C+D,QAA3C,EAAqD;MAC7CN,KAAK,GAAGK,OAAO,CAAC9D,GAAD,CAAnB;MAA0BK,MAAM,GAAG,EAAnC;;MACIqD,SAAS,CAACD,KAAD,CAAT,IAAoBA,KAAK,KAAK,EAAlC,EAAsC;QAC9B,OAAOA,KAAP,KAAiB,QAAjB,IACA,OAAOA,KAAP,KAAiB,QADjB,IAEA,OAAOA,KAAP,KAAiB,SAFrB,EAEgC;MAC5BA,KAAK,GAAGA,KAAK,CAACJ,QAAN,EAAR;;UACIU,QAAQ,IAAIA,QAAQ,KAAK,GAA7B,EAAkC;QAC9BN,KAAK,GAAGA,KAAK,CAACO,SAAN,CAAgB,CAAhB,EAAmBC,QAAQ,CAACF,QAAD,EAAW,EAAX,CAA3B,CAAR;;;MAEJ1D,MAAM,CAAC6D,IAAP,CAAYX,WAAW,CAACC,QAAD,EAAWC,KAAX,EAAkBG,aAAa,CAACJ,QAAD,CAAb,GAA0BxD,GAA1B,GAAgC,EAAlD,CAAvB;KAPJ,MASK;UACG+D,QAAQ,KAAK,GAAjB,EAAsB;YACdI,KAAK,CAACC,OAAN,CAAcX,KAAd,CAAJ,EAA0B;UACtBA,KAAK,CAACtC,MAAN,CAAauC,SAAb,EAAwBnD,OAAxB,CAAgC,UAAUkD,KAAV,EAAiB;YAC7CpD,MAAM,CAAC6D,IAAP,CAAYX,WAAW,CAACC,QAAD,EAAWC,KAAX,EAAkBG,aAAa,CAACJ,QAAD,CAAb,GAA0BxD,GAA1B,GAAgC,EAAlD,CAAvB;WADJ;SADJ,MAKK;UACDJ,MAAM,CAACC,IAAP,CAAY4D,KAAZ,EAAmBlD,OAAnB,CAA2B,UAAU8D,CAAV,EAAa;gBAChCX,SAAS,CAACD,KAAK,CAACY,CAAD,CAAN,CAAb,EAAyB;cACrBhE,MAAM,CAAC6D,IAAP,CAAYX,WAAW,CAACC,QAAD,EAAWC,KAAK,CAACY,CAAD,CAAhB,EAAqBA,CAArB,CAAvB;;WAFR;;OAPR,MAcK;cACKC,GAAG,GAAG,EAAZ;;YACIH,KAAK,CAACC,OAAN,CAAcX,KAAd,CAAJ,EAA0B;UACtBA,KAAK,CAACtC,MAAN,CAAauC,SAAb,EAAwBnD,OAAxB,CAAgC,UAAUkD,KAAV,EAAiB;YAC7Ca,GAAG,CAACJ,IAAJ,CAASX,WAAW,CAACC,QAAD,EAAWC,KAAX,CAApB;WADJ;SADJ,MAKK;UACD7D,MAAM,CAACC,IAAP,CAAY4D,KAAZ,EAAmBlD,OAAnB,CAA2B,UAAU8D,CAAV,EAAa;gBAChCX,SAAS,CAACD,KAAK,CAACY,CAAD,CAAN,CAAb,EAAyB;cACrBC,GAAG,CAACJ,IAAJ,CAAShB,gBAAgB,CAACmB,CAAD,CAAzB;cACAC,GAAG,CAACJ,IAAJ,CAASX,WAAW,CAACC,QAAD,EAAWC,KAAK,CAACY,CAAD,CAAL,CAAShB,QAAT,EAAX,CAApB;;WAHR;;;YAOAO,aAAa,CAACJ,QAAD,CAAjB,EAA6B;UACzBnD,MAAM,CAAC6D,IAAP,CAAYhB,gBAAgB,CAAClD,GAAD,CAAhB,GAAwB,GAAxB,GAA8BsE,GAAG,CAACrC,IAAJ,CAAS,GAAT,CAA1C;SADJ,MAGK,IAAIqC,GAAG,CAACpD,MAAJ,KAAe,CAAnB,EAAsB;UACvBb,MAAM,CAAC6D,IAAP,CAAYI,GAAG,CAACrC,IAAJ,CAAS,GAAT,CAAZ;;;;GA5ChB,MAiDK;QACGuB,QAAQ,KAAK,GAAjB,EAAsB;UACdE,SAAS,CAACD,KAAD,CAAb,EAAsB;QAClBpD,MAAM,CAAC6D,IAAP,CAAYhB,gBAAgB,CAAClD,GAAD,CAA5B;;KAFR,MAKK,IAAIyD,KAAK,KAAK,EAAV,KAAiBD,QAAQ,KAAK,GAAb,IAAoBA,QAAQ,KAAK,GAAlD,CAAJ,EAA4D;MAC7DnD,MAAM,CAAC6D,IAAP,CAAYhB,gBAAgB,CAAClD,GAAD,CAAhB,GAAwB,GAApC;KADC,MAGA,IAAIyD,KAAK,KAAK,EAAd,EAAkB;MACnBpD,MAAM,CAAC6D,IAAP,CAAY,EAAZ;;;;SAGD7D,MAAP;;;AAEJ,AAAO,SAASkE,QAAT,CAAkBC,QAAlB,EAA4B;SACxB;IACHC,MAAM,EAAEA,MAAM,CAACC,IAAP,CAAY,IAAZ,EAAkBF,QAAlB;GADZ;;;AAIJ,SAASC,MAAT,CAAgBD,QAAhB,EAA0BV,OAA1B,EAAmC;MAC3Ba,SAAS,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,EAAqB,GAArB,EAA0B,GAA1B,EAA+B,GAA/B,CAAhB;SACOH,QAAQ,CAAChD,OAAT,CAAiB,4BAAjB,EAA+C,UAAUoD,CAAV,EAAaC,UAAb,EAAyBC,OAAzB,EAAkC;QAChFD,UAAJ,EAAgB;UACRrB,QAAQ,GAAG,EAAf;YACMuB,MAAM,GAAG,EAAf;;UACIJ,SAAS,CAACK,OAAV,CAAkBH,UAAU,CAACI,MAAX,CAAkB,CAAlB,CAAlB,MAA4C,CAAC,CAAjD,EAAoD;QAChDzB,QAAQ,GAAGqB,UAAU,CAACI,MAAX,CAAkB,CAAlB,CAAX;QACAJ,UAAU,GAAGA,UAAU,CAACK,MAAX,CAAkB,CAAlB,CAAb;;;MAEJL,UAAU,CAAChE,KAAX,CAAiB,IAAjB,EAAuBN,OAAvB,CAA+B,UAAU4E,QAAV,EAAoB;YAC3Cb,GAAG,GAAG,4BAA4Bc,IAA5B,CAAiCD,QAAjC,CAAV;QACAJ,MAAM,CAACb,IAAP,CAAYL,SAAS,CAACC,OAAD,EAAUN,QAAV,EAAoBc,GAAG,CAAC,CAAD,CAAvB,EAA4BA,GAAG,CAAC,CAAD,CAAH,IAAUA,GAAG,CAAC,CAAD,CAAzC,CAArB;OAFJ;;UAIId,QAAQ,IAAIA,QAAQ,KAAK,GAA7B,EAAkC;YAC1B7B,SAAS,GAAG,GAAhB;;YACI6B,QAAQ,KAAK,GAAjB,EAAsB;UAClB7B,SAAS,GAAG,GAAZ;SADJ,MAGK,IAAI6B,QAAQ,KAAK,GAAjB,EAAsB;UACvB7B,SAAS,GAAG6B,QAAZ;;;eAEG,CAACuB,MAAM,CAAC7D,MAAP,KAAkB,CAAlB,GAAsBsC,QAAtB,GAAiC,EAAlC,IAAwCuB,MAAM,CAAC9C,IAAP,CAAYN,SAAZ,CAA/C;OARJ,MAUK;eACMoD,MAAM,CAAC9C,IAAP,CAAY,GAAZ,CAAP;;KAtBR,MAyBK;aACMa,cAAc,CAACgC,OAAD,CAArB;;GA3BD,CAAP;;;ACvIG,SAASO,KAAT,CAAejF,OAAf,EAAwB;;MAEvBO,MAAM,GAAGP,OAAO,CAACO,MAAR,CAAe2C,WAAf,EAAb,CAF2B;;MAIvB1C,GAAG,GAAG,CAACR,OAAO,CAACQ,GAAR,IAAe,GAAhB,EAAqBY,OAArB,CAA6B,cAA7B,EAA6C,OAA7C,CAAV;MACIV,OAAO,GAAGlB,MAAM,CAACU,MAAP,CAAc,EAAd,EAAkBF,OAAO,CAACU,OAA1B,CAAd;MACIwE,IAAJ;MACI5D,UAAU,GAAGgB,IAAI,CAACtC,OAAD,EAAU,CAC3B,QAD2B,EAE3B,SAF2B,EAG3B,KAH2B,EAI3B,SAJ2B,EAK3B,SAL2B,EAM3B,WAN2B,CAAV,CAArB,CAP2B;;QAgBrBmF,gBAAgB,GAAGlD,uBAAuB,CAACzB,GAAD,CAAhD;EACAA,GAAG,GAAG2D,QAAQ,CAAC3D,GAAD,CAAR,CAAc6D,MAAd,CAAqB/C,UAArB,CAAN;;MACI,CAAC,QAAQE,IAAR,CAAahB,GAAb,CAAL,EAAwB;IACpBA,GAAG,GAAGR,OAAO,CAACoF,OAAR,GAAkB5E,GAAxB;;;QAEE6E,iBAAiB,GAAG7F,MAAM,CAACC,IAAP,CAAYO,OAAZ,EACrBe,MADqB,CACdyB,MAAM,IAAI2C,gBAAgB,CAAClE,QAAjB,CAA0BuB,MAA1B,CADI,EAErBtB,MAFqB,CAEd,SAFc,CAA1B;QAGMoE,mBAAmB,GAAGhD,IAAI,CAAChB,UAAD,EAAa+D,iBAAb,CAAhC;QACME,eAAe,GAAG,6BAA6B/D,IAA7B,CAAkCd,OAAO,CAAC8E,MAA1C,CAAxB;;MACI,CAACD,eAAL,EAAsB;QACdvF,OAAO,CAACY,SAAR,CAAkB6E,MAAtB,EAA8B;;MAE1B/E,OAAO,CAAC8E,MAAR,GAAiB9E,OAAO,CAAC8E,MAAR,CACZ/E,KADY,CACN,GADM,EAEZU,GAFY,CAERH,OAAO,IAAIA,OAAO,CAACI,OAAR,CAAgB,kDAAhB,EAAqE,uBAAsBpB,OAAO,CAACY,SAAR,CAAkB6E,MAAO,EAApH,CAFH,EAGZ5D,IAHY,CAGP,GAHO,CAAjB;;;QAKA7B,OAAO,CAACY,SAAR,CAAkBC,QAAlB,CAA2BC,MAA/B,EAAuC;YAC7B4E,wBAAwB,GAAGhF,OAAO,CAAC8E,MAAR,CAAerD,KAAf,CAAqB,qBAArB,KAA+C,EAAhF;MACAzB,OAAO,CAAC8E,MAAR,GAAiBE,wBAAwB,CACpCxE,MADY,CACLlB,OAAO,CAACY,SAAR,CAAkBC,QADb,EAEZM,GAFY,CAERH,OAAO,IAAI;cACVyE,MAAM,GAAGzF,OAAO,CAACY,SAAR,CAAkB6E,MAAlB,GACR,IAAGzF,OAAO,CAACY,SAAR,CAAkB6E,MAAO,EADpB,GAET,OAFN;eAGQ,0BAAyBzE,OAAQ,WAAUyE,MAAO,EAA1D;OANa,EAQZ5D,IARY,CAQP,GARO,CAAjB;;GApCmB;;;;MAiDvB,CAAC,KAAD,EAAQ,MAAR,EAAgBZ,QAAhB,CAAyBV,MAAzB,CAAJ,EAAsC;IAClCC,GAAG,GAAGa,kBAAkB,CAACb,GAAD,EAAM8E,mBAAN,CAAxB;GADJ,MAGK;QACG,UAAUA,mBAAd,EAAmC;MAC/BJ,IAAI,GAAGI,mBAAmB,CAACK,IAA3B;KADJ,MAGK;UACGnG,MAAM,CAACC,IAAP,CAAY6F,mBAAZ,EAAiCxE,MAArC,EAA6C;QACzCoE,IAAI,GAAGI,mBAAP;OADJ,MAGK;QACD5E,OAAO,CAAC,gBAAD,CAAP,GAA4B,CAA5B;;;GA7De;;;MAkEvB,CAACA,OAAO,CAAC,cAAD,CAAR,IAA4B,OAAOwE,IAAP,KAAgB,WAAhD,EAA6D;IACzDxE,OAAO,CAAC,cAAD,CAAP,GAA0B,iCAA1B;GAnEuB;;;;MAuEvB,CAAC,OAAD,EAAU,KAAV,EAAiBO,QAAjB,CAA0BV,MAA1B,KAAqC,OAAO2E,IAAP,KAAgB,WAAzD,EAAsE;IAClEA,IAAI,GAAG,EAAP;GAxEuB;;;SA2EpB1F,MAAM,CAACU,MAAP,CAAc;IAAEK,MAAF;IAAUC,GAAV;IAAeE;GAA7B,EAAwC,OAAOwE,IAAP,KAAgB,WAAhB,GAA8B;IAAEA;GAAhC,GAAyC,IAAjF,EAAuFlF,OAAO,CAAC4F,OAAR,GAAkB;IAAEA,OAAO,EAAE5F,OAAO,CAAC4F;GAArC,GAAiD,IAAxI,CAAP;;;AC7EG,SAASC,oBAAT,CAA8B9F,QAA9B,EAAwCO,KAAxC,EAA+CN,OAA/C,EAAwD;SACpDiF,KAAK,CAAC5E,KAAK,CAACN,QAAD,EAAWO,KAAX,EAAkBN,OAAlB,CAAN,CAAZ;;;ACAG,SAAS8F,YAAT,CAAsBC,WAAtB,EAAmCC,WAAnC,EAAgD;QAC7CC,QAAQ,GAAG5F,KAAK,CAAC0F,WAAD,EAAcC,WAAd,CAAtB;QACME,QAAQ,GAAGL,oBAAoB,CAACvB,IAArB,CAA0B,IAA1B,EAAgC2B,QAAhC,CAAjB;SACOzG,MAAM,CAACU,MAAP,CAAcgG,QAAd,EAAwB;IAC3BD,QAD2B;IAE3BlG,QAAQ,EAAE+F,YAAY,CAACxB,IAAb,CAAkB,IAAlB,EAAwB2B,QAAxB,CAFiB;IAG3B5F,KAAK,EAAEA,KAAK,CAACiE,IAAN,CAAW,IAAX,EAAiB2B,QAAjB,CAHoB;IAI3BhB;GAJG,CAAP;;;ACNG,MAAMkB,OAAO,GAAG,mBAAhB;;ACEP,MAAMC,SAAS,GAAI,uBAAsBD,OAAQ,IAAGE,+BAAY,EAAG,EAAnE;;;AAGA,AAAO,MAAMJ,QAAQ,GAAG;EACpB1F,MAAM,EAAE,KADY;EAEpB6E,OAAO,EAAE,wBAFW;EAGpB1E,OAAO,EAAE;IACL8E,MAAM,EAAE,gCADH;kBAESY;GALE;EAOpBxF,SAAS,EAAE;IACP6E,MAAM,EAAE,EADD;IAEP5E,QAAQ,EAAE;;CATX;;MCHMqF,QAAQ,GAAGJ,YAAY,CAAC,IAAD,EAAOG,QAAP,CAA7B;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/defaults.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/defaults.js
new file mode 100644
index 0000000..e1e53fb
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/defaults.js
@@ -0,0 +1,17 @@
+import { getUserAgent } from "universal-user-agent";
+import { VERSION } from "./version";
+const userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;
+// DEFAULTS has all properties set that EndpointOptions has, except url.
+// So we use RequestParameters and add method as additional required property.
+export const DEFAULTS = {
+    method: "GET",
+    baseUrl: "https://api.github.com",
+    headers: {
+        accept: "application/vnd.github.v3+json",
+        "user-agent": userAgent
+    },
+    mediaType: {
+        format: "",
+        previews: []
+    }
+};
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/endpoint-with-defaults.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/endpoint-with-defaults.js
new file mode 100644
index 0000000..5763758
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/endpoint-with-defaults.js
@@ -0,0 +1,5 @@
+import { merge } from "./merge";
+import { parse } from "./parse";
+export function endpointWithDefaults(defaults, route, options) {
+    return parse(merge(defaults, route, options));
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/index.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/index.js
new file mode 100644
index 0000000..599917f
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/index.js
@@ -0,0 +1,3 @@
+import { withDefaults } from "./with-defaults";
+import { DEFAULTS } from "./defaults";
+export const endpoint = withDefaults(null, DEFAULTS);
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/merge.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/merge.js
new file mode 100644
index 0000000..a209ffa
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/merge.js
@@ -0,0 +1,22 @@
+import { lowercaseKeys } from "./util/lowercase-keys";
+import { mergeDeep } from "./util/merge-deep";
+export function merge(defaults, route, options) {
+    if (typeof route === "string") {
+        let [method, url] = route.split(" ");
+        options = Object.assign(url ? { method, url } : { url: method }, options);
+    }
+    else {
+        options = Object.assign({}, route);
+    }
+    // lowercase header names before merging with defaults to avoid duplicates
+    options.headers = lowercaseKeys(options.headers);
+    const mergedOptions = mergeDeep(defaults || {}, options);
+    // mediaType.previews arrays are merged, instead of overwritten
+    if (defaults && defaults.mediaType.previews.length) {
+        mergedOptions.mediaType.previews = defaults.mediaType.previews
+            .filter(preview => !mergedOptions.mediaType.previews.includes(preview))
+            .concat(mergedOptions.mediaType.previews);
+    }
+    mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map((preview) => preview.replace(/-preview/, ""));
+    return mergedOptions;
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/parse.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/parse.js
new file mode 100644
index 0000000..ca68ca9
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/parse.js
@@ -0,0 +1,81 @@
+import { addQueryParameters } from "./util/add-query-parameters";
+import { extractUrlVariableNames } from "./util/extract-url-variable-names";
+import { omit } from "./util/omit";
+import { parseUrl } from "./util/url-template";
+export function parse(options) {
+    // https://fetch.spec.whatwg.org/#methods
+    let method = options.method.toUpperCase();
+    // replace :varname with {varname} to make it RFC 6570 compatible
+    let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
+    let headers = Object.assign({}, options.headers);
+    let body;
+    let parameters = omit(options, [
+        "method",
+        "baseUrl",
+        "url",
+        "headers",
+        "request",
+        "mediaType"
+    ]);
+    // extract variable names from URL to calculate remaining variables later
+    const urlVariableNames = extractUrlVariableNames(url);
+    url = parseUrl(url).expand(parameters);
+    if (!/^http/.test(url)) {
+        url = options.baseUrl + url;
+    }
+    const omittedParameters = Object.keys(options)
+        .filter(option => urlVariableNames.includes(option))
+        .concat("baseUrl");
+    const remainingParameters = omit(parameters, omittedParameters);
+    const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
+    if (!isBinaryRequset) {
+        if (options.mediaType.format) {
+            // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
+            headers.accept = headers.accept
+                .split(/,/)
+                .map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`))
+                .join(",");
+        }
+        if (options.mediaType.previews.length) {
+            const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
+            headers.accept = previewsFromAcceptHeader
+                .concat(options.mediaType.previews)
+                .map(preview => {
+                const format = options.mediaType.format
+                    ? `.${options.mediaType.format}`
+                    : "+json";
+                return `application/vnd.github.${preview}-preview${format}`;
+            })
+                .join(",");
+        }
+    }
+    // for GET/HEAD requests, set URL query parameters from remaining parameters
+    // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
+    if (["GET", "HEAD"].includes(method)) {
+        url = addQueryParameters(url, remainingParameters);
+    }
+    else {
+        if ("data" in remainingParameters) {
+            body = remainingParameters.data;
+        }
+        else {
+            if (Object.keys(remainingParameters).length) {
+                body = remainingParameters;
+            }
+            else {
+                headers["content-length"] = 0;
+            }
+        }
+    }
+    // default content-type for JSON if body is set
+    if (!headers["content-type"] && typeof body !== "undefined") {
+        headers["content-type"] = "application/json; charset=utf-8";
+    }
+    // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
+    // fetch does not allow to set `content-length` header, but we can set body to an empty string
+    if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
+        body = "";
+    }
+    // Only return body/request keys if present
+    return Object.assign({ method, url, headers }, typeof body !== "undefined" ? { body } : null, options.request ? { request: options.request } : null);
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/util/add-query-parameters.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/add-query-parameters.js
new file mode 100644
index 0000000..a78812f
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/add-query-parameters.js
@@ -0,0 +1,21 @@
+export function addQueryParameters(url, parameters) {
+    const separator = /\?/.test(url) ? "&" : "?";
+    const names = Object.keys(parameters);
+    if (names.length === 0) {
+        return url;
+    }
+    return (url +
+        separator +
+        names
+            .map(name => {
+            if (name === "q") {
+                return ("q=" +
+                    parameters
+                        .q.split("+")
+                        .map(encodeURIComponent)
+                        .join("+"));
+            }
+            return `${name}=${encodeURIComponent(parameters[name])}`;
+        })
+            .join("&"));
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/util/extract-url-variable-names.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/extract-url-variable-names.js
new file mode 100644
index 0000000..3e75db2
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/extract-url-variable-names.js
@@ -0,0 +1,11 @@
+const urlVariableRegex = /\{[^}]+\}/g;
+function removeNonChars(variableName) {
+    return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
+}
+export function extractUrlVariableNames(url) {
+    const matches = url.match(urlVariableRegex);
+    if (!matches) {
+        return [];
+    }
+    return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/util/lowercase-keys.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/lowercase-keys.js
new file mode 100644
index 0000000..0780642
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/lowercase-keys.js
@@ -0,0 +1,9 @@
+export function lowercaseKeys(object) {
+    if (!object) {
+        return {};
+    }
+    return Object.keys(object).reduce((newObj, key) => {
+        newObj[key.toLowerCase()] = object[key];
+        return newObj;
+    }, {});
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/util/merge-deep.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/merge-deep.js
new file mode 100644
index 0000000..d1c5402
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/merge-deep.js
@@ -0,0 +1,16 @@
+import isPlainObject from "is-plain-object";
+export function mergeDeep(defaults, options) {
+    const result = Object.assign({}, defaults);
+    Object.keys(options).forEach(key => {
+        if (isPlainObject(options[key])) {
+            if (!(key in defaults))
+                Object.assign(result, { [key]: options[key] });
+            else
+                result[key] = mergeDeep(defaults[key], options[key]);
+        }
+        else {
+            Object.assign(result, { [key]: options[key] });
+        }
+    });
+    return result;
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/util/omit.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/omit.js
new file mode 100644
index 0000000..7e1aa6b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/omit.js
@@ -0,0 +1,8 @@
+export function omit(object, keysToOmit) {
+    return Object.keys(object)
+        .filter(option => !keysToOmit.includes(option))
+        .reduce((obj, key) => {
+        obj[key] = object[key];
+        return obj;
+    }, {});
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/util/url-template.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/url-template.js
new file mode 100644
index 0000000..f6d9885
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/util/url-template.js
@@ -0,0 +1,170 @@
+// Based on https://github.com/bramstein/url-template, licensed under BSD
+// TODO: create separate package.
+//
+// Copyright (c) 2012-2014, Bram Stein
+// All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//  1. Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+//  2. Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//  3. The name of the author may not be used to endorse or promote products
+//     derived from this software without specific prior written permission.
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* istanbul ignore file */
+function encodeReserved(str) {
+    return str
+        .split(/(%[0-9A-Fa-f]{2})/g)
+        .map(function (part) {
+        if (!/%[0-9A-Fa-f]/.test(part)) {
+            part = encodeURI(part)
+                .replace(/%5B/g, "[")
+                .replace(/%5D/g, "]");
+        }
+        return part;
+    })
+        .join("");
+}
+function encodeUnreserved(str) {
+    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
+        return ("%" +
+            c
+                .charCodeAt(0)
+                .toString(16)
+                .toUpperCase());
+    });
+}
+function encodeValue(operator, value, key) {
+    value =
+        operator === "+" || operator === "#"
+            ? encodeReserved(value)
+            : encodeUnreserved(value);
+    if (key) {
+        return encodeUnreserved(key) + "=" + value;
+    }
+    else {
+        return value;
+    }
+}
+function isDefined(value) {
+    return value !== undefined && value !== null;
+}
+function isKeyOperator(operator) {
+    return operator === ";" || operator === "&" || operator === "?";
+}
+function getValues(context, operator, key, modifier) {
+    var value = context[key], result = [];
+    if (isDefined(value) && value !== "") {
+        if (typeof value === "string" ||
+            typeof value === "number" ||
+            typeof value === "boolean") {
+            value = value.toString();
+            if (modifier && modifier !== "*") {
+                value = value.substring(0, parseInt(modifier, 10));
+            }
+            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+        }
+        else {
+            if (modifier === "*") {
+                if (Array.isArray(value)) {
+                    value.filter(isDefined).forEach(function (value) {
+                        result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+                    });
+                }
+                else {
+                    Object.keys(value).forEach(function (k) {
+                        if (isDefined(value[k])) {
+                            result.push(encodeValue(operator, value[k], k));
+                        }
+                    });
+                }
+            }
+            else {
+                const tmp = [];
+                if (Array.isArray(value)) {
+                    value.filter(isDefined).forEach(function (value) {
+                        tmp.push(encodeValue(operator, value));
+                    });
+                }
+                else {
+                    Object.keys(value).forEach(function (k) {
+                        if (isDefined(value[k])) {
+                            tmp.push(encodeUnreserved(k));
+                            tmp.push(encodeValue(operator, value[k].toString()));
+                        }
+                    });
+                }
+                if (isKeyOperator(operator)) {
+                    result.push(encodeUnreserved(key) + "=" + tmp.join(","));
+                }
+                else if (tmp.length !== 0) {
+                    result.push(tmp.join(","));
+                }
+            }
+        }
+    }
+    else {
+        if (operator === ";") {
+            if (isDefined(value)) {
+                result.push(encodeUnreserved(key));
+            }
+        }
+        else if (value === "" && (operator === "&" || operator === "?")) {
+            result.push(encodeUnreserved(key) + "=");
+        }
+        else if (value === "") {
+            result.push("");
+        }
+    }
+    return result;
+}
+export function parseUrl(template) {
+    return {
+        expand: expand.bind(null, template)
+    };
+}
+function expand(template, context) {
+    var operators = ["+", "#", ".", "/", ";", "?", "&"];
+    return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
+        if (expression) {
+            let operator = "";
+            const values = [];
+            if (operators.indexOf(expression.charAt(0)) !== -1) {
+                operator = expression.charAt(0);
+                expression = expression.substr(1);
+            }
+            expression.split(/,/g).forEach(function (variable) {
+                var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
+                values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
+            });
+            if (operator && operator !== "+") {
+                var separator = ",";
+                if (operator === "?") {
+                    separator = "&";
+                }
+                else if (operator !== "#") {
+                    separator = operator;
+                }
+                return (values.length !== 0 ? operator : "") + values.join(separator);
+            }
+            else {
+                return values.join(",");
+            }
+        }
+        else {
+            return encodeReserved(literal);
+        }
+    });
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/version.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/version.js
new file mode 100644
index 0000000..ef91397
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/version.js
@@ -0,0 +1 @@
+export const VERSION = "5.5.1";
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-src/with-defaults.js b/setup-maven/node_modules/@octokit/endpoint/dist-src/with-defaults.js
new file mode 100644
index 0000000..9a1c886
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-src/with-defaults.js
@@ -0,0 +1,13 @@
+import { endpointWithDefaults } from "./endpoint-with-defaults";
+import { merge } from "./merge";
+import { parse } from "./parse";
+export function withDefaults(oldDefaults, newDefaults) {
+    const DEFAULTS = merge(oldDefaults, newDefaults);
+    const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
+    return Object.assign(endpoint, {
+        DEFAULTS,
+        defaults: withDefaults.bind(null, DEFAULTS),
+        merge: merge.bind(null, DEFAULTS),
+        parse
+    });
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/defaults.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/defaults.d.ts
new file mode 100644
index 0000000..30fcd20
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/defaults.d.ts
@@ -0,0 +1,2 @@
+import { EndpointDefaults } from "@octokit/types";
+export declare const DEFAULTS: EndpointDefaults;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/endpoint-with-defaults.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/endpoint-with-defaults.d.ts
new file mode 100644
index 0000000..ff39e5e
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/endpoint-with-defaults.d.ts
@@ -0,0 +1,3 @@
+import { EndpointOptions, RequestParameters, Route } from "@octokit/types";
+import { DEFAULTS } from "./defaults";
+export declare function endpointWithDefaults(defaults: typeof DEFAULTS, route: Route | EndpointOptions, options?: RequestParameters): import("@octokit/types").RequestOptions;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/index.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/index.d.ts
new file mode 100644
index 0000000..17be855
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/index.d.ts
@@ -0,0 +1 @@
+export declare const endpoint: import("@octokit/types").EndpointInterface;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/merge.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/merge.d.ts
new file mode 100644
index 0000000..b75a15e
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/merge.d.ts
@@ -0,0 +1,2 @@
+import { EndpointDefaults, RequestParameters, Route } from "@octokit/types";
+export declare function merge(defaults: EndpointDefaults | null, route?: Route | RequestParameters, options?: RequestParameters): EndpointDefaults;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/parse.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/parse.d.ts
new file mode 100644
index 0000000..fbe2144
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/parse.d.ts
@@ -0,0 +1,2 @@
+import { EndpointDefaults, RequestOptions } from "@octokit/types";
+export declare function parse(options: EndpointDefaults): RequestOptions;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/util/add-query-parameters.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/add-query-parameters.d.ts
new file mode 100644
index 0000000..4b192ac
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/add-query-parameters.d.ts
@@ -0,0 +1,4 @@
+export declare function addQueryParameters(url: string, parameters: {
+    [x: string]: string | undefined;
+    q?: string;
+}): string;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/util/extract-url-variable-names.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/extract-url-variable-names.d.ts
new file mode 100644
index 0000000..93586d4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/extract-url-variable-names.d.ts
@@ -0,0 +1 @@
+export declare function extractUrlVariableNames(url: string): string[];
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/util/lowercase-keys.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/lowercase-keys.d.ts
new file mode 100644
index 0000000..1daf307
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/lowercase-keys.d.ts
@@ -0,0 +1,5 @@
+export declare function lowercaseKeys(object?: {
+    [key: string]: any;
+}): {
+    [key: string]: any;
+};
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/util/merge-deep.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/merge-deep.d.ts
new file mode 100644
index 0000000..914411c
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/merge-deep.d.ts
@@ -0,0 +1 @@
+export declare function mergeDeep(defaults: any, options: any): object;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/util/omit.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/omit.d.ts
new file mode 100644
index 0000000..06927d6
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/omit.d.ts
@@ -0,0 +1,5 @@
+export declare function omit(object: {
+    [key: string]: any;
+}, keysToOmit: string[]): {
+    [key: string]: any;
+};
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/util/url-template.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/url-template.d.ts
new file mode 100644
index 0000000..5d967ca
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/util/url-template.d.ts
@@ -0,0 +1,3 @@
+export declare function parseUrl(template: string): {
+    expand: (context: object) => string;
+};
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/version.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/version.d.ts
new file mode 100644
index 0000000..809d28a
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/version.d.ts
@@ -0,0 +1 @@
+export declare const VERSION = "5.5.1";
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-types/with-defaults.d.ts b/setup-maven/node_modules/@octokit/endpoint/dist-types/with-defaults.d.ts
new file mode 100644
index 0000000..6f5afd1
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-types/with-defaults.d.ts
@@ -0,0 +1,2 @@
+import { EndpointInterface, RequestParameters, EndpointDefaults } from "@octokit/types";
+export declare function withDefaults(oldDefaults: EndpointDefaults | null, newDefaults: RequestParameters): EndpointInterface;
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-web/index.js b/setup-maven/node_modules/@octokit/endpoint/dist-web/index.js
new file mode 100644
index 0000000..a327238
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-web/index.js
@@ -0,0 +1,379 @@
+import isPlainObject from 'is-plain-object';
+import { getUserAgent } from 'universal-user-agent';
+
+function lowercaseKeys(object) {
+    if (!object) {
+        return {};
+    }
+    return Object.keys(object).reduce((newObj, key) => {
+        newObj[key.toLowerCase()] = object[key];
+        return newObj;
+    }, {});
+}
+
+function mergeDeep(defaults, options) {
+    const result = Object.assign({}, defaults);
+    Object.keys(options).forEach(key => {
+        if (isPlainObject(options[key])) {
+            if (!(key in defaults))
+                Object.assign(result, { [key]: options[key] });
+            else
+                result[key] = mergeDeep(defaults[key], options[key]);
+        }
+        else {
+            Object.assign(result, { [key]: options[key] });
+        }
+    });
+    return result;
+}
+
+function merge(defaults, route, options) {
+    if (typeof route === "string") {
+        let [method, url] = route.split(" ");
+        options = Object.assign(url ? { method, url } : { url: method }, options);
+    }
+    else {
+        options = Object.assign({}, route);
+    }
+    // lowercase header names before merging with defaults to avoid duplicates
+    options.headers = lowercaseKeys(options.headers);
+    const mergedOptions = mergeDeep(defaults || {}, options);
+    // mediaType.previews arrays are merged, instead of overwritten
+    if (defaults && defaults.mediaType.previews.length) {
+        mergedOptions.mediaType.previews = defaults.mediaType.previews
+            .filter(preview => !mergedOptions.mediaType.previews.includes(preview))
+            .concat(mergedOptions.mediaType.previews);
+    }
+    mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map((preview) => preview.replace(/-preview/, ""));
+    return mergedOptions;
+}
+
+function addQueryParameters(url, parameters) {
+    const separator = /\?/.test(url) ? "&" : "?";
+    const names = Object.keys(parameters);
+    if (names.length === 0) {
+        return url;
+    }
+    return (url +
+        separator +
+        names
+            .map(name => {
+            if (name === "q") {
+                return ("q=" +
+                    parameters
+                        .q.split("+")
+                        .map(encodeURIComponent)
+                        .join("+"));
+            }
+            return `${name}=${encodeURIComponent(parameters[name])}`;
+        })
+            .join("&"));
+}
+
+const urlVariableRegex = /\{[^}]+\}/g;
+function removeNonChars(variableName) {
+    return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
+}
+function extractUrlVariableNames(url) {
+    const matches = url.match(urlVariableRegex);
+    if (!matches) {
+        return [];
+    }
+    return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
+}
+
+function omit(object, keysToOmit) {
+    return Object.keys(object)
+        .filter(option => !keysToOmit.includes(option))
+        .reduce((obj, key) => {
+        obj[key] = object[key];
+        return obj;
+    }, {});
+}
+
+// Based on https://github.com/bramstein/url-template, licensed under BSD
+// TODO: create separate package.
+//
+// Copyright (c) 2012-2014, Bram Stein
+// All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//  1. Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+//  2. Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//  3. The name of the author may not be used to endorse or promote products
+//     derived from this software without specific prior written permission.
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* istanbul ignore file */
+function encodeReserved(str) {
+    return str
+        .split(/(%[0-9A-Fa-f]{2})/g)
+        .map(function (part) {
+        if (!/%[0-9A-Fa-f]/.test(part)) {
+            part = encodeURI(part)
+                .replace(/%5B/g, "[")
+                .replace(/%5D/g, "]");
+        }
+        return part;
+    })
+        .join("");
+}
+function encodeUnreserved(str) {
+    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
+        return ("%" +
+            c
+                .charCodeAt(0)
+                .toString(16)
+                .toUpperCase());
+    });
+}
+function encodeValue(operator, value, key) {
+    value =
+        operator === "+" || operator === "#"
+            ? encodeReserved(value)
+            : encodeUnreserved(value);
+    if (key) {
+        return encodeUnreserved(key) + "=" + value;
+    }
+    else {
+        return value;
+    }
+}
+function isDefined(value) {
+    return value !== undefined && value !== null;
+}
+function isKeyOperator(operator) {
+    return operator === ";" || operator === "&" || operator === "?";
+}
+function getValues(context, operator, key, modifier) {
+    var value = context[key], result = [];
+    if (isDefined(value) && value !== "") {
+        if (typeof value === "string" ||
+            typeof value === "number" ||
+            typeof value === "boolean") {
+            value = value.toString();
+            if (modifier && modifier !== "*") {
+                value = value.substring(0, parseInt(modifier, 10));
+            }
+            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+        }
+        else {
+            if (modifier === "*") {
+                if (Array.isArray(value)) {
+                    value.filter(isDefined).forEach(function (value) {
+                        result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+                    });
+                }
+                else {
+                    Object.keys(value).forEach(function (k) {
+                        if (isDefined(value[k])) {
+                            result.push(encodeValue(operator, value[k], k));
+                        }
+                    });
+                }
+            }
+            else {
+                const tmp = [];
+                if (Array.isArray(value)) {
+                    value.filter(isDefined).forEach(function (value) {
+                        tmp.push(encodeValue(operator, value));
+                    });
+                }
+                else {
+                    Object.keys(value).forEach(function (k) {
+                        if (isDefined(value[k])) {
+                            tmp.push(encodeUnreserved(k));
+                            tmp.push(encodeValue(operator, value[k].toString()));
+                        }
+                    });
+                }
+                if (isKeyOperator(operator)) {
+                    result.push(encodeUnreserved(key) + "=" + tmp.join(","));
+                }
+                else if (tmp.length !== 0) {
+                    result.push(tmp.join(","));
+                }
+            }
+        }
+    }
+    else {
+        if (operator === ";") {
+            if (isDefined(value)) {
+                result.push(encodeUnreserved(key));
+            }
+        }
+        else if (value === "" && (operator === "&" || operator === "?")) {
+            result.push(encodeUnreserved(key) + "=");
+        }
+        else if (value === "") {
+            result.push("");
+        }
+    }
+    return result;
+}
+function parseUrl(template) {
+    return {
+        expand: expand.bind(null, template)
+    };
+}
+function expand(template, context) {
+    var operators = ["+", "#", ".", "/", ";", "?", "&"];
+    return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
+        if (expression) {
+            let operator = "";
+            const values = [];
+            if (operators.indexOf(expression.charAt(0)) !== -1) {
+                operator = expression.charAt(0);
+                expression = expression.substr(1);
+            }
+            expression.split(/,/g).forEach(function (variable) {
+                var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
+                values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
+            });
+            if (operator && operator !== "+") {
+                var separator = ",";
+                if (operator === "?") {
+                    separator = "&";
+                }
+                else if (operator !== "#") {
+                    separator = operator;
+                }
+                return (values.length !== 0 ? operator : "") + values.join(separator);
+            }
+            else {
+                return values.join(",");
+            }
+        }
+        else {
+            return encodeReserved(literal);
+        }
+    });
+}
+
+function parse(options) {
+    // https://fetch.spec.whatwg.org/#methods
+    let method = options.method.toUpperCase();
+    // replace :varname with {varname} to make it RFC 6570 compatible
+    let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
+    let headers = Object.assign({}, options.headers);
+    let body;
+    let parameters = omit(options, [
+        "method",
+        "baseUrl",
+        "url",
+        "headers",
+        "request",
+        "mediaType"
+    ]);
+    // extract variable names from URL to calculate remaining variables later
+    const urlVariableNames = extractUrlVariableNames(url);
+    url = parseUrl(url).expand(parameters);
+    if (!/^http/.test(url)) {
+        url = options.baseUrl + url;
+    }
+    const omittedParameters = Object.keys(options)
+        .filter(option => urlVariableNames.includes(option))
+        .concat("baseUrl");
+    const remainingParameters = omit(parameters, omittedParameters);
+    const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
+    if (!isBinaryRequset) {
+        if (options.mediaType.format) {
+            // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
+            headers.accept = headers.accept
+                .split(/,/)
+                .map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`))
+                .join(",");
+        }
+        if (options.mediaType.previews.length) {
+            const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
+            headers.accept = previewsFromAcceptHeader
+                .concat(options.mediaType.previews)
+                .map(preview => {
+                const format = options.mediaType.format
+                    ? `.${options.mediaType.format}`
+                    : "+json";
+                return `application/vnd.github.${preview}-preview${format}`;
+            })
+                .join(",");
+        }
+    }
+    // for GET/HEAD requests, set URL query parameters from remaining parameters
+    // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
+    if (["GET", "HEAD"].includes(method)) {
+        url = addQueryParameters(url, remainingParameters);
+    }
+    else {
+        if ("data" in remainingParameters) {
+            body = remainingParameters.data;
+        }
+        else {
+            if (Object.keys(remainingParameters).length) {
+                body = remainingParameters;
+            }
+            else {
+                headers["content-length"] = 0;
+            }
+        }
+    }
+    // default content-type for JSON if body is set
+    if (!headers["content-type"] && typeof body !== "undefined") {
+        headers["content-type"] = "application/json; charset=utf-8";
+    }
+    // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
+    // fetch does not allow to set `content-length` header, but we can set body to an empty string
+    if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
+        body = "";
+    }
+    // Only return body/request keys if present
+    return Object.assign({ method, url, headers }, typeof body !== "undefined" ? { body } : null, options.request ? { request: options.request } : null);
+}
+
+function endpointWithDefaults(defaults, route, options) {
+    return parse(merge(defaults, route, options));
+}
+
+function withDefaults(oldDefaults, newDefaults) {
+    const DEFAULTS = merge(oldDefaults, newDefaults);
+    const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
+    return Object.assign(endpoint, {
+        DEFAULTS,
+        defaults: withDefaults.bind(null, DEFAULTS),
+        merge: merge.bind(null, DEFAULTS),
+        parse
+    });
+}
+
+const VERSION = "5.5.1";
+
+const userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;
+// DEFAULTS has all properties set that EndpointOptions has, except url.
+// So we use RequestParameters and add method as additional required property.
+const DEFAULTS = {
+    method: "GET",
+    baseUrl: "https://api.github.com",
+    headers: {
+        accept: "application/vnd.github.v3+json",
+        "user-agent": userAgent
+    },
+    mediaType: {
+        format: "",
+        previews: []
+    }
+};
+
+const endpoint = withDefaults(null, DEFAULTS);
+
+export { endpoint };
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/endpoint/dist-web/index.js.map b/setup-maven/node_modules/@octokit/endpoint/dist-web/index.js.map
new file mode 100644
index 0000000..6890009
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/dist-web/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/util/lowercase-keys.js","../dist-src/util/merge-deep.js","../dist-src/merge.js","../dist-src/util/add-query-parameters.js","../dist-src/util/extract-url-variable-names.js","../dist-src/util/omit.js","../dist-src/util/url-template.js","../dist-src/parse.js","../dist-src/endpoint-with-defaults.js","../dist-src/with-defaults.js","../dist-src/version.js","../dist-src/defaults.js","../dist-src/index.js"],"sourcesContent":["export function lowercaseKeys(object) {\n    if (!object) {\n        return {};\n    }\n    return Object.keys(object).reduce((newObj, key) => {\n        newObj[key.toLowerCase()] = object[key];\n        return newObj;\n    }, {});\n}\n","import isPlainObject from \"is-plain-object\";\nexport function mergeDeep(defaults, options) {\n    const result = Object.assign({}, defaults);\n    Object.keys(options).forEach(key => {\n        if (isPlainObject(options[key])) {\n            if (!(key in defaults))\n                Object.assign(result, { [key]: options[key] });\n            else\n                result[key] = mergeDeep(defaults[key], options[key]);\n        }\n        else {\n            Object.assign(result, { [key]: options[key] });\n        }\n    });\n    return result;\n}\n","import { lowercaseKeys } from \"./util/lowercase-keys\";\nimport { mergeDeep } from \"./util/merge-deep\";\nexport function merge(defaults, route, options) {\n    if (typeof route === \"string\") {\n        let [method, url] = route.split(\" \");\n        options = Object.assign(url ? { method, url } : { url: method }, options);\n    }\n    else {\n        options = Object.assign({}, route);\n    }\n    // lowercase header names before merging with defaults to avoid duplicates\n    options.headers = lowercaseKeys(options.headers);\n    const mergedOptions = mergeDeep(defaults || {}, options);\n    // mediaType.previews arrays are merged, instead of overwritten\n    if (defaults && defaults.mediaType.previews.length) {\n        mergedOptions.mediaType.previews = defaults.mediaType.previews\n            .filter(preview => !mergedOptions.mediaType.previews.includes(preview))\n            .concat(mergedOptions.mediaType.previews);\n    }\n    mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map((preview) => preview.replace(/-preview/, \"\"));\n    return mergedOptions;\n}\n","export function addQueryParameters(url, parameters) {\n    const separator = /\\?/.test(url) ? \"&\" : \"?\";\n    const names = Object.keys(parameters);\n    if (names.length === 0) {\n        return url;\n    }\n    return (url +\n        separator +\n        names\n            .map(name => {\n            if (name === \"q\") {\n                return (\"q=\" +\n                    parameters\n                        .q.split(\"+\")\n                        .map(encodeURIComponent)\n                        .join(\"+\"));\n            }\n            return `${name}=${encodeURIComponent(parameters[name])}`;\n        })\n            .join(\"&\"));\n}\n","const urlVariableRegex = /\\{[^}]+\\}/g;\nfunction removeNonChars(variableName) {\n    return variableName.replace(/^\\W+|\\W+$/g, \"\").split(/,/);\n}\nexport function extractUrlVariableNames(url) {\n    const matches = url.match(urlVariableRegex);\n    if (!matches) {\n        return [];\n    }\n    return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n","export function omit(object, keysToOmit) {\n    return Object.keys(object)\n        .filter(option => !keysToOmit.includes(option))\n        .reduce((obj, key) => {\n        obj[key] = object[key];\n        return obj;\n    }, {});\n}\n","// Based on https://github.com/bramstein/url-template, licensed under BSD\n// TODO: create separate package.\n//\n// Copyright (c) 2012-2014, Bram Stein\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n//  1. Redistributions of source code must retain the above copyright\n//     notice, this list of conditions and the following disclaimer.\n//  2. Redistributions in binary form must reproduce the above copyright\n//     notice, this list of conditions and the following disclaimer in the\n//     documentation and/or other materials provided with the distribution.\n//  3. The name of the author may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\n// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/* istanbul ignore file */\nfunction encodeReserved(str) {\n    return str\n        .split(/(%[0-9A-Fa-f]{2})/g)\n        .map(function (part) {\n        if (!/%[0-9A-Fa-f]/.test(part)) {\n            part = encodeURI(part)\n                .replace(/%5B/g, \"[\")\n                .replace(/%5D/g, \"]\");\n        }\n        return part;\n    })\n        .join(\"\");\n}\nfunction encodeUnreserved(str) {\n    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n        return (\"%\" +\n            c\n                .charCodeAt(0)\n                .toString(16)\n                .toUpperCase());\n    });\n}\nfunction encodeValue(operator, value, key) {\n    value =\n        operator === \"+\" || operator === \"#\"\n            ? encodeReserved(value)\n            : encodeUnreserved(value);\n    if (key) {\n        return encodeUnreserved(key) + \"=\" + value;\n    }\n    else {\n        return value;\n    }\n}\nfunction isDefined(value) {\n    return value !== undefined && value !== null;\n}\nfunction isKeyOperator(operator) {\n    return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\nfunction getValues(context, operator, key, modifier) {\n    var value = context[key], result = [];\n    if (isDefined(value) && value !== \"\") {\n        if (typeof value === \"string\" ||\n            typeof value === \"number\" ||\n            typeof value === \"boolean\") {\n            value = value.toString();\n            if (modifier && modifier !== \"*\") {\n                value = value.substring(0, parseInt(modifier, 10));\n            }\n            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n        }\n        else {\n            if (modifier === \"*\") {\n                if (Array.isArray(value)) {\n                    value.filter(isDefined).forEach(function (value) {\n                        result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n                    });\n                }\n                else {\n                    Object.keys(value).forEach(function (k) {\n                        if (isDefined(value[k])) {\n                            result.push(encodeValue(operator, value[k], k));\n                        }\n                    });\n                }\n            }\n            else {\n                const tmp = [];\n                if (Array.isArray(value)) {\n                    value.filter(isDefined).forEach(function (value) {\n                        tmp.push(encodeValue(operator, value));\n                    });\n                }\n                else {\n                    Object.keys(value).forEach(function (k) {\n                        if (isDefined(value[k])) {\n                            tmp.push(encodeUnreserved(k));\n                            tmp.push(encodeValue(operator, value[k].toString()));\n                        }\n                    });\n                }\n                if (isKeyOperator(operator)) {\n                    result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n                }\n                else if (tmp.length !== 0) {\n                    result.push(tmp.join(\",\"));\n                }\n            }\n        }\n    }\n    else {\n        if (operator === \";\") {\n            if (isDefined(value)) {\n                result.push(encodeUnreserved(key));\n            }\n        }\n        else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n            result.push(encodeUnreserved(key) + \"=\");\n        }\n        else if (value === \"\") {\n            result.push(\"\");\n        }\n    }\n    return result;\n}\nexport function parseUrl(template) {\n    return {\n        expand: expand.bind(null, template)\n    };\n}\nfunction expand(template, context) {\n    var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n    return template.replace(/\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g, function (_, expression, literal) {\n        if (expression) {\n            let operator = \"\";\n            const values = [];\n            if (operators.indexOf(expression.charAt(0)) !== -1) {\n                operator = expression.charAt(0);\n                expression = expression.substr(1);\n            }\n            expression.split(/,/g).forEach(function (variable) {\n                var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n                values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n            });\n            if (operator && operator !== \"+\") {\n                var separator = \",\";\n                if (operator === \"?\") {\n                    separator = \"&\";\n                }\n                else if (operator !== \"#\") {\n                    separator = operator;\n                }\n                return (values.length !== 0 ? operator : \"\") + values.join(separator);\n            }\n            else {\n                return values.join(\",\");\n            }\n        }\n        else {\n            return encodeReserved(literal);\n        }\n    });\n}\n","import { addQueryParameters } from \"./util/add-query-parameters\";\nimport { extractUrlVariableNames } from \"./util/extract-url-variable-names\";\nimport { omit } from \"./util/omit\";\nimport { parseUrl } from \"./util/url-template\";\nexport function parse(options) {\n    // https://fetch.spec.whatwg.org/#methods\n    let method = options.method.toUpperCase();\n    // replace :varname with {varname} to make it RFC 6570 compatible\n    let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{+$1}\");\n    let headers = Object.assign({}, options.headers);\n    let body;\n    let parameters = omit(options, [\n        \"method\",\n        \"baseUrl\",\n        \"url\",\n        \"headers\",\n        \"request\",\n        \"mediaType\"\n    ]);\n    // extract variable names from URL to calculate remaining variables later\n    const urlVariableNames = extractUrlVariableNames(url);\n    url = parseUrl(url).expand(parameters);\n    if (!/^http/.test(url)) {\n        url = options.baseUrl + url;\n    }\n    const omittedParameters = Object.keys(options)\n        .filter(option => urlVariableNames.includes(option))\n        .concat(\"baseUrl\");\n    const remainingParameters = omit(parameters, omittedParameters);\n    const isBinaryRequset = /application\\/octet-stream/i.test(headers.accept);\n    if (!isBinaryRequset) {\n        if (options.mediaType.format) {\n            // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw\n            headers.accept = headers.accept\n                .split(/,/)\n                .map(preview => preview.replace(/application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`))\n                .join(\",\");\n        }\n        if (options.mediaType.previews.length) {\n            const previewsFromAcceptHeader = headers.accept.match(/[\\w-]+(?=-preview)/g) || [];\n            headers.accept = previewsFromAcceptHeader\n                .concat(options.mediaType.previews)\n                .map(preview => {\n                const format = options.mediaType.format\n                    ? `.${options.mediaType.format}`\n                    : \"+json\";\n                return `application/vnd.github.${preview}-preview${format}`;\n            })\n                .join(\",\");\n        }\n    }\n    // for GET/HEAD requests, set URL query parameters from remaining parameters\n    // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters\n    if ([\"GET\", \"HEAD\"].includes(method)) {\n        url = addQueryParameters(url, remainingParameters);\n    }\n    else {\n        if (\"data\" in remainingParameters) {\n            body = remainingParameters.data;\n        }\n        else {\n            if (Object.keys(remainingParameters).length) {\n                body = remainingParameters;\n            }\n            else {\n                headers[\"content-length\"] = 0;\n            }\n        }\n    }\n    // default content-type for JSON if body is set\n    if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n        headers[\"content-type\"] = \"application/json; charset=utf-8\";\n    }\n    // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.\n    // fetch does not allow to set `content-length` header, but we can set body to an empty string\n    if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n        body = \"\";\n    }\n    // Only return body/request keys if present\n    return Object.assign({ method, url, headers }, typeof body !== \"undefined\" ? { body } : null, options.request ? { request: options.request } : null);\n}\n","import { merge } from \"./merge\";\nimport { parse } from \"./parse\";\nexport function endpointWithDefaults(defaults, route, options) {\n    return parse(merge(defaults, route, options));\n}\n","import { endpointWithDefaults } from \"./endpoint-with-defaults\";\nimport { merge } from \"./merge\";\nimport { parse } from \"./parse\";\nexport function withDefaults(oldDefaults, newDefaults) {\n    const DEFAULTS = merge(oldDefaults, newDefaults);\n    const endpoint = endpointWithDefaults.bind(null, DEFAULTS);\n    return Object.assign(endpoint, {\n        DEFAULTS,\n        defaults: withDefaults.bind(null, DEFAULTS),\n        merge: merge.bind(null, DEFAULTS),\n        parse\n    });\n}\n","export const VERSION = \"5.5.1\";\n","import { getUserAgent } from \"universal-user-agent\";\nimport { VERSION } from \"./version\";\nconst userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;\n// DEFAULTS has all properties set that EndpointOptions has, except url.\n// So we use RequestParameters and add method as additional required property.\nexport const DEFAULTS = {\n    method: \"GET\",\n    baseUrl: \"https://api.github.com\",\n    headers: {\n        accept: \"application/vnd.github.v3+json\",\n        \"user-agent\": userAgent\n    },\n    mediaType: {\n        format: \"\",\n        previews: []\n    }\n};\n","import { withDefaults } from \"./with-defaults\";\nimport { DEFAULTS } from \"./defaults\";\nexport const endpoint = withDefaults(null, DEFAULTS);\n"],"names":[],"mappings":";;;AAAO,SAAS,aAAa,CAAC,MAAM,EAAE;IAClC,IAAI,CAAC,MAAM,EAAE;QACT,OAAO,EAAE,CAAC;KACb;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK;QAC/C,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;KACjB,EAAE,EAAE,CAAC,CAAC;CACV;;ACPM,SAAS,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;QAChC,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;YAC7B,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC;gBAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;gBAE/C,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5D;aACI;YACD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAClD;KACJ,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;CACjB;;ACbM,SAAS,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;KAC7E;SACI;QACD,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;KACtC;;IAED,OAAO,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;;IAEzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;QAChD,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ;aACzD,MAAM,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACtE,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACjD;IACD,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IACtH,OAAO,aAAa,CAAC;CACxB;;ACrBM,SAAS,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,OAAO,GAAG,CAAC;KACd;IACD,QAAQ,GAAG;QACP,SAAS;QACT,KAAK;aACA,GAAG,CAAC,IAAI,IAAI;YACb,IAAI,IAAI,KAAK,GAAG,EAAE;gBACd,QAAQ,IAAI;oBACR,UAAU;yBACL,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;yBACZ,GAAG,CAAC,kBAAkB,CAAC;yBACvB,IAAI,CAAC,GAAG,CAAC,EAAE;aACvB;YACD,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5D,CAAC;aACG,IAAI,CAAC,GAAG,CAAC,EAAE;CACvB;;ACpBD,MAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,SAAS,cAAc,CAAC,YAAY,EAAE;IAClC,OAAO,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAC5D;AACD,AAAO,SAAS,uBAAuB,CAAC,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACxE;;ACVM,SAAS,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SACrB,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC9C,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;QACtB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC;KACd,EAAE,EAAE,CAAC,CAAC;CACV;;ACPD;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAS,cAAc,CAAC,GAAG,EAAE;IACzB,OAAO,GAAG;SACL,KAAK,CAAC,oBAAoB,CAAC;SAC3B,GAAG,CAAC,UAAU,IAAI,EAAE;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5B,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;iBACjB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC;KACf,CAAC;SACG,IAAI,CAAC,EAAE,CAAC,CAAC;CACjB;AACD,SAAS,gBAAgB,CAAC,GAAG,EAAE;IAC3B,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;QAC5D,QAAQ,GAAG;YACP,CAAC;iBACI,UAAU,CAAC,CAAC,CAAC;iBACb,QAAQ,CAAC,EAAE,CAAC;iBACZ,WAAW,EAAE,EAAE;KAC3B,CAAC,CAAC;CACN;AACD,SAAS,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IACvC,KAAK;QACD,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;cAC9B,cAAc,CAAC,KAAK,CAAC;cACrB,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,EAAE;QACL,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;KAC9C;SACI;QACD,OAAO,KAAK,CAAC;KAChB;CACJ;AACD,SAAS,SAAS,CAAC,KAAK,EAAE;IACtB,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;CAChD;AACD,SAAS,aAAa,CAAC,QAAQ,EAAE;IAC7B,OAAO,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,CAAC;CACnE;AACD,SAAS,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;IACjD,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;IACtC,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE;QAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,SAAS,EAAE;YAC5B,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAC9B,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;aACtD;YACD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;SACjF;aACI;YACD,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACtB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;wBAC7C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;qBACjF,CAAC,CAAC;iBACN;qBACI;oBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;wBACpC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;4BACrB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBACnD;qBACJ,CAAC,CAAC;iBACN;aACJ;iBACI;gBACD,MAAM,GAAG,GAAG,EAAE,CAAC;gBACf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACtB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;wBAC7C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;qBAC1C,CAAC,CAAC;iBACN;qBACI;oBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;wBACpC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;4BACrB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC9B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;yBACxD;qBACJ,CAAC,CAAC;iBACN;gBACD,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;oBACzB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC5D;qBACI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC9B;aACJ;SACJ;KACJ;SACI;QACD,IAAI,QAAQ,KAAK,GAAG,EAAE;YAClB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;gBAClB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;aACtC;SACJ;aACI,IAAI,KAAK,KAAK,EAAE,KAAK,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE;YAC7D,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SAC5C;aACI,IAAI,KAAK,KAAK,EAAE,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;KACJ;IACD,OAAO,MAAM,CAAC;CACjB;AACD,AAAO,SAAS,QAAQ,CAAC,QAAQ,EAAE;IAC/B,OAAO;QACH,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;KACtC,CAAC;CACL;AACD,SAAS,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC/B,IAAI,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,OAAO,CAAC,4BAA4B,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE;QACpF,IAAI,UAAU,EAAE;YACZ,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gBAChD,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAChC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACrC;YACD,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;gBAC/C,IAAI,GAAG,GAAG,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACvE,CAAC,CAAC;YACH,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAC9B,IAAI,SAAS,GAAG,GAAG,CAAC;gBACpB,IAAI,QAAQ,KAAK,GAAG,EAAE;oBAClB,SAAS,GAAG,GAAG,CAAC;iBACnB;qBACI,IAAI,QAAQ,KAAK,GAAG,EAAE;oBACvB,SAAS,GAAG,QAAQ,CAAC;iBACxB;gBACD,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACzE;iBACI;gBACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC3B;SACJ;aACI;YACD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;SAClC;KACJ,CAAC,CAAC;CACN;;ACrKM,SAAS,KAAK,CAAC,OAAO,EAAE;;IAE3B,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;;IAE1C,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC;IACT,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,QAAQ;QACR,SAAS;QACT,KAAK;QACL,SAAS;QACT,SAAS;QACT,WAAW;KACd,CAAC,CAAC;;IAEH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACtD,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACpB,GAAG,GAAG,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC;KAC/B;IACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACzC,MAAM,CAAC,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACnD,MAAM,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,CAAC,eAAe,EAAE;QAClB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;;YAE1B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;iBAC1B,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,kDAAkD,EAAE,CAAC,oBAAoB,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iBACtI,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;QACD,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;YACnC,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;YACnF,OAAO,CAAC,MAAM,GAAG,wBAAwB;iBACpC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;iBAClC,GAAG,CAAC,OAAO,IAAI;gBAChB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM;sBACjC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;sBAC9B,OAAO,CAAC;gBACd,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;aAC/D,CAAC;iBACG,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;KACJ;;;IAGD,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAClC,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;KACtD;SACI;QACD,IAAI,MAAM,IAAI,mBAAmB,EAAE;YAC/B,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;SACnC;aACI;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;gBACzC,IAAI,GAAG,mBAAmB,CAAC;aAC9B;iBACI;gBACD,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;aACjC;SACJ;KACJ;;IAED,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QACzD,OAAO,CAAC,cAAc,CAAC,GAAG,iCAAiC,CAAC;KAC/D;;;IAGD,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QAClE,IAAI,GAAG,EAAE,CAAC;KACb;;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,IAAI,KAAK,WAAW,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;CACxJ;;AC9EM,SAAS,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;IAC3D,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;CACjD;;ACDM,SAAS,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC3B,QAAQ;QACR,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC3C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACjC,KAAK;KACR,CAAC,CAAC;CACN;;ACZM,MAAM,OAAO,GAAG,mBAAmB,CAAC;;ACE3C,MAAM,SAAS,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;;;AAGrE,AAAO,MAAM,QAAQ,GAAG;IACpB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE;QACL,MAAM,EAAE,gCAAgC;QACxC,YAAY,EAAE,SAAS;KAC1B;IACD,SAAS,EAAE;QACP,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;KACf;CACJ,CAAC;;ACdU,MAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/LICENSE.md b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/LICENSE.md
new file mode 100644
index 0000000..f105ab0
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/LICENSE.md
@@ -0,0 +1,7 @@
+# [ISC License](https://spdx.org/licenses/ISC)
+
+Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m)
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/README.md b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/README.md
new file mode 100644
index 0000000..d00d14c
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/README.md
@@ -0,0 +1,25 @@
+# universal-user-agent
+
+> Get a user agent string in both browser and node
+
+[![@latest](https://img.shields.io/npm/v/universal-user-agent.svg)](https://www.npmjs.com/package/universal-user-agent)
+[![Build Status](https://travis-ci.com/gr2m/universal-user-agent.svg?branch=master)](https://travis-ci.com/gr2m/universal-user-agent)
+[![Greenkeeper](https://badges.greenkeeper.io/gr2m/universal-user-agent.svg)](https://greenkeeper.io/)
+
+```js
+const { getUserAgent } = require("universal-user-agent");
+// or import { getUserAgent } from "universal-user-agent";
+
+const userAgent = getUserAgent();
+// userAgent will look like this
+// in browser: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0"
+// in node: Node.js/v8.9.4 (macOS High Sierra; x64)
+```
+
+## Credits
+
+The Node implementation was originally inspired by [default-user-agent](https://www.npmjs.com/package/default-user-agent).
+
+## License
+
+[ISC](LICENSE.md)
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-node/index.js b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-node/index.js
new file mode 100644
index 0000000..80a0710
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-node/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var osName = _interopDefault(require('os-name'));
+
+function getUserAgent() {
+  try {
+    return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
+  } catch (error) {
+    if (/wmic os get Caption/.test(error.message)) {
+      return "Windows <version undetectable>";
+    }
+
+    throw error;
+  }
+}
+
+exports.getUserAgent = getUserAgent;
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-node/index.js.map b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-node/index.js.map
new file mode 100644
index 0000000..aff09ec
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-node/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/node.js"],"sourcesContent":["import osName from \"os-name\";\nexport function getUserAgent() {\n    try {\n        return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;\n    }\n    catch (error) {\n        if (/wmic os get Caption/.test(error.message)) {\n            return \"Windows <version undetectable>\";\n        }\n        throw error;\n    }\n}\n"],"names":["getUserAgent","process","version","substr","osName","arch","error","test","message"],"mappings":";;;;;;;;AACO,SAASA,YAAT,GAAwB;MACvB;WACQ,WAAUC,OAAO,CAACC,OAAR,CAAgBC,MAAhB,CAAuB,CAAvB,CAA0B,KAAIC,MAAM,EAAG,KAAIH,OAAO,CAACI,IAAK,GAA1E;GADJ,CAGA,OAAOC,KAAP,EAAc;QACN,sBAAsBC,IAAtB,CAA2BD,KAAK,CAACE,OAAjC,CAAJ,EAA+C;aACpC,gCAAP;;;UAEEF,KAAN;;;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/browser.js b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/browser.js
new file mode 100644
index 0000000..6f52232
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/browser.js
@@ -0,0 +1,3 @@
+export function getUserAgent() {
+    return navigator.userAgent;
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/index.js b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/index.js
new file mode 100644
index 0000000..c6253f5
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/index.js
@@ -0,0 +1 @@
+export { getUserAgent } from "./node";
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/node.js b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/node.js
new file mode 100644
index 0000000..8b70a03
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-src/node.js
@@ -0,0 +1,12 @@
+import osName from "os-name";
+export function getUserAgent() {
+    try {
+        return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
+    }
+    catch (error) {
+        if (/wmic os get Caption/.test(error.message)) {
+            return "Windows <version undetectable>";
+        }
+        throw error;
+    }
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/browser.d.ts b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/browser.d.ts
new file mode 100644
index 0000000..a7bb1c4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/browser.d.ts
@@ -0,0 +1 @@
+export declare function getUserAgent(): string;
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/index.d.ts b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/index.d.ts
new file mode 100644
index 0000000..c6253f5
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/index.d.ts
@@ -0,0 +1 @@
+export { getUserAgent } from "./node";
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/node.d.ts b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/node.d.ts
new file mode 100644
index 0000000..a7bb1c4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-types/node.d.ts
@@ -0,0 +1 @@
+export declare function getUserAgent(): string;
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-web/index.js b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-web/index.js
new file mode 100644
index 0000000..11ec79b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-web/index.js
@@ -0,0 +1,6 @@
+function getUserAgent() {
+    return navigator.userAgent;
+}
+
+export { getUserAgent };
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-web/index.js.map b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-web/index.js.map
new file mode 100644
index 0000000..549407e
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/dist-web/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/browser.js"],"sourcesContent":["export function getUserAgent() {\n    return navigator.userAgent;\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,GAAG;IAC3B,OAAO,SAAS,CAAC,SAAS,CAAC;CAC9B;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/package.json b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/package.json
new file mode 100644
index 0000000..c08b731
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent/package.json
@@ -0,0 +1,65 @@
+{
+  "_from": "universal-user-agent@^4.0.0",
+  "_id": "universal-user-agent@4.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==",
+  "_location": "/@octokit/endpoint/universal-user-agent",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "universal-user-agent@^4.0.0",
+    "name": "universal-user-agent",
+    "escapedName": "universal-user-agent",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/endpoint"
+  ],
+  "_resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz",
+  "_shasum": "27da2ec87e32769619f68a14996465ea1cb9df16",
+  "_spec": "universal-user-agent@^4.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/endpoint",
+  "bugs": {
+    "url": "https://github.com/gr2m/universal-user-agent/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "os-name": "^3.1.0"
+  },
+  "deprecated": false,
+  "description": "Get a user agent string in both browser and node",
+  "devDependencies": {
+    "@gr2m/pika-plugin-build-web": "^0.6.0-issue-84.1",
+    "@pika/pack": "^0.5.0",
+    "@pika/plugin-build-node": "^0.6.0",
+    "@pika/plugin-ts-standard-pkg": "^0.6.0",
+    "@types/jest": "^24.0.18",
+    "jest": "^24.9.0",
+    "prettier": "^1.18.2",
+    "semantic-release": "^15.9.15",
+    "ts-jest": "^24.0.2",
+    "typescript": "^3.6.2"
+  },
+  "files": [
+    "dist-*/",
+    "bin/"
+  ],
+  "homepage": "https://github.com/gr2m/universal-user-agent#readme",
+  "keywords": [],
+  "license": "ISC",
+  "main": "dist-node/index.js",
+  "module": "dist-web/index.js",
+  "name": "universal-user-agent",
+  "pika": true,
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gr2m/universal-user-agent.git"
+  },
+  "sideEffects": false,
+  "source": "dist-src/index.js",
+  "types": "dist-types/index.d.ts",
+  "version": "4.0.0"
+}
diff --git a/setup-maven/node_modules/@octokit/endpoint/package.json b/setup-maven/node_modules/@octokit/endpoint/package.json
new file mode 100644
index 0000000..8470212
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/endpoint/package.json
@@ -0,0 +1,79 @@
+{
+  "_from": "@octokit/endpoint@^5.5.0",
+  "_id": "@octokit/endpoint@5.5.1",
+  "_inBundle": false,
+  "_integrity": "sha512-nBFhRUb5YzVTCX/iAK1MgQ4uWo89Gu0TH00qQHoYRCsE12dWcG1OiLd7v2EIo2+tpUKPMOQ62QFy9hy9Vg2ULg==",
+  "_location": "/@octokit/endpoint",
+  "_phantomChildren": {
+    "os-name": "3.1.0"
+  },
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@octokit/endpoint@^5.5.0",
+    "name": "@octokit/endpoint",
+    "escapedName": "@octokit%2fendpoint",
+    "scope": "@octokit",
+    "rawSpec": "^5.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^5.5.0"
+  },
+  "_requiredBy": [
+    "/@octokit/request"
+  ],
+  "_resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.1.tgz",
+  "_shasum": "2eea81e110ca754ff2de11c79154ccab4ae16b3f",
+  "_spec": "@octokit/endpoint@^5.5.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "bugs": {
+    "url": "https://github.com/octokit/endpoint.js/issues"
+  },
+  "bundleDependencies": false,
+  "deno": "dist-web/index.js",
+  "dependencies": {
+    "@octokit/types": "^2.0.0",
+    "is-plain-object": "^3.0.0",
+    "universal-user-agent": "^4.0.0"
+  },
+  "deprecated": false,
+  "description": "Turns REST API endpoints into generic request options",
+  "devDependencies": {
+    "@pika/pack": "^0.5.0",
+    "@pika/plugin-build-node": "^0.7.0",
+    "@pika/plugin-build-web": "^0.7.0",
+    "@pika/plugin-ts-standard-pkg": "^0.7.0",
+    "@types/jest": "^24.0.11",
+    "jest": "^24.7.1",
+    "prettier": "1.18.2",
+    "semantic-release": "^15.13.8",
+    "semantic-release-plugin-update-version-in-files": "^1.0.0",
+    "ts-jest": "^24.0.2",
+    "typescript": "^3.4.5"
+  },
+  "files": [
+    "dist-*/",
+    "bin/"
+  ],
+  "homepage": "https://github.com/octokit/endpoint.js#readme",
+  "keywords": [
+    "octokit",
+    "github",
+    "api",
+    "rest"
+  ],
+  "license": "MIT",
+  "main": "dist-node/index.js",
+  "name": "@octokit/endpoint",
+  "pika": true,
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/octokit/endpoint.js.git"
+  },
+  "sideEffects": false,
+  "source": "dist-src/index.js",
+  "types": "dist-types/index.d.ts",
+  "version": "5.5.1"
+}
diff --git a/setup-maven/node_modules/@octokit/graphql/LICENSE b/setup-maven/node_modules/@octokit/graphql/LICENSE
new file mode 100644
index 0000000..af5366d
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/graphql/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2018 Octokit contributors
+
+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/setup-maven/node_modules/@octokit/graphql/README.md b/setup-maven/node_modules/@octokit/graphql/README.md
new file mode 100644
index 0000000..4e44592
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/graphql/README.md
@@ -0,0 +1,292 @@
+# graphql.js
+
+> GitHub GraphQL API client for browsers and Node
+
+[![@latest](https://img.shields.io/npm/v/@octokit/graphql.svg)](https://www.npmjs.com/package/@octokit/graphql)
+[![Build Status](https://travis-ci.com/octokit/graphql.js.svg?branch=master)](https://travis-ci.com/octokit/graphql.js)
+[![Coverage Status](https://coveralls.io/repos/github/octokit/graphql.js/badge.svg)](https://coveralls.io/github/octokit/graphql.js)
+[![Greenkeeper](https://badges.greenkeeper.io/octokit/graphql.js.svg)](https://greenkeeper.io/)
+
+<!-- toc -->
+
+- [Usage](#usage)
+- [Errors](#errors)
+- [Writing tests](#writing-tests)
+- [License](#license)
+
+<!-- tocstop -->
+
+## Usage
+
+Send a simple query
+
+```js
+const graphql = require('@octokit/graphql')
+const { repository } = await graphql(`{
+  repository(owner:"octokit", name:"graphql.js") {
+    issues(last:3) {
+      edges {
+        node {
+          title
+        }
+      }
+    }
+  }
+}`, {
+  headers: {
+    authorization: `token secret123`
+  }
+})
+```
+
+⚠️ Do not use [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) in the query strings as they make your code vulnerable to query injection attacks (see [#2](https://github.com/octokit/graphql.js/issues/2)). Use variables instead:
+
+```js
+const graphql = require('@octokit/graphql')
+const { lastIssues } = await graphql(`query lastIssues($owner: String!, $repo: String!, $num: Int = 3) {
+    repository(owner:$owner, name:$repo) {
+      issues(last:$num) {
+        edges {
+          node {
+            title
+          }
+        }
+      }
+    }
+  }`, {
+    owner: 'octokit',
+    repo: 'graphql.js'
+    headers: {
+      authorization: `token secret123`
+    }
+  }
+})
+```
+
+Create two new clients and set separate default configs for them.
+
+```js
+const graphql1 = require('@octokit/graphql').defaults({
+  headers: {
+    authorization: `token secret123`
+  }
+})
+
+const graphql2 = require('@octokit/graphql').defaults({
+  headers: {
+    authorization: `token foobar`
+  }
+})
+```
+
+Create two clients, the second inherits config from the first.
+
+```js
+const graphql1 = require('@octokit/graphql').defaults({
+  headers: {
+    authorization: `token secret123`
+  }
+})
+
+const graphql2 = graphql1.defaults({
+  headers: {
+    'user-agent': 'my-user-agent/v1.2.3'
+  }
+})
+```
+
+Create a new client with default options and run query
+
+```js
+const graphql = require('@octokit/graphql').defaults({
+  headers: {
+    authorization: `token secret123`
+  }
+})
+const { repository } = await graphql(`{
+  repository(owner:"octokit", name:"graphql.js") {
+    issues(last:3) {
+      edges {
+        node {
+          title
+        }
+      }
+    }
+  }
+}`)
+```
+
+Pass query together with headers and variables
+
+```js
+const graphql = require('@octokit/graphql')
+const { lastIssues } = await graphql({
+  query: `query lastIssues($owner: String!, $repo: String!, $num: Int = 3) {
+    repository(owner:$owner, name:$repo) {
+      issues(last:$num) {
+        edges {
+          node {
+            title
+          }
+        }
+      }
+    }
+  }`,
+  owner: 'octokit',
+  repo: 'graphql.js'
+  headers: {
+    authorization: `token secret123`
+  }
+})
+```
+
+Use with GitHub Enterprise
+
+```js
+const graphql = require('@octokit/graphql').defaults({
+  baseUrl: 'https://github-enterprise.acme-inc.com/api',
+  headers: {
+    authorization: `token secret123`
+  }
+})
+const { repository } = await graphql(`{
+  repository(owner:"acme-project", name:"acme-repo") {
+    issues(last:3) {
+      edges {
+        node {
+          title
+        }
+      }
+    }
+  }
+}`)
+```
+
+## Errors
+
+In case of a GraphQL error, `error.message` is set to the first error from the response’s `errors` array. All errors can be accessed at `error.errors`. `error.request` has the request options such as query, variables and headers set for easier debugging.
+
+```js
+const graphql = require('@octokit/graphql').defaults({
+  headers: {
+    authorization: `token secret123`
+  }
+})
+const query = `{
+  viewer {
+    bioHtml
+  }
+}`
+
+try {
+  const result = await graphql(query)
+} catch (error) {
+  // server responds with
+  // {
+  // 	"data": null,
+  // 	"errors": [{
+  // 		"message": "Field 'bioHtml' doesn't exist on type 'User'",
+  // 		"locations": [{
+  // 			"line": 3,
+  // 			"column": 5
+  // 		}]
+  // 	}]
+  // }
+
+  console.log('Request failed:', error.request) // { query, variables: {}, headers: { authorization: 'token secret123' } }
+  console.log(error.message) // Field 'bioHtml' doesn't exist on type 'User'
+}
+```
+
+## Partial responses
+
+A GraphQL query may respond with partial data accompanied by errors. In this case we will throw an error but the partial data will still be accessible through `error.data`
+
+```js
+const graphql = require('@octokit/graphql').defaults({
+  headers: {
+    authorization: `token secret123`
+  }
+})
+const query = `{
+  repository(name: "probot", owner: "probot") {
+    name
+    ref(qualifiedName: "master") {
+      target {
+        ... on Commit {
+          history(first: 25, after: "invalid cursor") {
+            nodes {
+              message
+            }
+          }
+        }
+      }
+    }
+  }
+}`
+
+try {
+  const result = await graphql(query)
+} catch (error) {
+  // server responds with
+  // { 
+  //   "data": { 
+  //     "repository": { 
+  //       "name": "probot", 
+  //       "ref": null 
+  //     } 
+  //   }, 
+  //   "errors": [ 
+  //     { 
+  //       "type": "INVALID_CURSOR_ARGUMENTS", 
+  //       "path": [ 
+  //         "repository", 
+  //         "ref", 
+  //         "target", 
+  //         "history" 
+  //       ], 
+  //       "locations": [ 
+  //         { 
+  //           "line": 7, 
+  //           "column": 11 
+  //         } 
+  //       ], 
+  //       "message": "`invalid cursor` does not appear to be a valid cursor." 
+  //     } 
+  //   ] 
+  // } 
+
+  console.log('Request failed:', error.request) // { query, variables: {}, headers: { authorization: 'token secret123' } }
+  console.log(error.message) // `invalid cursor` does not appear to be a valid cursor.
+  console.log(error.data) // { repository: { name: 'probot', ref: null } }
+}
+```
+
+## Writing tests
+
+You can pass a replacement for [the built-in fetch implementation](https://github.com/bitinn/node-fetch) as `request.fetch` option. For example, using [fetch-mock](http://www.wheresrhys.co.uk/fetch-mock/) works great to write tests
+
+```js
+const assert = require('assert')
+const fetchMock = require('fetch-mock/es5/server')
+
+const graphql = require('@octokit/graphql')
+
+graphql('{ viewer { login } }', {
+  headers: {
+    authorization: 'token secret123'
+  },
+  request: {
+    fetch: fetchMock.sandbox()
+      .post('https://api.github.com/graphql', (url, options) => {
+        assert.strictEqual(options.headers.authorization, 'token secret123')
+        assert.strictEqual(options.body, '{"query":"{ viewer { login } }"}', 'Sends correct query')
+        return { data: {} }
+      })
+  }
+})
+```
+
+## License
+
+[MIT](LICENSE)
diff --git a/setup-maven/node_modules/@octokit/graphql/index.js b/setup-maven/node_modules/@octokit/graphql/index.js
new file mode 100644
index 0000000..7f8278c
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/graphql/index.js
@@ -0,0 +1,15 @@
+const { request } = require('@octokit/request')
+const getUserAgent = require('universal-user-agent')
+
+const version = require('./package.json').version
+const userAgent = `octokit-graphql.js/${version} ${getUserAgent()}`
+
+const withDefaults = require('./lib/with-defaults')
+
+module.exports = withDefaults(request, {
+  method: 'POST',
+  url: '/graphql',
+  headers: {
+    'user-agent': userAgent
+  }
+})
diff --git a/setup-maven/node_modules/@octokit/graphql/lib/error.js b/setup-maven/node_modules/@octokit/graphql/lib/error.js
new file mode 100644
index 0000000..4478abd
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/graphql/lib/error.js
@@ -0,0 +1,16 @@
+module.exports = class GraphqlError extends Error {
+  constructor (request, response) {
+    const message = response.data.errors[0].message
+    super(message)
+
+    Object.assign(this, response.data)
+    this.name = 'GraphqlError'
+    this.request = request
+
+    // Maintains proper stack trace (only available on V8)
+    /* istanbul ignore next */
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, this.constructor)
+    }
+  }
+}
diff --git a/setup-maven/node_modules/@octokit/graphql/lib/graphql.js b/setup-maven/node_modules/@octokit/graphql/lib/graphql.js
new file mode 100644
index 0000000..4a5b211
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/graphql/lib/graphql.js
@@ -0,0 +1,36 @@
+module.exports = graphql
+
+const GraphqlError = require('./error')
+
+const NON_VARIABLE_OPTIONS = ['method', 'baseUrl', 'url', 'headers', 'request', 'query']
+
+function graphql (request, query, options) {
+  if (typeof query === 'string') {
+    options = Object.assign({ query }, options)
+  } else {
+    options = query
+  }
+
+  const requestOptions = Object.keys(options).reduce((result, key) => {
+    if (NON_VARIABLE_OPTIONS.includes(key)) {
+      result[key] = options[key]
+      return result
+    }
+
+    if (!result.variables) {
+      result.variables = {}
+    }
+
+    result.variables[key] = options[key]
+    return result
+  }, {})
+
+  return request(requestOptions)
+    .then(response => {
+      if (response.data.errors) {
+        throw new GraphqlError(requestOptions, response)
+      }
+
+      return response.data.data
+    })
+}
diff --git a/setup-maven/node_modules/@octokit/graphql/lib/with-defaults.js b/setup-maven/node_modules/@octokit/graphql/lib/with-defaults.js
new file mode 100644
index 0000000..a5b1493
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/graphql/lib/with-defaults.js
@@ -0,0 +1,13 @@
+module.exports = withDefaults
+
+const graphql = require('./graphql')
+
+function withDefaults (request, newDefaults) {
+  const newRequest = request.defaults(newDefaults)
+  const newApi = function (query, options) {
+    return graphql(newRequest, query, options)
+  }
+
+  newApi.defaults = withDefaults.bind(null, newRequest)
+  return newApi
+}
diff --git a/setup-maven/node_modules/@octokit/graphql/package.json b/setup-maven/node_modules/@octokit/graphql/package.json
new file mode 100644
index 0000000..04e8ecf
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/graphql/package.json
@@ -0,0 +1,119 @@
+{
+  "_from": "@octokit/graphql@^2.0.1",
+  "_id": "@octokit/graphql@2.1.3",
+  "_inBundle": false,
+  "_integrity": "sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==",
+  "_location": "/@octokit/graphql",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@octokit/graphql@^2.0.1",
+    "name": "@octokit/graphql",
+    "escapedName": "@octokit%2fgraphql",
+    "scope": "@octokit",
+    "rawSpec": "^2.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.1"
+  },
+  "_requiredBy": [
+    "/@actions/github"
+  ],
+  "_resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz",
+  "_shasum": "60c058a0ed5fa242eca6f938908d95fd1a2f4b92",
+  "_spec": "@octokit/graphql@^2.0.1",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@actions/github",
+  "author": {
+    "name": "Gregor Martynus",
+    "url": "https://github.com/gr2m"
+  },
+  "bugs": {
+    "url": "https://github.com/octokit/graphql.js/issues"
+  },
+  "bundleDependencies": false,
+  "bundlesize": [
+    {
+      "path": "./dist/octokit-graphql.min.js.gz",
+      "maxSize": "5KB"
+    }
+  ],
+  "dependencies": {
+    "@octokit/request": "^5.0.0",
+    "universal-user-agent": "^2.0.3"
+  },
+  "deprecated": false,
+  "description": "GitHub GraphQL API client for browsers and Node",
+  "devDependencies": {
+    "chai": "^4.2.0",
+    "compression-webpack-plugin": "^2.0.0",
+    "coveralls": "^3.0.3",
+    "cypress": "^3.1.5",
+    "fetch-mock": "^7.3.1",
+    "mkdirp": "^0.5.1",
+    "mocha": "^6.0.0",
+    "npm-run-all": "^4.1.3",
+    "nyc": "^14.0.0",
+    "semantic-release": "^15.13.3",
+    "simple-mock": "^0.8.0",
+    "standard": "^12.0.1",
+    "webpack": "^4.29.6",
+    "webpack-bundle-analyzer": "^3.1.0",
+    "webpack-cli": "^3.2.3"
+  },
+  "files": [
+    "lib"
+  ],
+  "homepage": "https://github.com/octokit/graphql.js#readme",
+  "keywords": [
+    "octokit",
+    "github",
+    "api",
+    "graphql"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "@octokit/graphql",
+  "publishConfig": {
+    "access": "public"
+  },
+  "release": {
+    "publish": [
+      "@semantic-release/npm",
+      {
+        "path": "@semantic-release/github",
+        "assets": [
+          "dist/*",
+          "!dist/*.map.gz"
+        ]
+      }
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/octokit/graphql.js.git"
+  },
+  "scripts": {
+    "build": "npm-run-all build:*",
+    "build:development": "webpack --mode development --entry . --output-library=octokitGraphql --output=./dist/octokit-graphql.js --profile --json > dist/bundle-stats.json",
+    "build:production": "webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=octokitGraphql --output-path=./dist --output-filename=octokit-graphql.min.js --devtool source-map",
+    "bundle-report": "webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html",
+    "coverage": "nyc report --reporter=html && open coverage/index.html",
+    "coverage:upload": "nyc report --reporter=text-lcov | coveralls",
+    "prebuild": "mkdirp dist/",
+    "pretest": "standard",
+    "test": "nyc mocha test/*-test.js",
+    "test:browser": "cypress run --browser chrome"
+  },
+  "standard": {
+    "globals": [
+      "describe",
+      "before",
+      "beforeEach",
+      "afterEach",
+      "after",
+      "it",
+      "expect"
+    ]
+  },
+  "version": "2.1.3"
+}
diff --git a/setup-maven/node_modules/@octokit/request-error/LICENSE b/setup-maven/node_modules/@octokit/request-error/LICENSE
new file mode 100644
index 0000000..ef2c18e
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2019 Octokit contributors
+
+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/setup-maven/node_modules/@octokit/request-error/README.md b/setup-maven/node_modules/@octokit/request-error/README.md
new file mode 100644
index 0000000..bcb711d
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/README.md
@@ -0,0 +1,68 @@
+# http-error.js
+
+> Error class for Octokit request errors
+
+[![@latest](https://img.shields.io/npm/v/@octokit/request-error.svg)](https://www.npmjs.com/package/@octokit/request-error)
+[![Build Status](https://travis-ci.com/octokit/request-error.js.svg?branch=master)](https://travis-ci.com/octokit/request-error.js)
+[![Greenkeeper](https://badges.greenkeeper.io/octokit/request-error.js.svg)](https://greenkeeper.io/)
+
+## Usage
+
+<table>
+<tbody valign=top align=left>
+<tr><th>
+Browsers
+</th><td width=100%>
+Load <code>@octokit/request-error</code> directly from <a href="https://cdn.pika.dev">cdn.pika.dev</a>
+        
+```html
+<script type="module">
+import { RequestError } from "https://cdn.pika.dev/@octokit/request-error";
+</script>
+```
+
+</td></tr>
+<tr><th>
+Node
+</th><td>
+
+Install with <code>npm install @octokit/request-error</code>
+
+```js
+const { RequestError } = require("@octokit/request-error");
+// or: import { RequestError } from "@octokit/request-error";
+```
+
+</td></tr>
+</tbody>
+</table>
+
+```js
+const error = new RequestError("Oops", 500, {
+  headers: {
+    "x-github-request-id": "1:2:3:4"
+  }, // response headers
+  request: {
+    method: "POST",
+    url: "https://api.github.com/foo",
+    body: {
+      bar: "baz"
+    },
+    headers: {
+      authorization: "token secret123"
+    }
+  }
+});
+
+error.message; // Oops
+error.status; // 500
+error.headers; // { 'x-github-request-id': '1:2:3:4' }
+error.request.method; // POST
+error.request.url; // https://api.github.com/foo
+error.request.body; // { bar: 'baz' }
+error.request.headers; // { authorization: 'token [REDACTED]' }
+```
+
+## LICENSE
+
+[MIT](LICENSE)
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-node/index.js b/setup-maven/node_modules/@octokit/request-error/dist-node/index.js
new file mode 100644
index 0000000..95b9c57
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-node/index.js
@@ -0,0 +1,55 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var deprecation = require('deprecation');
+var once = _interopDefault(require('once'));
+
+const logOnce = once(deprecation => console.warn(deprecation));
+/**
+ * Error with extra properties to help with debugging
+ */
+
+class RequestError extends Error {
+  constructor(message, statusCode, options) {
+    super(message); // Maintains proper stack trace (only available on V8)
+
+    /* istanbul ignore next */
+
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, this.constructor);
+    }
+
+    this.name = "HttpError";
+    this.status = statusCode;
+    Object.defineProperty(this, "code", {
+      get() {
+        logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
+        return statusCode;
+      }
+
+    });
+    this.headers = options.headers || {}; // redact request credentials without mutating original request options
+
+    const requestCopy = Object.assign({}, options.request);
+
+    if (options.request.headers.authorization) {
+      requestCopy.headers = Object.assign({}, options.request.headers, {
+        authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
+      });
+    }
+
+    requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
+    // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
+    .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
+    // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
+    .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
+    this.request = requestCopy;
+  }
+
+}
+
+exports.RequestError = RequestError;
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-node/index.js.map b/setup-maven/node_modules/@octokit/request-error/dist-node/index.js.map
new file mode 100644
index 0000000..ec1c6db
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-node/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/index.js"],"sourcesContent":["import { Deprecation } from \"deprecation\";\nimport once from \"once\";\nconst logOnce = once((deprecation) => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\nexport class RequestError extends Error {\n    constructor(message, statusCode, options) {\n        super(message);\n        // Maintains proper stack trace (only available on V8)\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        }\n        this.name = \"HttpError\";\n        this.status = statusCode;\n        Object.defineProperty(this, \"code\", {\n            get() {\n                logOnce(new Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n                return statusCode;\n            }\n        });\n        this.headers = options.headers || {};\n        // redact request credentials without mutating original request options\n        const requestCopy = Object.assign({}, options.request);\n        if (options.request.headers.authorization) {\n            requestCopy.headers = Object.assign({}, options.request.headers, {\n                authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n            });\n        }\n        requestCopy.url = requestCopy.url\n            // client_id & client_secret can be passed as URL query parameters to increase rate limit\n            // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n            .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\")\n            // OAuth tokens can be passed as URL query parameters, although it is not recommended\n            // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n            .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n        this.request = requestCopy;\n    }\n}\n"],"names":["logOnce","once","deprecation","console","warn","RequestError","Error","constructor","message","statusCode","options","captureStackTrace","name","status","Object","defineProperty","get","Deprecation","headers","requestCopy","assign","request","authorization","replace","url"],"mappings":";;;;;;;;;AAEA,MAAMA,OAAO,GAAGC,IAAI,CAAEC,WAAD,IAAiBC,OAAO,CAACC,IAAR,CAAaF,WAAb,CAAlB,CAApB;;;;;AAIA,AAAO,MAAMG,YAAN,SAA2BC,KAA3B,CAAiC;EACpCC,WAAW,CAACC,OAAD,EAAUC,UAAV,EAAsBC,OAAtB,EAA+B;UAChCF,OAAN,EADsC;;;;QAIlCF,KAAK,CAACK,iBAAV,EAA6B;MACzBL,KAAK,CAACK,iBAAN,CAAwB,IAAxB,EAA8B,KAAKJ,WAAnC;;;SAECK,IAAL,GAAY,WAAZ;SACKC,MAAL,GAAcJ,UAAd;IACAK,MAAM,CAACC,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;MAChCC,GAAG,GAAG;QACFhB,OAAO,CAAC,IAAIiB,uBAAJ,CAAgB,0EAAhB,CAAD,CAAP;eACOR,UAAP;;;KAHR;SAMKS,OAAL,GAAeR,OAAO,CAACQ,OAAR,IAAmB,EAAlC,CAfsC;;UAiBhCC,WAAW,GAAGL,MAAM,CAACM,MAAP,CAAc,EAAd,EAAkBV,OAAO,CAACW,OAA1B,CAApB;;QACIX,OAAO,CAACW,OAAR,CAAgBH,OAAhB,CAAwBI,aAA5B,EAA2C;MACvCH,WAAW,CAACD,OAAZ,GAAsBJ,MAAM,CAACM,MAAP,CAAc,EAAd,EAAkBV,OAAO,CAACW,OAAR,CAAgBH,OAAlC,EAA2C;QAC7DI,aAAa,EAAEZ,OAAO,CAACW,OAAR,CAAgBH,OAAhB,CAAwBI,aAAxB,CAAsCC,OAAtC,CAA8C,MAA9C,EAAsD,aAAtD;OADG,CAAtB;;;IAIJJ,WAAW,CAACK,GAAZ,GAAkBL,WAAW,CAACK,GAAZ;;KAGbD,OAHa,CAGL,sBAHK,EAGmB,0BAHnB;;KAMbA,OANa,CAML,qBANK,EAMkB,yBANlB,CAAlB;SAOKF,OAAL,GAAeF,WAAf;;;;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-src/index.js b/setup-maven/node_modules/@octokit/request-error/dist-src/index.js
new file mode 100644
index 0000000..cfcb7c4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-src/index.js
@@ -0,0 +1,40 @@
+import { Deprecation } from "deprecation";
+import once from "once";
+const logOnce = once((deprecation) => console.warn(deprecation));
+/**
+ * Error with extra properties to help with debugging
+ */
+export class RequestError extends Error {
+    constructor(message, statusCode, options) {
+        super(message);
+        // Maintains proper stack trace (only available on V8)
+        /* istanbul ignore next */
+        if (Error.captureStackTrace) {
+            Error.captureStackTrace(this, this.constructor);
+        }
+        this.name = "HttpError";
+        this.status = statusCode;
+        Object.defineProperty(this, "code", {
+            get() {
+                logOnce(new Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
+                return statusCode;
+            }
+        });
+        this.headers = options.headers || {};
+        // redact request credentials without mutating original request options
+        const requestCopy = Object.assign({}, options.request);
+        if (options.request.headers.authorization) {
+            requestCopy.headers = Object.assign({}, options.request.headers, {
+                authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
+            });
+        }
+        requestCopy.url = requestCopy.url
+            // client_id & client_secret can be passed as URL query parameters to increase rate limit
+            // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
+            .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]")
+            // OAuth tokens can be passed as URL query parameters, although it is not recommended
+            // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
+            .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
+        this.request = requestCopy;
+    }
+}
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-src/types.js b/setup-maven/node_modules/@octokit/request-error/dist-src/types.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-src/types.js
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-types/index.d.ts b/setup-maven/node_modules/@octokit/request-error/dist-types/index.d.ts
new file mode 100644
index 0000000..baa8a0e
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-types/index.d.ts
@@ -0,0 +1,27 @@
+import { RequestOptions, ResponseHeaders } from "@octokit/types";
+import { RequestErrorOptions } from "./types";
+/**
+ * Error with extra properties to help with debugging
+ */
+export declare class RequestError extends Error {
+    name: "HttpError";
+    /**
+     * http status code
+     */
+    status: number;
+    /**
+     * http status code
+     *
+     * @deprecated `error.code` is deprecated in favor of `error.status`
+     */
+    code: number;
+    /**
+     * error response headers
+     */
+    headers: ResponseHeaders;
+    /**
+     * Request options that lead to the error.
+     */
+    request: RequestOptions;
+    constructor(message: string, statusCode: number, options: RequestErrorOptions);
+}
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-types/types.d.ts b/setup-maven/node_modules/@octokit/request-error/dist-types/types.d.ts
new file mode 100644
index 0000000..865d213
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-types/types.d.ts
@@ -0,0 +1,5 @@
+import { RequestOptions, ResponseHeaders } from "@octokit/types";
+export declare type RequestErrorOptions = {
+    headers?: ResponseHeaders;
+    request: RequestOptions;
+};
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-web/index.js b/setup-maven/node_modules/@octokit/request-error/dist-web/index.js
new file mode 100644
index 0000000..32b45a3
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-web/index.js
@@ -0,0 +1,44 @@
+import { Deprecation } from 'deprecation';
+import once from 'once';
+
+const logOnce = once((deprecation) => console.warn(deprecation));
+/**
+ * Error with extra properties to help with debugging
+ */
+class RequestError extends Error {
+    constructor(message, statusCode, options) {
+        super(message);
+        // Maintains proper stack trace (only available on V8)
+        /* istanbul ignore next */
+        if (Error.captureStackTrace) {
+            Error.captureStackTrace(this, this.constructor);
+        }
+        this.name = "HttpError";
+        this.status = statusCode;
+        Object.defineProperty(this, "code", {
+            get() {
+                logOnce(new Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
+                return statusCode;
+            }
+        });
+        this.headers = options.headers || {};
+        // redact request credentials without mutating original request options
+        const requestCopy = Object.assign({}, options.request);
+        if (options.request.headers.authorization) {
+            requestCopy.headers = Object.assign({}, options.request.headers, {
+                authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
+            });
+        }
+        requestCopy.url = requestCopy.url
+            // client_id & client_secret can be passed as URL query parameters to increase rate limit
+            // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
+            .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]")
+            // OAuth tokens can be passed as URL query parameters, although it is not recommended
+            // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
+            .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
+        this.request = requestCopy;
+    }
+}
+
+export { RequestError };
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/request-error/dist-web/index.js.map b/setup-maven/node_modules/@octokit/request-error/dist-web/index.js.map
new file mode 100644
index 0000000..05151b0
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/dist-web/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/index.js"],"sourcesContent":["import { Deprecation } from \"deprecation\";\nimport once from \"once\";\nconst logOnce = once((deprecation) => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\nexport class RequestError extends Error {\n    constructor(message, statusCode, options) {\n        super(message);\n        // Maintains proper stack trace (only available on V8)\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        }\n        this.name = \"HttpError\";\n        this.status = statusCode;\n        Object.defineProperty(this, \"code\", {\n            get() {\n                logOnce(new Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n                return statusCode;\n            }\n        });\n        this.headers = options.headers || {};\n        // redact request credentials without mutating original request options\n        const requestCopy = Object.assign({}, options.request);\n        if (options.request.headers.authorization) {\n            requestCopy.headers = Object.assign({}, options.request.headers, {\n                authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n            });\n        }\n        requestCopy.url = requestCopy.url\n            // client_id & client_secret can be passed as URL query parameters to increase rate limit\n            // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n            .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\")\n            // OAuth tokens can be passed as URL query parameters, although it is not recommended\n            // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n            .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n        this.request = requestCopy;\n    }\n}\n"],"names":[],"mappings":";;;AAEA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;;;;AAIjE,AAAO,MAAM,YAAY,SAAS,KAAK,CAAC;IACpC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;;;QAGf,IAAI,KAAK,CAAC,iBAAiB,EAAE;YACzB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SACnD;QACD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;YAChC,GAAG,GAAG;gBACF,OAAO,CAAC,IAAI,WAAW,CAAC,0EAA0E,CAAC,CAAC,CAAC;gBACrG,OAAO,UAAU,CAAC;aACrB;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;;QAErC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;YACvC,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE;gBAC7D,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC;aACtF,CAAC,CAAC;SACN;QACD,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG;;;aAG5B,OAAO,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;;;aAG3D,OAAO,CAAC,qBAAqB,EAAE,yBAAyB,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;KAC9B;CACJ;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/request-error/package.json b/setup-maven/node_modules/@octokit/request-error/package.json
new file mode 100644
index 0000000..75a566b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request-error/package.json
@@ -0,0 +1,81 @@
+{
+  "_from": "@octokit/request-error@^1.0.1",
+  "_id": "@octokit/request-error@1.2.0",
+  "_inBundle": false,
+  "_integrity": "sha512-DNBhROBYjjV/I9n7A8kVkmQNkqFAMem90dSxqvPq57e2hBr7mNTX98y3R2zDpqMQHVRpBDjsvsfIGgBzy+4PAg==",
+  "_location": "/@octokit/request-error",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@octokit/request-error@^1.0.1",
+    "name": "@octokit/request-error",
+    "escapedName": "@octokit%2frequest-error",
+    "scope": "@octokit",
+    "rawSpec": "^1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.1"
+  },
+  "_requiredBy": [
+    "/@octokit/request",
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.0.tgz",
+  "_shasum": "a64d2a9d7a13555570cd79722de4a4d76371baaa",
+  "_spec": "@octokit/request-error@^1.0.1",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "bugs": {
+    "url": "https://github.com/octokit/request-error.js/issues"
+  },
+  "bundleDependencies": false,
+  "deno": "dist-web/index.js",
+  "dependencies": {
+    "@octokit/types": "^2.0.0",
+    "deprecation": "^2.0.0",
+    "once": "^1.4.0"
+  },
+  "deprecated": false,
+  "description": "Error class for Octokit request errors",
+  "devDependencies": {
+    "@pika/pack": "^0.5.0",
+    "@pika/plugin-build-node": "^0.7.0",
+    "@pika/plugin-build-web": "^0.7.0",
+    "@pika/plugin-bundle-web": "^0.7.0",
+    "@pika/plugin-ts-standard-pkg": "^0.7.0",
+    "@types/jest": "^24.0.12",
+    "@types/node": "^12.0.2",
+    "@types/once": "^1.4.0",
+    "jest": "^24.7.1",
+    "pika-plugin-unpkg-field": "^1.1.0",
+    "prettier": "^1.17.0",
+    "semantic-release": "^15.10.5",
+    "ts-jest": "^24.0.2",
+    "typescript": "^3.4.5"
+  },
+  "files": [
+    "dist-*/",
+    "bin/"
+  ],
+  "homepage": "https://github.com/octokit/request-error.js#readme",
+  "keywords": [
+    "octokit",
+    "github",
+    "api",
+    "error"
+  ],
+  "license": "MIT",
+  "main": "dist-node/index.js",
+  "name": "@octokit/request-error",
+  "pika": true,
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/octokit/request-error.js.git"
+  },
+  "sideEffects": false,
+  "source": "dist-src/index.js",
+  "types": "dist-types/index.d.ts",
+  "version": "1.2.0"
+}
diff --git a/setup-maven/node_modules/@octokit/request/LICENSE b/setup-maven/node_modules/@octokit/request/LICENSE
new file mode 100644
index 0000000..af5366d
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2018 Octokit contributors
+
+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/setup-maven/node_modules/@octokit/request/README.md b/setup-maven/node_modules/@octokit/request/README.md
new file mode 100644
index 0000000..db35e62
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/README.md
@@ -0,0 +1,539 @@
+# request.js
+
+> Send parameterized requests to GitHub’s APIs with sensible defaults in browsers and Node
+
+[![@latest](https://img.shields.io/npm/v/@octokit/request.svg)](https://www.npmjs.com/package/@octokit/request)
+[![Build Status](https://travis-ci.org/octokit/request.js.svg?branch=master)](https://travis-ci.org/octokit/request.js)
+[![Greenkeeper](https://badges.greenkeeper.io/octokit/request.js.svg)](https://greenkeeper.io/)
+
+`@octokit/request` is a request library for browsers & node that makes it easier
+to interact with [GitHub’s REST API](https://developer.github.com/v3/) and
+[GitHub’s GraphQL API](https://developer.github.com/v4/guides/forming-calls/#the-graphql-endpoint).
+
+It uses [`@octokit/endpoint`](https://github.com/octokit/endpoint.js) to parse
+the passed options and sends the request using [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
+([node-fetch](https://github.com/bitinn/node-fetch) in Node).
+
+<!-- update table of contents by running `npx markdown-toc README.md -i` -->
+
+<!-- toc -->
+
+- [Features](#features)
+- [Usage](#usage)
+  - [REST API example](#rest-api-example)
+  - [GraphQL example](#graphql-example)
+  - [Alternative: pass `method` & `url` as part of options](#alternative-pass-method--url-as-part-of-options)
+- [Authentication](#authentication)
+- [request()](#request)
+- [`request.defaults()`](#requestdefaults)
+- [`request.endpoint`](#requestendpoint)
+- [Special cases](#special-cases)
+  - [The `data` parameter – set request body directly](#the-data-parameter-%E2%80%93-set-request-body-directly)
+  - [Set parameters for both the URL/query and the request body](#set-parameters-for-both-the-urlquery-and-the-request-body)
+- [LICENSE](#license)
+
+<!-- tocstop -->
+
+## Features
+
+🤩 1:1 mapping of REST API endpoint documentation, e.g. [Add labels to an issue](https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue) becomes
+
+```js
+request("POST /repos/:owner/:repo/issues/:number/labels", {
+  mediaType: {
+    previews: ["symmetra"]
+  },
+  owner: "octokit",
+  repo: "request.js",
+  number: 1,
+  labels: ["🐛 bug"]
+});
+```
+
+👶 [Small bundle size](https://bundlephobia.com/result?p=@octokit/request@5.0.3) (\<4kb minified + gzipped)
+
+😎 [Authenticate](#authentication) with any of [GitHubs Authentication Strategies](https://github.com/octokit/auth.js).
+
+👍 Sensible defaults
+
+- `baseUrl`: `https://api.github.com`
+- `headers.accept`: `application/vnd.github.v3+json`
+- `headers.agent`: `octokit-request.js/<current version> <OS information>`, e.g. `octokit-request.js/1.2.3 Node.js/10.15.0 (macOS Mojave; x64)`
+
+👌 Simple to test: mock requests by passing a custom fetch method.
+
+🧐 Simple to debug: Sets `error.request` to request options causing the error (with redacted credentials).
+
+## Usage
+
+<table>
+<tbody valign=top align=left>
+<tr><th>
+Browsers
+</th><td width=100%>
+Load <code>@octokit/request</code> directly from <a href="https://cdn.pika.dev">cdn.pika.dev</a>
+        
+```html
+<script type="module">
+import { request } from "https://cdn.pika.dev/@octokit/request";
+</script>
+```
+
+</td></tr>
+<tr><th>
+Node
+</th><td>
+
+Install with <code>npm install @octokit/request</code>
+
+```js
+const { request } = require("@octokit/request");
+// or: import { request } from "@octokit/request";
+```
+
+</td></tr>
+</tbody>
+</table>
+
+### REST API example
+
+```js
+// Following GitHub docs formatting:
+// https://developer.github.com/v3/repos/#list-organization-repositories
+const result = await request("GET /orgs/:org/repos", {
+  headers: {
+    authorization: "token 0000000000000000000000000000000000000001"
+  },
+  org: "octokit",
+  type: "private"
+});
+
+console.log(`${result.data.length} repos found.`);
+```
+
+### GraphQL example
+
+For GraphQL request we recommend using [`@octokit/graphql`](https://github.com/octokit/graphql.js#readme)
+
+```js
+const result = await request("POST /graphql", {
+  headers: {
+    authorization: "token 0000000000000000000000000000000000000001"
+  },
+  query: `query ($login: String!) {
+    organization(login: $login) {
+      repositories(privacy: PRIVATE) {
+        totalCount
+      }
+    }
+  }`,
+  variables: {
+    login: "octokit"
+  }
+});
+```
+
+### Alternative: pass `method` & `url` as part of options
+
+Alternatively, pass in a method and a url
+
+```js
+const result = await request({
+  method: "GET",
+  url: "/orgs/:org/repos",
+  headers: {
+    authorization: "token 0000000000000000000000000000000000000001"
+  },
+  org: "octokit",
+  type: "private"
+});
+```
+
+## Authentication
+
+The simplest way to authenticate a request is to set the `Authorization` header directly, e.g. to a [personal access token](https://github.com/settings/tokens/).
+
+```js
+const requestWithAuth = request.defaults({
+  headers: {
+    authorization: "token 0000000000000000000000000000000000000001"
+  }
+});
+const result = await request("GET /user");
+```
+
+For more complex authentication strategies such as GitHub Apps or Basic, we recommend the according authentication library exported by [`@octokit/auth`](https://github.com/octokit/auth.js).
+
+```js
+const { createAppAuth } = require("@octokit/auth-app");
+const auth = createAppAuth({
+  id: process.env.APP_ID,
+  privateKey: process.env.PRIVATE_KEY,
+  installationId: 123
+});
+const requestWithAuth = request.defaults({
+  request: {
+    hook: auth.hook
+  },
+  mediaType: {
+    previews: ["machine-man"]
+  }
+});
+
+const { data: app } = await requestWithAuth("GET /app");
+const { data: app } = await requestWithAuth("POST /repos/:owner/:repo/issues", {
+  owner: "octocat",
+  repo: "hello-world",
+  title: "Hello from the engine room"
+});
+```
+
+## request()
+
+`request(route, options)` or `request(options)`.
+
+**Options**
+
+<table>
+  <thead>
+    <tr>
+      <th align=left>
+        name
+      </th>
+      <th align=left>
+        type
+      </th>
+      <th align=left>
+        description
+      </th>
+    </tr>
+  </thead>
+  <tr>
+    <th align=left>
+      <code>route</code>
+    </th>
+    <td>
+      String
+    </td>
+    <td>
+      If <code>route</code> is set it has to be a string consisting of the request method and URL, e.g. <code>GET /orgs/:org</code>
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.baseUrl</code>
+    </th>
+    <td>
+      String
+    </td>
+    <td>
+      <strong>Required.</strong> Any supported <a href="https://developer.github.com/v3/#http-verbs">http verb</a>, case insensitive. <em>Defaults to <code>https://api.github.com</code></em>.
+    </td>
+  </tr>
+    <th align=left>
+      <code>options.headers</code>
+    </th>
+    <td>
+      Object
+    </td>
+    <td>
+      Custom headers. Passed headers are merged with defaults:<br>
+      <em><code>headers['user-agent']</code> defaults to <code>octokit-rest.js/1.2.3</code> (where <code>1.2.3</code> is the released version)</em>.<br>
+      <em><code>headers['accept']</code> defaults to <code>application/vnd.github.v3+json</code>.<br> Use <code>options.mediaType.{format,previews}</code> to request API previews and custom media types.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.mediaType.format</code>
+    </th>
+    <td>
+      String
+    </td>
+    <td>
+      Media type param, such as `raw`, `html`, or `full`. See <a href="https://developer.github.com/v3/media/">Media Types</a>.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.mediaType.previews</code>
+    </th>
+    <td>
+      Array of strings
+    </td>
+    <td>
+      Name of previews, such as `mercy`, `symmetra`, or `scarlet-witch`. See <a href="https://developer.github.com/v3/previews/">API Previews</a>.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.method</code>
+    </th>
+    <td>
+      String
+    </td>
+    <td>
+      <strong>Required.</strong> Any supported <a href="https://developer.github.com/v3/#http-verbs">http verb</a>, case insensitive. <em>Defaults to <code>Get</code></em>.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.url</code>
+    </th>
+    <td>
+      String
+    </td>
+    <td>
+      <strong>Required.</strong> A path or full URL which may contain <code>:variable</code> or <code>{variable}</code> placeholders,
+      e.g. <code>/orgs/:org/repos</code>. The <code>url</code> is parsed using <a href="https://github.com/bramstein/url-template">url-template</a>.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.data</code>
+    </th>
+    <td>
+      Any
+    </td>
+    <td>
+      Set request body directly instead of setting it to JSON based on additional parameters. See <a href="#data-parameter">"The `data` parameter"</a> below.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.request.agent</code>
+    </th>
+    <td>
+      <a href="https://nodejs.org/api/http.html#http_class_http_agent">http(s).Agent</a> instance
+    </td>
+    <td>
+     Node only. Useful for custom proxy, certificate, or dns lookup.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.request.fetch</code>
+    </th>
+    <td>
+      Function
+    </td>
+    <td>
+     Custom replacement for <a href="https://github.com/bitinn/node-fetch">built-in fetch method</a>. Useful for testing or request hooks.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.request.hook</code>
+    </th>
+    <td>
+      Function
+    </td>
+    <td>
+     Function with the signature <code>hook(request, endpointOptions)</code>, where <code>endpointOptions</code> are the parsed options as returned by <a href="https://github.com/octokit/endpoint.js#endpointmergeroute-options-or-endpointmergeoptions"><code>endpoint.merge()</code></a>, and <code>request</code> is <a href="https://github.com/octokit/request.js#request"><code>request()</code></a>. This option works great in conjuction with <a href="https://github.com/gr2m/before-after-hook">before-after-hook</a>.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <a name="options-request-signal"></a><code>options.request.signal</code>
+    </th>
+    <td>
+      <a href="https://github.com/bitinn/node-fetch/tree/e996bdab73baf996cf2dbf25643c8fe2698c3249#request-cancellation-with-abortsignal">new AbortController().signal</a>
+    </td>
+    <td>
+      Use an <code>AbortController</code> instance to cancel a request. In node you can only cancel streamed requests.
+    </td>
+  </tr>
+  <tr>
+    <th align=left>
+      <code>options.request.timeout</code>
+    </th>
+    <td>
+      Number
+    </td>
+    <td>
+     Node only. Request/response timeout in ms, it resets on redirect. 0 to disable (OS limit applies). <a href="#options-request-signal">options.request.signal</a> is recommended instead.
+    </td>
+  </tr>
+</table>
+
+All other options except `options.request.*` will be passed depending on the `method` and `url` options.
+
+1. If the option key is a placeholder in the `url`, it will be used as replacement. For example, if the passed options are `{url: '/orgs/:org/repos', org: 'foo'}` the returned `options.url` is `https://api.github.com/orgs/foo/repos`
+2. If the `method` is `GET` or `HEAD`, the option is passed as query parameter
+3. Otherwise the parameter is passed in the request body as JSON key.
+
+**Result**
+
+`request` returns a promise and resolves with 4 keys
+
+<table>
+  <thead>
+    <tr>
+      <th align=left>
+        key
+      </th>
+      <th align=left>
+        type
+      </th>
+      <th align=left>
+        description
+      </th>
+    </tr>
+  </thead>
+  <tr>
+    <th align=left><code>status</code></th>
+    <td>Integer</td>
+    <td>Response status status</td>
+  </tr>
+  <tr>
+    <th align=left><code>url</code></th>
+    <td>String</td>
+    <td>URL of response. If a request results in redirects, this is the final URL. You can send a <code>HEAD</code> request to retrieve it without loading the full response body.</td>
+  </tr>
+  <tr>
+    <th align=left><code>headers</code></th>
+    <td>Object</td>
+    <td>All response headers</td>
+  </tr>
+  <tr>
+    <th align=left><code>data</code></th>
+    <td>Any</td>
+    <td>The response body as returned from server. If the response is JSON then it will be parsed into an object</td>
+  </tr>
+</table>
+
+If an error occurs, the `error` instance has additional properties to help with debugging
+
+- `error.status` The http response status code
+- `error.headers` The http response headers as an object
+- `error.request` The request options such as `method`, `url` and `data`
+
+## `request.defaults()`
+
+Override or set default options. Example:
+
+```js
+const myrequest = require("@octokit/request").defaults({
+  baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
+  headers: {
+    "user-agent": "myApp/1.2.3",
+    authorization: `token 0000000000000000000000000000000000000001`
+  },
+  org: "my-project",
+  per_page: 100
+});
+
+myrequest(`GET /orgs/:org/repos`);
+```
+
+You can call `.defaults()` again on the returned method, the defaults will cascade.
+
+```js
+const myProjectRequest = request.defaults({
+  baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
+  headers: {
+    "user-agent": "myApp/1.2.3"
+  },
+  org: "my-project"
+});
+const myProjectRequestWithAuth = myProjectRequest.defaults({
+  headers: {
+    authorization: `token 0000000000000000000000000000000000000001`
+  }
+});
+```
+
+`myProjectRequest` now defaults the `baseUrl`, `headers['user-agent']`,
+`org` and `headers['authorization']` on top of `headers['accept']` that is set
+by the global default.
+
+## `request.endpoint`
+
+See https://github.com/octokit/endpoint.js. Example
+
+```js
+const options = request.endpoint("GET /orgs/:org/repos", {
+  org: "my-project",
+  type: "private"
+});
+
+// {
+//   method: 'GET',
+//   url: 'https://api.github.com/orgs/my-project/repos?type=private',
+//   headers: {
+//     accept: 'application/vnd.github.v3+json',
+//     authorization: 'token 0000000000000000000000000000000000000001',
+//     'user-agent': 'octokit/endpoint.js v1.2.3'
+//   }
+// }
+```
+
+All of the [`@octokit/endpoint`](https://github.com/octokit/endpoint.js) API can be used:
+
+- [`octokitRequest.endpoint()`](#endpoint)
+- [`octokitRequest.endpoint.defaults()`](#endpointdefaults)
+- [`octokitRequest.endpoint.merge()`](#endpointdefaults)
+- [`octokitRequest.endpoint.parse()`](#endpointmerge)
+
+## Special cases
+
+<a name="data-parameter"></a>
+
+### The `data` parameter – set request body directly
+
+Some endpoints such as [Render a Markdown document in raw mode](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode) don’t have parameters that are sent as request body keys, instead the request body needs to be set directly. In these cases, set the `data` parameter.
+
+```js
+const response = await request("POST /markdown/raw", {
+  data: "Hello world github/linguist#1 **cool**, and #1!",
+  headers: {
+    accept: "text/html;charset=utf-8",
+    "content-type": "text/plain"
+  }
+});
+
+// Request is sent as
+//
+//     {
+//       method: 'post',
+//       url: 'https://api.github.com/markdown/raw',
+//       headers: {
+//         accept: 'text/html;charset=utf-8',
+//         'content-type': 'text/plain',
+//         'user-agent': userAgent
+//       },
+//       body: 'Hello world github/linguist#1 **cool**, and #1!'
+//     }
+//
+// not as
+//
+//     {
+//       ...
+//       body: '{"data": "Hello world github/linguist#1 **cool**, and #1!"}'
+//     }
+```
+
+### Set parameters for both the URL/query and the request body
+
+There are API endpoints that accept both query parameters as well as a body. In that case you need to add the query parameters as templates to `options.url`, as defined in the [RFC 6570 URI Template specification](https://tools.ietf.org/html/rfc6570).
+
+Example
+
+```js
+request(
+  "POST https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}",
+  {
+    name: "example.zip",
+    label: "short description",
+    headers: {
+      "content-type": "text/plain",
+      "content-length": 14,
+      authorization: `token 0000000000000000000000000000000000000001`
+    },
+    data: "Hello, world!"
+  }
+);
+```
+
+## LICENSE
+
+[MIT](LICENSE)
diff --git a/setup-maven/node_modules/@octokit/request/dist-node/index.js b/setup-maven/node_modules/@octokit/request/dist-node/index.js
new file mode 100644
index 0000000..19b227b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-node/index.js
@@ -0,0 +1,148 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var endpoint = require('@octokit/endpoint');
+var universalUserAgent = require('universal-user-agent');
+var isPlainObject = _interopDefault(require('is-plain-object'));
+var nodeFetch = _interopDefault(require('node-fetch'));
+var requestError = require('@octokit/request-error');
+
+const VERSION = "5.3.1";
+
+function getBufferResponse(response) {
+  return response.arrayBuffer();
+}
+
+function fetchWrapper(requestOptions) {
+  if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
+    requestOptions.body = JSON.stringify(requestOptions.body);
+  }
+
+  let headers = {};
+  let status;
+  let url;
+  const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
+  return fetch(requestOptions.url, Object.assign({
+    method: requestOptions.method,
+    body: requestOptions.body,
+    headers: requestOptions.headers,
+    redirect: requestOptions.redirect
+  }, requestOptions.request)).then(response => {
+    url = response.url;
+    status = response.status;
+
+    for (const keyAndValue of response.headers) {
+      headers[keyAndValue[0]] = keyAndValue[1];
+    }
+
+    if (status === 204 || status === 205) {
+      return;
+    } // GitHub API returns 200 for HEAD requsets
+
+
+    if (requestOptions.method === "HEAD") {
+      if (status < 400) {
+        return;
+      }
+
+      throw new requestError.RequestError(response.statusText, status, {
+        headers,
+        request: requestOptions
+      });
+    }
+
+    if (status === 304) {
+      throw new requestError.RequestError("Not modified", status, {
+        headers,
+        request: requestOptions
+      });
+    }
+
+    if (status >= 400) {
+      return response.text().then(message => {
+        const error = new requestError.RequestError(message, status, {
+          headers,
+          request: requestOptions
+        });
+
+        try {
+          let responseBody = JSON.parse(error.message);
+          Object.assign(error, responseBody);
+          let errors = responseBody.errors; // Assumption `errors` would always be in Array Fotmat
+
+          error.message = error.message + ": " + errors.map(JSON.stringify).join(", ");
+        } catch (e) {// ignore, see octokit/rest.js#684
+        }
+
+        throw error;
+      });
+    }
+
+    const contentType = response.headers.get("content-type");
+
+    if (/application\/json/.test(contentType)) {
+      return response.json();
+    }
+
+    if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
+      return response.text();
+    }
+
+    return getBufferResponse(response);
+  }).then(data => {
+    return {
+      status,
+      url,
+      headers,
+      data
+    };
+  }).catch(error => {
+    if (error instanceof requestError.RequestError) {
+      throw error;
+    }
+
+    throw new requestError.RequestError(error.message, 500, {
+      headers,
+      request: requestOptions
+    });
+  });
+}
+
+function withDefaults(oldEndpoint, newDefaults) {
+  const endpoint = oldEndpoint.defaults(newDefaults);
+
+  const newApi = function (route, parameters) {
+    const endpointOptions = endpoint.merge(route, parameters);
+
+    if (!endpointOptions.request || !endpointOptions.request.hook) {
+      return fetchWrapper(endpoint.parse(endpointOptions));
+    }
+
+    const request = (route, parameters) => {
+      return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
+    };
+
+    Object.assign(request, {
+      endpoint,
+      defaults: withDefaults.bind(null, endpoint)
+    });
+    return endpointOptions.request.hook(request, endpointOptions);
+  };
+
+  return Object.assign(newApi, {
+    endpoint,
+    defaults: withDefaults.bind(null, endpoint)
+  });
+}
+
+const request = withDefaults(endpoint.endpoint, {
+  headers: {
+    "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
+  }
+});
+
+exports.request = request;
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/request/dist-node/index.js.map b/setup-maven/node_modules/@octokit/request/dist-node/index.js.map
new file mode 100644
index 0000000..b0ffb70
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-node/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/version.js","../dist-src/get-buffer-response.js","../dist-src/fetch-wrapper.js","../dist-src/with-defaults.js","../dist-src/index.js"],"sourcesContent":["export const VERSION = \"5.3.1\";\n","export default function getBufferResponse(response) {\n    return response.arrayBuffer();\n}\n","import isPlainObject from \"is-plain-object\";\nimport nodeFetch from \"node-fetch\";\nimport { RequestError } from \"@octokit/request-error\";\nimport getBuffer from \"./get-buffer-response\";\nexport default function fetchWrapper(requestOptions) {\n    if (isPlainObject(requestOptions.body) ||\n        Array.isArray(requestOptions.body)) {\n        requestOptions.body = JSON.stringify(requestOptions.body);\n    }\n    let headers = {};\n    let status;\n    let url;\n    const fetch = (requestOptions.request && requestOptions.request.fetch) || nodeFetch;\n    return fetch(requestOptions.url, Object.assign({\n        method: requestOptions.method,\n        body: requestOptions.body,\n        headers: requestOptions.headers,\n        redirect: requestOptions.redirect\n    }, requestOptions.request))\n        .then(response => {\n        url = response.url;\n        status = response.status;\n        for (const keyAndValue of response.headers) {\n            headers[keyAndValue[0]] = keyAndValue[1];\n        }\n        if (status === 204 || status === 205) {\n            return;\n        }\n        // GitHub API returns 200 for HEAD requsets\n        if (requestOptions.method === \"HEAD\") {\n            if (status < 400) {\n                return;\n            }\n            throw new RequestError(response.statusText, status, {\n                headers,\n                request: requestOptions\n            });\n        }\n        if (status === 304) {\n            throw new RequestError(\"Not modified\", status, {\n                headers,\n                request: requestOptions\n            });\n        }\n        if (status >= 400) {\n            return response\n                .text()\n                .then(message => {\n                const error = new RequestError(message, status, {\n                    headers,\n                    request: requestOptions\n                });\n                try {\n                    let responseBody = JSON.parse(error.message);\n                    Object.assign(error, responseBody);\n                    let errors = responseBody.errors;\n                    // Assumption `errors` would always be in Array Fotmat\n                    error.message =\n                        error.message + \": \" + errors.map(JSON.stringify).join(\", \");\n                }\n                catch (e) {\n                    // ignore, see octokit/rest.js#684\n                }\n                throw error;\n            });\n        }\n        const contentType = response.headers.get(\"content-type\");\n        if (/application\\/json/.test(contentType)) {\n            return response.json();\n        }\n        if (!contentType || /^text\\/|charset=utf-8$/.test(contentType)) {\n            return response.text();\n        }\n        return getBuffer(response);\n    })\n        .then(data => {\n        return {\n            status,\n            url,\n            headers,\n            data\n        };\n    })\n        .catch(error => {\n        if (error instanceof RequestError) {\n            throw error;\n        }\n        throw new RequestError(error.message, 500, {\n            headers,\n            request: requestOptions\n        });\n    });\n}\n","import fetchWrapper from \"./fetch-wrapper\";\nexport default function withDefaults(oldEndpoint, newDefaults) {\n    const endpoint = oldEndpoint.defaults(newDefaults);\n    const newApi = function (route, parameters) {\n        const endpointOptions = endpoint.merge(route, parameters);\n        if (!endpointOptions.request || !endpointOptions.request.hook) {\n            return fetchWrapper(endpoint.parse(endpointOptions));\n        }\n        const request = (route, parameters) => {\n            return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));\n        };\n        Object.assign(request, {\n            endpoint,\n            defaults: withDefaults.bind(null, endpoint)\n        });\n        return endpointOptions.request.hook(request, endpointOptions);\n    };\n    return Object.assign(newApi, {\n        endpoint,\n        defaults: withDefaults.bind(null, endpoint)\n    });\n}\n","import { endpoint } from \"@octokit/endpoint\";\nimport { getUserAgent } from \"universal-user-agent\";\nimport { VERSION } from \"./version\";\nimport withDefaults from \"./with-defaults\";\nexport const request = withDefaults(endpoint, {\n    headers: {\n        \"user-agent\": `octokit-request.js/${VERSION} ${getUserAgent()}`\n    }\n});\n"],"names":["VERSION","getBufferResponse","response","arrayBuffer","fetchWrapper","requestOptions","isPlainObject","body","Array","isArray","JSON","stringify","headers","status","url","fetch","request","nodeFetch","Object","assign","method","redirect","then","keyAndValue","RequestError","statusText","text","message","error","responseBody","parse","errors","map","join","e","contentType","get","test","json","getBuffer","data","catch","withDefaults","oldEndpoint","newDefaults","endpoint","defaults","newApi","route","parameters","endpointOptions","merge","hook","bind","getUserAgent"],"mappings":";;;;;;;;;;;;AAAO,MAAMA,OAAO,GAAG,mBAAhB;;ACAQ,SAASC,iBAAT,CAA2BC,QAA3B,EAAqC;SACzCA,QAAQ,CAACC,WAAT,EAAP;;;ACGW,SAASC,YAAT,CAAsBC,cAAtB,EAAsC;MAC7CC,aAAa,CAACD,cAAc,CAACE,IAAhB,CAAb,IACAC,KAAK,CAACC,OAAN,CAAcJ,cAAc,CAACE,IAA7B,CADJ,EACwC;IACpCF,cAAc,CAACE,IAAf,GAAsBG,IAAI,CAACC,SAAL,CAAeN,cAAc,CAACE,IAA9B,CAAtB;;;MAEAK,OAAO,GAAG,EAAd;MACIC,MAAJ;MACIC,GAAJ;QACMC,KAAK,GAAIV,cAAc,CAACW,OAAf,IAA0BX,cAAc,CAACW,OAAf,CAAuBD,KAAlD,IAA4DE,SAA1E;SACOF,KAAK,CAACV,cAAc,CAACS,GAAhB,EAAqBI,MAAM,CAACC,MAAP,CAAc;IAC3CC,MAAM,EAAEf,cAAc,CAACe,MADoB;IAE3Cb,IAAI,EAAEF,cAAc,CAACE,IAFsB;IAG3CK,OAAO,EAAEP,cAAc,CAACO,OAHmB;IAI3CS,QAAQ,EAAEhB,cAAc,CAACgB;GAJI,EAK9BhB,cAAc,CAACW,OALe,CAArB,CAAL,CAMFM,IANE,CAMGpB,QAAQ,IAAI;IAClBY,GAAG,GAAGZ,QAAQ,CAACY,GAAf;IACAD,MAAM,GAAGX,QAAQ,CAACW,MAAlB;;SACK,MAAMU,WAAX,IAA0BrB,QAAQ,CAACU,OAAnC,EAA4C;MACxCA,OAAO,CAACW,WAAW,CAAC,CAAD,CAAZ,CAAP,GAA0BA,WAAW,CAAC,CAAD,CAArC;;;QAEAV,MAAM,KAAK,GAAX,IAAkBA,MAAM,KAAK,GAAjC,EAAsC;;KANpB;;;QAUdR,cAAc,CAACe,MAAf,KAA0B,MAA9B,EAAsC;UAC9BP,MAAM,GAAG,GAAb,EAAkB;;;;YAGZ,IAAIW,yBAAJ,CAAiBtB,QAAQ,CAACuB,UAA1B,EAAsCZ,MAAtC,EAA8C;QAChDD,OADgD;QAEhDI,OAAO,EAAEX;OAFP,CAAN;;;QAKAQ,MAAM,KAAK,GAAf,EAAoB;YACV,IAAIW,yBAAJ,CAAiB,cAAjB,EAAiCX,MAAjC,EAAyC;QAC3CD,OAD2C;QAE3CI,OAAO,EAAEX;OAFP,CAAN;;;QAKAQ,MAAM,IAAI,GAAd,EAAmB;aACRX,QAAQ,CACVwB,IADE,GAEFJ,IAFE,CAEGK,OAAO,IAAI;cACXC,KAAK,GAAG,IAAIJ,yBAAJ,CAAiBG,OAAjB,EAA0Bd,MAA1B,EAAkC;UAC5CD,OAD4C;UAE5CI,OAAO,EAAEX;SAFC,CAAd;;YAII;cACIwB,YAAY,GAAGnB,IAAI,CAACoB,KAAL,CAAWF,KAAK,CAACD,OAAjB,CAAnB;UACAT,MAAM,CAACC,MAAP,CAAcS,KAAd,EAAqBC,YAArB;cACIE,MAAM,GAAGF,YAAY,CAACE,MAA1B,CAHA;;UAKAH,KAAK,CAACD,OAAN,GACIC,KAAK,CAACD,OAAN,GAAgB,IAAhB,GAAuBI,MAAM,CAACC,GAAP,CAAWtB,IAAI,CAACC,SAAhB,EAA2BsB,IAA3B,CAAgC,IAAhC,CAD3B;SALJ,CAQA,OAAOC,CAAP,EAAU;;;cAGJN,KAAN;OAlBG,CAAP;;;UAqBEO,WAAW,GAAGjC,QAAQ,CAACU,OAAT,CAAiBwB,GAAjB,CAAqB,cAArB,CAApB;;QACI,oBAAoBC,IAApB,CAAyBF,WAAzB,CAAJ,EAA2C;aAChCjC,QAAQ,CAACoC,IAAT,EAAP;;;QAEA,CAACH,WAAD,IAAgB,yBAAyBE,IAAzB,CAA8BF,WAA9B,CAApB,EAAgE;aACrDjC,QAAQ,CAACwB,IAAT,EAAP;;;WAEGa,iBAAS,CAACrC,QAAD,CAAhB;GA5DG,EA8DFoB,IA9DE,CA8DGkB,IAAI,IAAI;WACP;MACH3B,MADG;MAEHC,GAFG;MAGHF,OAHG;MAIH4B;KAJJ;GA/DG,EAsEFC,KAtEE,CAsEIb,KAAK,IAAI;QACZA,KAAK,YAAYJ,yBAArB,EAAmC;YACzBI,KAAN;;;UAEE,IAAIJ,yBAAJ,CAAiBI,KAAK,CAACD,OAAvB,EAAgC,GAAhC,EAAqC;MACvCf,OADuC;MAEvCI,OAAO,EAAEX;KAFP,CAAN;GA1EG,CAAP;;;ACZW,SAASqC,YAAT,CAAsBC,WAAtB,EAAmCC,WAAnC,EAAgD;QACrDC,QAAQ,GAAGF,WAAW,CAACG,QAAZ,CAAqBF,WAArB,CAAjB;;QACMG,MAAM,GAAG,UAAUC,KAAV,EAAiBC,UAAjB,EAA6B;UAClCC,eAAe,GAAGL,QAAQ,CAACM,KAAT,CAAeH,KAAf,EAAsBC,UAAtB,CAAxB;;QACI,CAACC,eAAe,CAAClC,OAAjB,IAA4B,CAACkC,eAAe,CAAClC,OAAhB,CAAwBoC,IAAzD,EAA+D;aACpDhD,YAAY,CAACyC,QAAQ,CAACf,KAAT,CAAeoB,eAAf,CAAD,CAAnB;;;UAEElC,OAAO,GAAG,CAACgC,KAAD,EAAQC,UAAR,KAAuB;aAC5B7C,YAAY,CAACyC,QAAQ,CAACf,KAAT,CAAee,QAAQ,CAACM,KAAT,CAAeH,KAAf,EAAsBC,UAAtB,CAAf,CAAD,CAAnB;KADJ;;IAGA/B,MAAM,CAACC,MAAP,CAAcH,OAAd,EAAuB;MACnB6B,QADmB;MAEnBC,QAAQ,EAAEJ,YAAY,CAACW,IAAb,CAAkB,IAAlB,EAAwBR,QAAxB;KAFd;WAIOK,eAAe,CAAClC,OAAhB,CAAwBoC,IAAxB,CAA6BpC,OAA7B,EAAsCkC,eAAtC,CAAP;GAZJ;;SAcOhC,MAAM,CAACC,MAAP,CAAc4B,MAAd,EAAsB;IACzBF,QADyB;IAEzBC,QAAQ,EAAEJ,YAAY,CAACW,IAAb,CAAkB,IAAlB,EAAwBR,QAAxB;GAFP,CAAP;;;MCbS7B,OAAO,GAAG0B,YAAY,CAACG,iBAAD,EAAW;EAC1CjC,OAAO,EAAE;kBACU,sBAAqBZ,OAAQ,IAAGsD,+BAAY,EAAG;;CAFnC,CAA5B;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/request/dist-src/fetch-wrapper.js b/setup-maven/node_modules/@octokit/request/dist-src/fetch-wrapper.js
new file mode 100644
index 0000000..f2b80d7
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-src/fetch-wrapper.js
@@ -0,0 +1,93 @@
+import isPlainObject from "is-plain-object";
+import nodeFetch from "node-fetch";
+import { RequestError } from "@octokit/request-error";
+import getBuffer from "./get-buffer-response";
+export default function fetchWrapper(requestOptions) {
+    if (isPlainObject(requestOptions.body) ||
+        Array.isArray(requestOptions.body)) {
+        requestOptions.body = JSON.stringify(requestOptions.body);
+    }
+    let headers = {};
+    let status;
+    let url;
+    const fetch = (requestOptions.request && requestOptions.request.fetch) || nodeFetch;
+    return fetch(requestOptions.url, Object.assign({
+        method: requestOptions.method,
+        body: requestOptions.body,
+        headers: requestOptions.headers,
+        redirect: requestOptions.redirect
+    }, requestOptions.request))
+        .then(response => {
+        url = response.url;
+        status = response.status;
+        for (const keyAndValue of response.headers) {
+            headers[keyAndValue[0]] = keyAndValue[1];
+        }
+        if (status === 204 || status === 205) {
+            return;
+        }
+        // GitHub API returns 200 for HEAD requsets
+        if (requestOptions.method === "HEAD") {
+            if (status < 400) {
+                return;
+            }
+            throw new RequestError(response.statusText, status, {
+                headers,
+                request: requestOptions
+            });
+        }
+        if (status === 304) {
+            throw new RequestError("Not modified", status, {
+                headers,
+                request: requestOptions
+            });
+        }
+        if (status >= 400) {
+            return response
+                .text()
+                .then(message => {
+                const error = new RequestError(message, status, {
+                    headers,
+                    request: requestOptions
+                });
+                try {
+                    let responseBody = JSON.parse(error.message);
+                    Object.assign(error, responseBody);
+                    let errors = responseBody.errors;
+                    // Assumption `errors` would always be in Array Fotmat
+                    error.message =
+                        error.message + ": " + errors.map(JSON.stringify).join(", ");
+                }
+                catch (e) {
+                    // ignore, see octokit/rest.js#684
+                }
+                throw error;
+            });
+        }
+        const contentType = response.headers.get("content-type");
+        if (/application\/json/.test(contentType)) {
+            return response.json();
+        }
+        if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
+            return response.text();
+        }
+        return getBuffer(response);
+    })
+        .then(data => {
+        return {
+            status,
+            url,
+            headers,
+            data
+        };
+    })
+        .catch(error => {
+        if (error instanceof RequestError) {
+            throw error;
+        }
+        throw new RequestError(error.message, 500, {
+            headers,
+            request: requestOptions
+        });
+    });
+}
diff --git a/setup-maven/node_modules/@octokit/request/dist-src/get-buffer-response.js b/setup-maven/node_modules/@octokit/request/dist-src/get-buffer-response.js
new file mode 100644
index 0000000..845a394
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-src/get-buffer-response.js
@@ -0,0 +1,3 @@
+export default function getBufferResponse(response) {
+    return response.arrayBuffer();
+}
diff --git a/setup-maven/node_modules/@octokit/request/dist-src/index.js b/setup-maven/node_modules/@octokit/request/dist-src/index.js
new file mode 100644
index 0000000..6a36142
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-src/index.js
@@ -0,0 +1,9 @@
+import { endpoint } from "@octokit/endpoint";
+import { getUserAgent } from "universal-user-agent";
+import { VERSION } from "./version";
+import withDefaults from "./with-defaults";
+export const request = withDefaults(endpoint, {
+    headers: {
+        "user-agent": `octokit-request.js/${VERSION} ${getUserAgent()}`
+    }
+});
diff --git a/setup-maven/node_modules/@octokit/request/dist-src/version.js b/setup-maven/node_modules/@octokit/request/dist-src/version.js
new file mode 100644
index 0000000..6250d76
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-src/version.js
@@ -0,0 +1 @@
+export const VERSION = "5.3.1";
diff --git a/setup-maven/node_modules/@octokit/request/dist-src/with-defaults.js b/setup-maven/node_modules/@octokit/request/dist-src/with-defaults.js
new file mode 100644
index 0000000..8e44f46
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-src/with-defaults.js
@@ -0,0 +1,22 @@
+import fetchWrapper from "./fetch-wrapper";
+export default function withDefaults(oldEndpoint, newDefaults) {
+    const endpoint = oldEndpoint.defaults(newDefaults);
+    const newApi = function (route, parameters) {
+        const endpointOptions = endpoint.merge(route, parameters);
+        if (!endpointOptions.request || !endpointOptions.request.hook) {
+            return fetchWrapper(endpoint.parse(endpointOptions));
+        }
+        const request = (route, parameters) => {
+            return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
+        };
+        Object.assign(request, {
+            endpoint,
+            defaults: withDefaults.bind(null, endpoint)
+        });
+        return endpointOptions.request.hook(request, endpointOptions);
+    };
+    return Object.assign(newApi, {
+        endpoint,
+        defaults: withDefaults.bind(null, endpoint)
+    });
+}
diff --git a/setup-maven/node_modules/@octokit/request/dist-types/fetch-wrapper.d.ts b/setup-maven/node_modules/@octokit/request/dist-types/fetch-wrapper.d.ts
new file mode 100644
index 0000000..594bce6
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-types/fetch-wrapper.d.ts
@@ -0,0 +1,11 @@
+import { EndpointInterface } from "@octokit/types";
+export default function fetchWrapper(requestOptions: ReturnType<EndpointInterface> & {
+    redirect?: string;
+}): Promise<{
+    status: number;
+    url: string;
+    headers: {
+        [header: string]: string;
+    };
+    data: any;
+}>;
diff --git a/setup-maven/node_modules/@octokit/request/dist-types/get-buffer-response.d.ts b/setup-maven/node_modules/@octokit/request/dist-types/get-buffer-response.d.ts
new file mode 100644
index 0000000..915b705
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-types/get-buffer-response.d.ts
@@ -0,0 +1,2 @@
+import { Response } from "node-fetch";
+export default function getBufferResponse(response: Response): Promise<ArrayBuffer>;
diff --git a/setup-maven/node_modules/@octokit/request/dist-types/index.d.ts b/setup-maven/node_modules/@octokit/request/dist-types/index.d.ts
new file mode 100644
index 0000000..cb9c9ba
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-types/index.d.ts
@@ -0,0 +1 @@
+export declare const request: import("@octokit/types").RequestInterface;
diff --git a/setup-maven/node_modules/@octokit/request/dist-types/version.d.ts b/setup-maven/node_modules/@octokit/request/dist-types/version.d.ts
new file mode 100644
index 0000000..c32c7ab
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-types/version.d.ts
@@ -0,0 +1 @@
+export declare const VERSION = "5.3.1";
diff --git a/setup-maven/node_modules/@octokit/request/dist-types/with-defaults.d.ts b/setup-maven/node_modules/@octokit/request/dist-types/with-defaults.d.ts
new file mode 100644
index 0000000..0080469
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-types/with-defaults.d.ts
@@ -0,0 +1,2 @@
+import { EndpointInterface, RequestInterface, RequestParameters } from "@octokit/types";
+export default function withDefaults(oldEndpoint: EndpointInterface, newDefaults: RequestParameters): RequestInterface;
diff --git a/setup-maven/node_modules/@octokit/request/dist-web/index.js b/setup-maven/node_modules/@octokit/request/dist-web/index.js
new file mode 100644
index 0000000..3f51926
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-web/index.js
@@ -0,0 +1,132 @@
+import { endpoint } from '@octokit/endpoint';
+import { getUserAgent } from 'universal-user-agent';
+import isPlainObject from 'is-plain-object';
+import nodeFetch from 'node-fetch';
+import { RequestError } from '@octokit/request-error';
+
+const VERSION = "5.3.1";
+
+function getBufferResponse(response) {
+    return response.arrayBuffer();
+}
+
+function fetchWrapper(requestOptions) {
+    if (isPlainObject(requestOptions.body) ||
+        Array.isArray(requestOptions.body)) {
+        requestOptions.body = JSON.stringify(requestOptions.body);
+    }
+    let headers = {};
+    let status;
+    let url;
+    const fetch = (requestOptions.request && requestOptions.request.fetch) || nodeFetch;
+    return fetch(requestOptions.url, Object.assign({
+        method: requestOptions.method,
+        body: requestOptions.body,
+        headers: requestOptions.headers,
+        redirect: requestOptions.redirect
+    }, requestOptions.request))
+        .then(response => {
+        url = response.url;
+        status = response.status;
+        for (const keyAndValue of response.headers) {
+            headers[keyAndValue[0]] = keyAndValue[1];
+        }
+        if (status === 204 || status === 205) {
+            return;
+        }
+        // GitHub API returns 200 for HEAD requsets
+        if (requestOptions.method === "HEAD") {
+            if (status < 400) {
+                return;
+            }
+            throw new RequestError(response.statusText, status, {
+                headers,
+                request: requestOptions
+            });
+        }
+        if (status === 304) {
+            throw new RequestError("Not modified", status, {
+                headers,
+                request: requestOptions
+            });
+        }
+        if (status >= 400) {
+            return response
+                .text()
+                .then(message => {
+                const error = new RequestError(message, status, {
+                    headers,
+                    request: requestOptions
+                });
+                try {
+                    let responseBody = JSON.parse(error.message);
+                    Object.assign(error, responseBody);
+                    let errors = responseBody.errors;
+                    // Assumption `errors` would always be in Array Fotmat
+                    error.message =
+                        error.message + ": " + errors.map(JSON.stringify).join(", ");
+                }
+                catch (e) {
+                    // ignore, see octokit/rest.js#684
+                }
+                throw error;
+            });
+        }
+        const contentType = response.headers.get("content-type");
+        if (/application\/json/.test(contentType)) {
+            return response.json();
+        }
+        if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
+            return response.text();
+        }
+        return getBufferResponse(response);
+    })
+        .then(data => {
+        return {
+            status,
+            url,
+            headers,
+            data
+        };
+    })
+        .catch(error => {
+        if (error instanceof RequestError) {
+            throw error;
+        }
+        throw new RequestError(error.message, 500, {
+            headers,
+            request: requestOptions
+        });
+    });
+}
+
+function withDefaults(oldEndpoint, newDefaults) {
+    const endpoint = oldEndpoint.defaults(newDefaults);
+    const newApi = function (route, parameters) {
+        const endpointOptions = endpoint.merge(route, parameters);
+        if (!endpointOptions.request || !endpointOptions.request.hook) {
+            return fetchWrapper(endpoint.parse(endpointOptions));
+        }
+        const request = (route, parameters) => {
+            return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
+        };
+        Object.assign(request, {
+            endpoint,
+            defaults: withDefaults.bind(null, endpoint)
+        });
+        return endpointOptions.request.hook(request, endpointOptions);
+    };
+    return Object.assign(newApi, {
+        endpoint,
+        defaults: withDefaults.bind(null, endpoint)
+    });
+}
+
+const request = withDefaults(endpoint, {
+    headers: {
+        "user-agent": `octokit-request.js/${VERSION} ${getUserAgent()}`
+    }
+});
+
+export { request };
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/request/dist-web/index.js.map b/setup-maven/node_modules/@octokit/request/dist-web/index.js.map
new file mode 100644
index 0000000..f4c3084
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/dist-web/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/version.js","../dist-src/get-buffer-response.js","../dist-src/fetch-wrapper.js","../dist-src/with-defaults.js","../dist-src/index.js"],"sourcesContent":["export const VERSION = \"5.3.1\";\n","export default function getBufferResponse(response) {\n    return response.arrayBuffer();\n}\n","import isPlainObject from \"is-plain-object\";\nimport nodeFetch from \"node-fetch\";\nimport { RequestError } from \"@octokit/request-error\";\nimport getBuffer from \"./get-buffer-response\";\nexport default function fetchWrapper(requestOptions) {\n    if (isPlainObject(requestOptions.body) ||\n        Array.isArray(requestOptions.body)) {\n        requestOptions.body = JSON.stringify(requestOptions.body);\n    }\n    let headers = {};\n    let status;\n    let url;\n    const fetch = (requestOptions.request && requestOptions.request.fetch) || nodeFetch;\n    return fetch(requestOptions.url, Object.assign({\n        method: requestOptions.method,\n        body: requestOptions.body,\n        headers: requestOptions.headers,\n        redirect: requestOptions.redirect\n    }, requestOptions.request))\n        .then(response => {\n        url = response.url;\n        status = response.status;\n        for (const keyAndValue of response.headers) {\n            headers[keyAndValue[0]] = keyAndValue[1];\n        }\n        if (status === 204 || status === 205) {\n            return;\n        }\n        // GitHub API returns 200 for HEAD requsets\n        if (requestOptions.method === \"HEAD\") {\n            if (status < 400) {\n                return;\n            }\n            throw new RequestError(response.statusText, status, {\n                headers,\n                request: requestOptions\n            });\n        }\n        if (status === 304) {\n            throw new RequestError(\"Not modified\", status, {\n                headers,\n                request: requestOptions\n            });\n        }\n        if (status >= 400) {\n            return response\n                .text()\n                .then(message => {\n                const error = new RequestError(message, status, {\n                    headers,\n                    request: requestOptions\n                });\n                try {\n                    let responseBody = JSON.parse(error.message);\n                    Object.assign(error, responseBody);\n                    let errors = responseBody.errors;\n                    // Assumption `errors` would always be in Array Fotmat\n                    error.message =\n                        error.message + \": \" + errors.map(JSON.stringify).join(\", \");\n                }\n                catch (e) {\n                    // ignore, see octokit/rest.js#684\n                }\n                throw error;\n            });\n        }\n        const contentType = response.headers.get(\"content-type\");\n        if (/application\\/json/.test(contentType)) {\n            return response.json();\n        }\n        if (!contentType || /^text\\/|charset=utf-8$/.test(contentType)) {\n            return response.text();\n        }\n        return getBuffer(response);\n    })\n        .then(data => {\n        return {\n            status,\n            url,\n            headers,\n            data\n        };\n    })\n        .catch(error => {\n        if (error instanceof RequestError) {\n            throw error;\n        }\n        throw new RequestError(error.message, 500, {\n            headers,\n            request: requestOptions\n        });\n    });\n}\n","import fetchWrapper from \"./fetch-wrapper\";\nexport default function withDefaults(oldEndpoint, newDefaults) {\n    const endpoint = oldEndpoint.defaults(newDefaults);\n    const newApi = function (route, parameters) {\n        const endpointOptions = endpoint.merge(route, parameters);\n        if (!endpointOptions.request || !endpointOptions.request.hook) {\n            return fetchWrapper(endpoint.parse(endpointOptions));\n        }\n        const request = (route, parameters) => {\n            return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));\n        };\n        Object.assign(request, {\n            endpoint,\n            defaults: withDefaults.bind(null, endpoint)\n        });\n        return endpointOptions.request.hook(request, endpointOptions);\n    };\n    return Object.assign(newApi, {\n        endpoint,\n        defaults: withDefaults.bind(null, endpoint)\n    });\n}\n","import { endpoint } from \"@octokit/endpoint\";\nimport { getUserAgent } from \"universal-user-agent\";\nimport { VERSION } from \"./version\";\nimport withDefaults from \"./with-defaults\";\nexport const request = withDefaults(endpoint, {\n    headers: {\n        \"user-agent\": `octokit-request.js/${VERSION} ${getUserAgent()}`\n    }\n});\n"],"names":["getBuffer"],"mappings":";;;;;;AAAO,MAAM,OAAO,GAAG,mBAAmB,CAAC;;ACA5B,SAAS,iBAAiB,CAAC,QAAQ,EAAE;IAChD,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;CACjC;;ACEc,SAAS,YAAY,CAAC,cAAc,EAAE;IACjD,IAAI,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;QACpC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAC7D;IACD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,CAAC;IACX,IAAI,GAAG,CAAC;IACR,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC;IACpF,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;QAC3C,MAAM,EAAE,cAAc,CAAC,MAAM;QAC7B,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,OAAO,EAAE,cAAc,CAAC,OAAO;QAC/B,QAAQ,EAAE,cAAc,CAAC,QAAQ;KACpC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;SACtB,IAAI,CAAC,QAAQ,IAAI;QAClB,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QACnB,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QACzB,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,OAAO,EAAE;YACxC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;SAC5C;QACD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;YAClC,OAAO;SACV;;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,MAAM,EAAE;YAClC,IAAI,MAAM,GAAG,GAAG,EAAE;gBACd,OAAO;aACV;YACD,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE;gBAChD,OAAO;gBACP,OAAO,EAAE,cAAc;aAC1B,CAAC,CAAC;SACN;QACD,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE;gBAC3C,OAAO;gBACP,OAAO,EAAE,cAAc;aAC1B,CAAC,CAAC;SACN;QACD,IAAI,MAAM,IAAI,GAAG,EAAE;YACf,OAAO,QAAQ;iBACV,IAAI,EAAE;iBACN,IAAI,CAAC,OAAO,IAAI;gBACjB,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE;oBAC5C,OAAO;oBACP,OAAO,EAAE,cAAc;iBAC1B,CAAC,CAAC;gBACH,IAAI;oBACA,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBACnC,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;;oBAEjC,KAAK,CAAC,OAAO;wBACT,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACpE;gBACD,OAAO,CAAC,EAAE;;iBAET;gBACD,MAAM,KAAK,CAAC;aACf,CAAC,CAAC;SACN;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACvC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC1B;QACD,IAAI,CAAC,WAAW,IAAI,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC5D,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC1B;QACD,OAAOA,iBAAS,CAAC,QAAQ,CAAC,CAAC;KAC9B,CAAC;SACG,IAAI,CAAC,IAAI,IAAI;QACd,OAAO;YACH,MAAM;YACN,GAAG;YACH,OAAO;YACP,IAAI;SACP,CAAC;KACL,CAAC;SACG,KAAK,CAAC,KAAK,IAAI;QAChB,IAAI,KAAK,YAAY,YAAY,EAAE;YAC/B,MAAM,KAAK,CAAC;SACf;QACD,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE;YACvC,OAAO;YACP,OAAO,EAAE,cAAc;SAC1B,CAAC,CAAC;KACN,CAAC,CAAC;CACN;;AC3Fc,SAAS,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE;QACxC,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE;YAC3D,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;SACxD;QACD,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK;YACnC,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;SAC1E,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,QAAQ;YACR,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;KACjE,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QACzB,QAAQ;QACR,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;KAC9C,CAAC,CAAC;CACN;;ACjBW,MAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE;QACL,YAAY,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;KAClE;CACJ,CAAC;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/LICENSE.md b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/LICENSE.md
new file mode 100644
index 0000000..f105ab0
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/LICENSE.md
@@ -0,0 +1,7 @@
+# [ISC License](https://spdx.org/licenses/ISC)
+
+Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m)
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/README.md b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/README.md
new file mode 100644
index 0000000..d00d14c
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/README.md
@@ -0,0 +1,25 @@
+# universal-user-agent
+
+> Get a user agent string in both browser and node
+
+[![@latest](https://img.shields.io/npm/v/universal-user-agent.svg)](https://www.npmjs.com/package/universal-user-agent)
+[![Build Status](https://travis-ci.com/gr2m/universal-user-agent.svg?branch=master)](https://travis-ci.com/gr2m/universal-user-agent)
+[![Greenkeeper](https://badges.greenkeeper.io/gr2m/universal-user-agent.svg)](https://greenkeeper.io/)
+
+```js
+const { getUserAgent } = require("universal-user-agent");
+// or import { getUserAgent } from "universal-user-agent";
+
+const userAgent = getUserAgent();
+// userAgent will look like this
+// in browser: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0"
+// in node: Node.js/v8.9.4 (macOS High Sierra; x64)
+```
+
+## Credits
+
+The Node implementation was originally inspired by [default-user-agent](https://www.npmjs.com/package/default-user-agent).
+
+## License
+
+[ISC](LICENSE.md)
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-node/index.js b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-node/index.js
new file mode 100644
index 0000000..80a0710
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-node/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var osName = _interopDefault(require('os-name'));
+
+function getUserAgent() {
+  try {
+    return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
+  } catch (error) {
+    if (/wmic os get Caption/.test(error.message)) {
+      return "Windows <version undetectable>";
+    }
+
+    throw error;
+  }
+}
+
+exports.getUserAgent = getUserAgent;
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-node/index.js.map b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-node/index.js.map
new file mode 100644
index 0000000..aff09ec
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-node/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/node.js"],"sourcesContent":["import osName from \"os-name\";\nexport function getUserAgent() {\n    try {\n        return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;\n    }\n    catch (error) {\n        if (/wmic os get Caption/.test(error.message)) {\n            return \"Windows <version undetectable>\";\n        }\n        throw error;\n    }\n}\n"],"names":["getUserAgent","process","version","substr","osName","arch","error","test","message"],"mappings":";;;;;;;;AACO,SAASA,YAAT,GAAwB;MACvB;WACQ,WAAUC,OAAO,CAACC,OAAR,CAAgBC,MAAhB,CAAuB,CAAvB,CAA0B,KAAIC,MAAM,EAAG,KAAIH,OAAO,CAACI,IAAK,GAA1E;GADJ,CAGA,OAAOC,KAAP,EAAc;QACN,sBAAsBC,IAAtB,CAA2BD,KAAK,CAACE,OAAjC,CAAJ,EAA+C;aACpC,gCAAP;;;UAEEF,KAAN;;;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/browser.js b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/browser.js
new file mode 100644
index 0000000..6f52232
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/browser.js
@@ -0,0 +1,3 @@
+export function getUserAgent() {
+    return navigator.userAgent;
+}
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/index.js b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/index.js
new file mode 100644
index 0000000..c6253f5
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/index.js
@@ -0,0 +1 @@
+export { getUserAgent } from "./node";
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/node.js b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/node.js
new file mode 100644
index 0000000..8b70a03
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-src/node.js
@@ -0,0 +1,12 @@
+import osName from "os-name";
+export function getUserAgent() {
+    try {
+        return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
+    }
+    catch (error) {
+        if (/wmic os get Caption/.test(error.message)) {
+            return "Windows <version undetectable>";
+        }
+        throw error;
+    }
+}
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/browser.d.ts b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/browser.d.ts
new file mode 100644
index 0000000..a7bb1c4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/browser.d.ts
@@ -0,0 +1 @@
+export declare function getUserAgent(): string;
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/index.d.ts b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/index.d.ts
new file mode 100644
index 0000000..c6253f5
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/index.d.ts
@@ -0,0 +1 @@
+export { getUserAgent } from "./node";
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/node.d.ts b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/node.d.ts
new file mode 100644
index 0000000..a7bb1c4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-types/node.d.ts
@@ -0,0 +1 @@
+export declare function getUserAgent(): string;
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-web/index.js b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-web/index.js
new file mode 100644
index 0000000..11ec79b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-web/index.js
@@ -0,0 +1,6 @@
+function getUserAgent() {
+    return navigator.userAgent;
+}
+
+export { getUserAgent };
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-web/index.js.map b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-web/index.js.map
new file mode 100644
index 0000000..549407e
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/dist-web/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/browser.js"],"sourcesContent":["export function getUserAgent() {\n    return navigator.userAgent;\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,GAAG;IAC3B,OAAO,SAAS,CAAC,SAAS,CAAC;CAC9B;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/package.json b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/package.json
new file mode 100644
index 0000000..dbb27cf
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/node_modules/universal-user-agent/package.json
@@ -0,0 +1,65 @@
+{
+  "_from": "universal-user-agent@^4.0.0",
+  "_id": "universal-user-agent@4.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==",
+  "_location": "/@octokit/request/universal-user-agent",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "universal-user-agent@^4.0.0",
+    "name": "universal-user-agent",
+    "escapedName": "universal-user-agent",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/request"
+  ],
+  "_resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz",
+  "_shasum": "27da2ec87e32769619f68a14996465ea1cb9df16",
+  "_spec": "universal-user-agent@^4.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "bugs": {
+    "url": "https://github.com/gr2m/universal-user-agent/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "os-name": "^3.1.0"
+  },
+  "deprecated": false,
+  "description": "Get a user agent string in both browser and node",
+  "devDependencies": {
+    "@gr2m/pika-plugin-build-web": "^0.6.0-issue-84.1",
+    "@pika/pack": "^0.5.0",
+    "@pika/plugin-build-node": "^0.6.0",
+    "@pika/plugin-ts-standard-pkg": "^0.6.0",
+    "@types/jest": "^24.0.18",
+    "jest": "^24.9.0",
+    "prettier": "^1.18.2",
+    "semantic-release": "^15.9.15",
+    "ts-jest": "^24.0.2",
+    "typescript": "^3.6.2"
+  },
+  "files": [
+    "dist-*/",
+    "bin/"
+  ],
+  "homepage": "https://github.com/gr2m/universal-user-agent#readme",
+  "keywords": [],
+  "license": "ISC",
+  "main": "dist-node/index.js",
+  "module": "dist-web/index.js",
+  "name": "universal-user-agent",
+  "pika": true,
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gr2m/universal-user-agent.git"
+  },
+  "sideEffects": false,
+  "source": "dist-src/index.js",
+  "types": "dist-types/index.d.ts",
+  "version": "4.0.0"
+}
diff --git a/setup-maven/node_modules/@octokit/request/package.json b/setup-maven/node_modules/@octokit/request/package.json
new file mode 100644
index 0000000..2174f8b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/request/package.json
@@ -0,0 +1,93 @@
+{
+  "_from": "@octokit/request@^5.0.0",
+  "_id": "@octokit/request@5.3.1",
+  "_inBundle": false,
+  "_integrity": "sha512-5/X0AL1ZgoU32fAepTfEoggFinO3rxsMLtzhlUX+RctLrusn/CApJuGFCd0v7GMFhF+8UiCsTTfsu7Fh1HnEJg==",
+  "_location": "/@octokit/request",
+  "_phantomChildren": {
+    "os-name": "3.1.0"
+  },
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@octokit/request@^5.0.0",
+    "name": "@octokit/request",
+    "escapedName": "@octokit%2frequest",
+    "scope": "@octokit",
+    "rawSpec": "^5.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^5.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/graphql",
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.3.1.tgz",
+  "_shasum": "3a1ace45e6f88b1be4749c5da963b3a3b4a2f120",
+  "_spec": "@octokit/request@^5.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/graphql",
+  "bugs": {
+    "url": "https://github.com/octokit/request.js/issues"
+  },
+  "bundleDependencies": false,
+  "deno": "dist-web/index.js",
+  "dependencies": {
+    "@octokit/endpoint": "^5.5.0",
+    "@octokit/request-error": "^1.0.1",
+    "@octokit/types": "^2.0.0",
+    "deprecation": "^2.0.0",
+    "is-plain-object": "^3.0.0",
+    "node-fetch": "^2.3.0",
+    "once": "^1.4.0",
+    "universal-user-agent": "^4.0.0"
+  },
+  "deprecated": false,
+  "description": "Send parameterized requests to GitHub’s APIs with sensible defaults in browsers and Node",
+  "devDependencies": {
+    "@octokit/auth-app": "^2.1.2",
+    "@pika/pack": "^0.5.0",
+    "@pika/plugin-build-node": "^0.7.0",
+    "@pika/plugin-build-web": "^0.7.0",
+    "@pika/plugin-ts-standard-pkg": "^0.7.0",
+    "@types/fetch-mock": "^7.2.4",
+    "@types/jest": "^24.0.12",
+    "@types/lolex": "^3.1.1",
+    "@types/node": "^12.0.3",
+    "@types/node-fetch": "^2.3.3",
+    "@types/once": "^1.4.0",
+    "fetch-mock": "^7.2.0",
+    "jest": "^24.7.1",
+    "lolex": "^5.0.0",
+    "prettier": "^1.17.0",
+    "semantic-release": "^15.13.27",
+    "semantic-release-plugin-update-version-in-files": "^1.0.0",
+    "ts-jest": "^24.0.2",
+    "typescript": "^3.4.5"
+  },
+  "files": [
+    "dist-*/",
+    "bin/"
+  ],
+  "homepage": "https://github.com/octokit/request.js#readme",
+  "keywords": [
+    "octokit",
+    "github",
+    "api",
+    "request"
+  ],
+  "license": "MIT",
+  "main": "dist-node/index.js",
+  "name": "@octokit/request",
+  "pika": true,
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/octokit/request.js.git"
+  },
+  "sideEffects": false,
+  "source": "dist-src/index.js",
+  "types": "dist-types/index.d.ts",
+  "version": "5.3.1"
+}
diff --git a/setup-maven/node_modules/@octokit/rest/LICENSE b/setup-maven/node_modules/@octokit/rest/LICENSE
new file mode 100644
index 0000000..4c0d268
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/LICENSE
@@ -0,0 +1,22 @@
+The MIT License
+
+Copyright (c) 2012 Cloud9 IDE, Inc. (Mike de Boer)
+Copyright (c) 2017-2018 Octokit contributors
+
+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/setup-maven/node_modules/@octokit/rest/README.md b/setup-maven/node_modules/@octokit/rest/README.md
new file mode 100644
index 0000000..2a31824
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/README.md
@@ -0,0 +1,46 @@
+# rest.js
+
+> GitHub REST API client for JavaScript
+
+[![@latest](https://img.shields.io/npm/v/@octokit/rest.svg)](https://www.npmjs.com/package/@octokit/rest)
+![Build Status](https://github.com/octokit/rest.js/workflows/Test/badge.svg)
+[![Greenkeeper](https://badges.greenkeeper.io/octokit/rest.js.svg)](https://greenkeeper.io/)
+
+## Installation
+
+```shell
+npm install @octokit/rest
+```
+
+## Usage
+
+```js
+const Octokit = require("@octokit/rest");
+const octokit = new Octokit();
+
+// Compare: https://developer.github.com/v3/repos/#list-organization-repositories
+octokit.repos
+  .listForOrg({
+    org: "octokit",
+    type: "public"
+  })
+  .then(({ data }) => {
+    // handle data
+  });
+```
+
+See https://octokit.github.io/rest.js/ for full documentation.
+
+## Contributing
+
+We would love you to contribute to `@octokit/rest`, pull requests are very welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for more information.
+
+## Credits
+
+`@octokit/rest` was originally created as [`node-github`](https://www.npmjs.com/package/github) in 2012 by Mike de Boer from Cloud9 IDE, Inc.
+
+It was adopted and renamed by GitHub in 2017
+
+## LICENSE
+
+[MIT](LICENSE)
diff --git a/setup-maven/node_modules/@octokit/rest/index.d.ts b/setup-maven/node_modules/@octokit/rest/index.d.ts
new file mode 100644
index 0000000..a455028
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/index.d.ts
@@ -0,0 +1,36064 @@
+/**
+ * This file is generated based on https://github.com/octokit/routes/ & "npm run build:ts".
+ *
+ * DO NOT EDIT MANUALLY.
+ */
+
+/**
+ * This declaration file requires TypeScript 3.1 or above.
+ */
+
+/// <reference lib="esnext.asynciterable" />
+
+import * as http from "http";
+
+declare namespace Octokit {
+  type json = any;
+  type date = string;
+
+  export interface Static {
+    plugin(plugin: Plugin): Static;
+    new (options?: Octokit.Options): Octokit;
+  }
+
+  export interface Response<T> {
+    /** This is the data you would see in https://developer.github.com/v3/ */
+    data: T;
+
+    /** Response status number */
+    status: number;
+
+    /** Response headers */
+    headers: {
+      date: string;
+      "x-ratelimit-limit": string;
+      "x-ratelimit-remaining": string;
+      "x-ratelimit-reset": string;
+      "x-Octokit-request-id": string;
+      "x-Octokit-media-type": string;
+      link: string;
+      "last-modified": string;
+      etag: string;
+      status: string;
+    };
+
+    [Symbol.iterator](): Iterator<any>;
+  }
+
+  export type AnyResponse = Response<any>;
+
+  export interface EmptyParams {}
+
+  export interface Options {
+    auth?:
+      | string
+      | { username: string; password: string; on2fa: () => Promise<string> }
+      | { clientId: string; clientSecret: string }
+      | { (): string | Promise<string> };
+    userAgent?: string;
+    previews?: string[];
+    baseUrl?: string;
+    log?: {
+      debug?: (message: string, info?: object) => void;
+      info?: (message: string, info?: object) => void;
+      warn?: (message: string, info?: object) => void;
+      error?: (message: string, info?: object) => void;
+    };
+    request?: {
+      agent?: http.Agent;
+      timeout?: number;
+    };
+    timeout?: number; // Deprecated
+    headers?: { [header: string]: any }; // Deprecated
+    agent?: http.Agent; // Deprecated
+    [option: string]: any;
+  }
+
+  export type RequestMethod =
+    | "DELETE"
+    | "GET"
+    | "HEAD"
+    | "PATCH"
+    | "POST"
+    | "PUT";
+
+  export interface EndpointOptions {
+    baseUrl?: string;
+    method?: RequestMethod;
+    url?: string;
+    headers?: { [header: string]: any };
+    data?: any;
+    request?: { [option: string]: any };
+    [parameter: string]: any;
+  }
+
+  export interface RequestOptions {
+    method?: RequestMethod;
+    url?: string;
+    headers?: RequestHeaders;
+    body?: any;
+    request?: OctokitRequestOptions;
+    /**
+     * Media type options, see {@link https://developer.github.com/v3/media/|GitHub Developer Guide}
+     */
+    mediaType?: {
+      /**
+       * `json` by default. Can be `raw`, `text`, `html`, `full`, `diff`, `patch`, `sha`, `base64`. Depending on endpoint
+       */
+      format?: string;
+
+      /**
+       * Custom media type names of {@link https://developer.github.com/v3/media/|API Previews} without the `-preview` suffix.
+       * Example for single preview: `['squirrel-girl']`.
+       * Example for multiple previews: `['squirrel-girl', 'mister-fantastic']`.
+       */
+      previews?: string[];
+    };
+  }
+
+  export type RequestHeaders = {
+    /**
+     * Avoid setting `accept`, use `mediaFormat.{format|previews}` instead.
+     */
+    accept?: string;
+    /**
+     * Use `authorization` to send authenticated request, remember `token ` / `bearer ` prefixes. Example: `token 1234567890abcdef1234567890abcdef12345678`
+     */
+    authorization?: string;
+    /**
+     * `user-agent` is set do a default and can be overwritten as needed.
+     */
+    "user-agent"?: string;
+
+    [header: string]: string | number | undefined;
+  };
+
+  export type OctokitRequestOptions = {
+    /**
+     * Node only. Useful for custom proxy, certificate, or dns lookup.
+     */
+    agent?: http.Agent;
+    /**
+     * Custom replacement for built-in fetch method. Useful for testing or request hooks.
+     */
+    fetch?: any;
+    /**
+     * Use an `AbortController` instance to cancel a request. In node you can only cancel streamed requests.
+     */
+    signal?: any;
+    /**
+     * Node only. Request/response timeout in ms, it resets on redirect. 0 to disable (OS limit applies). `options.request.signal` is recommended instead.
+     */
+    timeout?: number;
+
+    [option: string]: any;
+  };
+
+  export interface Log {
+    debug: (message: string, additionalInfo?: object) => void;
+    info: (message: string, additionalInfo?: object) => void;
+    warn: (message: string, additionalInfo?: object) => void;
+    error: (message: string, additionalInfo?: object) => void;
+  }
+
+  export interface Endpoint {
+    (
+      Route: string,
+      EndpointOptions?: Octokit.EndpointOptions
+    ): Octokit.RequestOptions;
+    (EndpointOptions: Octokit.EndpointOptions): Octokit.RequestOptions;
+    /**
+     * Current default options
+     */
+    DEFAULTS: Octokit.EndpointOptions;
+    /**
+     * Get the defaulted endpoint options, but without parsing them into request options:
+     */
+    merge(
+      Route: string,
+      EndpointOptions?: Octokit.EndpointOptions
+    ): Octokit.RequestOptions;
+    merge(EndpointOptions: Octokit.EndpointOptions): Octokit.RequestOptions;
+    /**
+     * Stateless method to turn endpoint options into request options. Calling endpoint(options) is the same as calling endpoint.parse(endpoint.merge(options)).
+     */
+    parse(EndpointOptions: Octokit.EndpointOptions): Octokit.RequestOptions;
+    /**
+     * Merges existing defaults with passed options and returns new endpoint() method with new defaults
+     */
+    defaults(EndpointOptions: Octokit.EndpointOptions): Octokit.Endpoint;
+  }
+
+  export interface Request {
+    (Route: string, EndpointOptions?: Octokit.EndpointOptions): Promise<
+      Octokit.AnyResponse
+    >;
+    (EndpointOptions: Octokit.EndpointOptions): Promise<Octokit.AnyResponse>;
+    endpoint: Octokit.Endpoint;
+  }
+
+  export interface AuthBasic {
+    type: "basic";
+    username: string;
+    password: string;
+  }
+
+  export interface AuthOAuthToken {
+    type: "oauth";
+    token: string;
+  }
+
+  export interface AuthOAuthSecret {
+    type: "oauth";
+    key: string;
+    secret: string;
+  }
+
+  export interface AuthUserToken {
+    type: "token";
+    token: string;
+  }
+
+  export interface AuthJWT {
+    type: "app";
+    token: string;
+  }
+
+  export type Link = { link: string } | { headers: { link: string } } | string;
+
+  export interface Callback<T> {
+    (error: Error | null, result: T): any;
+  }
+
+  export type Plugin = (octokit: Octokit, options: Octokit.Options) => void;
+
+  // See https://github.com/octokit/request.js#request
+  export type HookOptions = {
+    baseUrl: string;
+    headers: { [header: string]: string };
+    method: string;
+    url: string;
+    data: any;
+    // See https://github.com/bitinn/node-fetch#options
+    request: {
+      follow?: number;
+      timeout?: number;
+      compress?: boolean;
+      size?: number;
+      agent?: string | null;
+    };
+    [index: string]: any;
+  };
+
+  export type HookError = Error & {
+    status: number;
+    headers: { [header: string]: string };
+    documentation_url?: string;
+    errors?: [
+      {
+        resource: string;
+        field: string;
+        code: string;
+      }
+    ];
+  };
+
+  export interface Paginate {
+    (
+      Route: string,
+      EndpointOptions?: Octokit.EndpointOptions,
+      callback?: (response: Octokit.AnyResponse, done: () => void) => any
+    ): Promise<any[]>;
+    (
+      EndpointOptions: Octokit.EndpointOptions,
+      callback?: (response: Octokit.AnyResponse, done: () => void) => any
+    ): Promise<any[]>;
+    iterator: (
+      EndpointOptions: Octokit.EndpointOptions
+    ) => AsyncIterableIterator<Octokit.AnyResponse>;
+  }
+
+  // response types
+  type UsersUpdateAuthenticatedResponsePlan = {
+    collaborators: number;
+    name: string;
+    private_repos: number;
+    space: number;
+  };
+  type UsersUpdateAuthenticatedResponse = {
+    avatar_url: string;
+    bio: string;
+    blog: string;
+    collaborators: number;
+    company: string;
+    created_at: string;
+    disk_usage: number;
+    email: string;
+    events_url: string;
+    followers: number;
+    followers_url: string;
+    following: number;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    hireable: boolean;
+    html_url: string;
+    id: number;
+    location: string;
+    login: string;
+    name: string;
+    node_id: string;
+    organizations_url: string;
+    owned_private_repos: number;
+    plan: UsersUpdateAuthenticatedResponsePlan;
+    private_gists: number;
+    public_gists: number;
+    public_repos: number;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    total_private_repos: number;
+    two_factor_authentication: boolean;
+    type: string;
+    updated_at: string;
+    url: string;
+  };
+  type UsersTogglePrimaryEmailVisibilityResponseItem = {
+    email: string;
+    primary: boolean;
+    verified: boolean;
+    visibility: string;
+  };
+  type UsersListPublicKeysForUserResponseItem = { id: number; key: string };
+  type UsersListPublicKeysResponseItem = {
+    created_at: string;
+    id: number;
+    key: string;
+    read_only: boolean;
+    title: string;
+    url: string;
+    verified: boolean;
+  };
+  type UsersListPublicEmailsResponseItem = {
+    email: string;
+    primary: boolean;
+    verified: boolean;
+    visibility: string;
+  };
+  type UsersListGpgKeysForUserResponseItemSubkeysItem = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<any>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: number;
+    public_key: string;
+    subkeys: Array<any>;
+  };
+  type UsersListGpgKeysForUserResponseItemEmailsItem = {
+    email: string;
+    verified: boolean;
+  };
+  type UsersListGpgKeysForUserResponseItem = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<UsersListGpgKeysForUserResponseItemEmailsItem>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: null;
+    public_key: string;
+    subkeys: Array<UsersListGpgKeysForUserResponseItemSubkeysItem>;
+  };
+  type UsersListGpgKeysResponseItemSubkeysItem = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<any>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: number;
+    public_key: string;
+    subkeys: Array<any>;
+  };
+  type UsersListGpgKeysResponseItemEmailsItem = {
+    email: string;
+    verified: boolean;
+  };
+  type UsersListGpgKeysResponseItem = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<UsersListGpgKeysResponseItemEmailsItem>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: null;
+    public_key: string;
+    subkeys: Array<UsersListGpgKeysResponseItemSubkeysItem>;
+  };
+  type UsersListFollowingForUserResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type UsersListFollowingForAuthenticatedUserResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type UsersListFollowersForUserResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type UsersListFollowersForAuthenticatedUserResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type UsersListEmailsResponseItem = {
+    email: string;
+    primary: boolean;
+    verified: boolean;
+    visibility: string;
+  };
+  type UsersListBlockedResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type UsersListResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type UsersGetPublicKeyResponse = {
+    created_at: string;
+    id: number;
+    key: string;
+    read_only: boolean;
+    title: string;
+    url: string;
+    verified: boolean;
+  };
+  type UsersGetGpgKeyResponseSubkeysItem = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<any>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: number;
+    public_key: string;
+    subkeys: Array<any>;
+  };
+  type UsersGetGpgKeyResponseEmailsItem = { email: string; verified: boolean };
+  type UsersGetGpgKeyResponse = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<UsersGetGpgKeyResponseEmailsItem>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: null;
+    public_key: string;
+    subkeys: Array<UsersGetGpgKeyResponseSubkeysItem>;
+  };
+  type UsersGetContextForUserResponseContextsItem = {
+    message: string;
+    octicon: string;
+  };
+  type UsersGetContextForUserResponse = {
+    contexts: Array<UsersGetContextForUserResponseContextsItem>;
+  };
+  type UsersGetByUsernameResponsePlan = {
+    collaborators: number;
+    name: string;
+    private_repos: number;
+    space: number;
+  };
+  type UsersGetByUsernameResponse = {
+    avatar_url: string;
+    bio: string;
+    blog: string;
+    company: string;
+    created_at: string;
+    email: string;
+    events_url: string;
+    followers: number;
+    followers_url: string;
+    following: number;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    hireable: boolean;
+    html_url: string;
+    id: number;
+    location: string;
+    login: string;
+    name: string;
+    node_id: string;
+    organizations_url: string;
+    public_gists: number;
+    public_repos: number;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    updated_at: string;
+    url: string;
+    plan?: UsersGetByUsernameResponsePlan;
+  };
+  type UsersGetAuthenticatedResponsePlan = {
+    collaborators: number;
+    name: string;
+    private_repos: number;
+    space: number;
+  };
+  type UsersGetAuthenticatedResponse = {
+    avatar_url: string;
+    bio: string;
+    blog: string;
+    collaborators?: number;
+    company: string;
+    created_at: string;
+    disk_usage?: number;
+    email: string;
+    events_url: string;
+    followers: number;
+    followers_url: string;
+    following: number;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    hireable: boolean;
+    html_url: string;
+    id: number;
+    location: string;
+    login: string;
+    name: string;
+    node_id: string;
+    organizations_url: string;
+    owned_private_repos?: number;
+    plan?: UsersGetAuthenticatedResponsePlan;
+    private_gists?: number;
+    public_gists: number;
+    public_repos: number;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    total_private_repos?: number;
+    two_factor_authentication?: boolean;
+    type: string;
+    updated_at: string;
+    url: string;
+  };
+  type UsersCreatePublicKeyResponse = {
+    created_at: string;
+    id: number;
+    key: string;
+    read_only: boolean;
+    title: string;
+    url: string;
+    verified: boolean;
+  };
+  type UsersCreateGpgKeyResponseSubkeysItem = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<any>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: number;
+    public_key: string;
+    subkeys: Array<any>;
+  };
+  type UsersCreateGpgKeyResponseEmailsItem = {
+    email: string;
+    verified: boolean;
+  };
+  type UsersCreateGpgKeyResponse = {
+    can_certify: boolean;
+    can_encrypt_comms: boolean;
+    can_encrypt_storage: boolean;
+    can_sign: boolean;
+    created_at: string;
+    emails: Array<UsersCreateGpgKeyResponseEmailsItem>;
+    expires_at: null;
+    id: number;
+    key_id: string;
+    primary_key_id: null;
+    public_key: string;
+    subkeys: Array<UsersCreateGpgKeyResponseSubkeysItem>;
+  };
+  type UsersAddEmailsResponseItem = {
+    email: string;
+    primary: boolean;
+    verified: boolean;
+    visibility: string | null;
+  };
+  type TeamsUpdateDiscussionCommentResponseReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsUpdateDiscussionCommentResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsUpdateDiscussionCommentResponse = {
+    author: TeamsUpdateDiscussionCommentResponseAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    created_at: string;
+    discussion_url: string;
+    html_url: string;
+    last_edited_at: string;
+    node_id: string;
+    number: number;
+    reactions: TeamsUpdateDiscussionCommentResponseReactions;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsUpdateDiscussionResponseReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsUpdateDiscussionResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsUpdateDiscussionResponse = {
+    author: TeamsUpdateDiscussionResponseAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    comments_count: number;
+    comments_url: string;
+    created_at: string;
+    html_url: string;
+    last_edited_at: string;
+    node_id: string;
+    number: number;
+    pinned: boolean;
+    private: boolean;
+    reactions: TeamsUpdateDiscussionResponseReactions;
+    team_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsUpdateResponseOrganization = {
+    avatar_url: string;
+    blog: string;
+    company: string;
+    created_at: string;
+    description: string;
+    email: string;
+    events_url: string;
+    followers: number;
+    following: number;
+    has_organization_projects: boolean;
+    has_repository_projects: boolean;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_verified: boolean;
+    issues_url: string;
+    location: string;
+    login: string;
+    members_url: string;
+    name: string;
+    node_id: string;
+    public_gists: number;
+    public_members_url: string;
+    public_repos: number;
+    repos_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsUpdateResponse = {
+    created_at: string;
+    description: string;
+    html_url: string;
+    id: number;
+    members_count: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    organization: TeamsUpdateResponseOrganization;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repos_count: number;
+    repositories_url: string;
+    slug: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsReviewProjectResponsePermissions = {
+    admin: boolean;
+    read: boolean;
+    write: boolean;
+  };
+  type TeamsReviewProjectResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsReviewProjectResponse = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: TeamsReviewProjectResponseCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    organization_permission: string;
+    owner_url: string;
+    permissions: TeamsReviewProjectResponsePermissions;
+    private: boolean;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsListReposResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type TeamsListReposResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsListReposResponseItemLicense = {
+    key: string;
+    name: string;
+    node_id: string;
+    spdx_id: string;
+    url: string;
+  };
+  type TeamsListReposResponseItem = {
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    license: TeamsListReposResponseItemLicense;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: TeamsListReposResponseItemOwner;
+    permissions: TeamsListReposResponseItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type TeamsListProjectsResponseItemPermissions = {
+    admin: boolean;
+    read: boolean;
+    write: boolean;
+  };
+  type TeamsListProjectsResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsListProjectsResponseItem = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: TeamsListProjectsResponseItemCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    organization_permission: string;
+    owner_url: string;
+    permissions: TeamsListProjectsResponseItemPermissions;
+    private: boolean;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsListPendingInvitationsResponseItemInviter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsListPendingInvitationsResponseItem = {
+    created_at: string;
+    email: string;
+    id: number;
+    invitation_team_url: string;
+    inviter: TeamsListPendingInvitationsResponseItemInviter;
+    login: string;
+    role: string;
+    team_count: number;
+  };
+  type TeamsListMembersResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsListForAuthenticatedUserResponseItemOrganization = {
+    avatar_url: string;
+    blog: string;
+    company: string;
+    created_at: string;
+    description: string;
+    email: string;
+    events_url: string;
+    followers: number;
+    following: number;
+    has_organization_projects: boolean;
+    has_repository_projects: boolean;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_verified: boolean;
+    issues_url: string;
+    location: string;
+    login: string;
+    members_url: string;
+    name: string;
+    node_id: string;
+    public_gists: number;
+    public_members_url: string;
+    public_repos: number;
+    repos_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsListForAuthenticatedUserResponseItem = {
+    created_at: string;
+    description: string;
+    html_url: string;
+    id: number;
+    members_count: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    organization: TeamsListForAuthenticatedUserResponseItemOrganization;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repos_count: number;
+    repositories_url: string;
+    slug: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsListDiscussionsResponseItemReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsListDiscussionsResponseItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsListDiscussionsResponseItem = {
+    author: TeamsListDiscussionsResponseItemAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    comments_count: number;
+    comments_url: string;
+    created_at: string;
+    html_url: string;
+    last_edited_at: null;
+    node_id: string;
+    number: number;
+    pinned: boolean;
+    private: boolean;
+    reactions: TeamsListDiscussionsResponseItemReactions;
+    team_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsListDiscussionCommentsResponseItemReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsListDiscussionCommentsResponseItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsListDiscussionCommentsResponseItem = {
+    author: TeamsListDiscussionCommentsResponseItemAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    created_at: string;
+    discussion_url: string;
+    html_url: string;
+    last_edited_at: null;
+    node_id: string;
+    number: number;
+    reactions: TeamsListDiscussionCommentsResponseItemReactions;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsListChildResponseItemParent = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type TeamsListChildResponseItem = {
+    description: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: TeamsListChildResponseItemParent;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type TeamsListResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type TeamsGetMembershipResponse = {
+    role: string;
+    state: string;
+    url: string;
+  };
+  type TeamsGetDiscussionCommentResponseReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsGetDiscussionCommentResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsGetDiscussionCommentResponse = {
+    author: TeamsGetDiscussionCommentResponseAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    created_at: string;
+    discussion_url: string;
+    html_url: string;
+    last_edited_at: null;
+    node_id: string;
+    number: number;
+    reactions: TeamsGetDiscussionCommentResponseReactions;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsGetDiscussionResponseReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsGetDiscussionResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsGetDiscussionResponse = {
+    author: TeamsGetDiscussionResponseAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    comments_count: number;
+    comments_url: string;
+    created_at: string;
+    html_url: string;
+    last_edited_at: null;
+    node_id: string;
+    number: number;
+    pinned: boolean;
+    private: boolean;
+    reactions: TeamsGetDiscussionResponseReactions;
+    team_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsGetByNameResponseOrganization = {
+    avatar_url: string;
+    blog: string;
+    company: string;
+    created_at: string;
+    description: string;
+    email: string;
+    events_url: string;
+    followers: number;
+    following: number;
+    has_organization_projects: boolean;
+    has_repository_projects: boolean;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_verified: boolean;
+    issues_url: string;
+    location: string;
+    login: string;
+    members_url: string;
+    name: string;
+    node_id: string;
+    public_gists: number;
+    public_members_url: string;
+    public_repos: number;
+    repos_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsGetByNameResponse = {
+    created_at: string;
+    description: string;
+    html_url: string;
+    id: number;
+    members_count: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    organization: TeamsGetByNameResponseOrganization;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repos_count: number;
+    repositories_url: string;
+    slug: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsGetResponseOrganization = {
+    avatar_url: string;
+    blog: string;
+    company: string;
+    created_at: string;
+    description: string;
+    email: string;
+    events_url: string;
+    followers: number;
+    following: number;
+    has_organization_projects: boolean;
+    has_repository_projects: boolean;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_verified: boolean;
+    issues_url: string;
+    location: string;
+    login: string;
+    members_url: string;
+    name: string;
+    node_id: string;
+    public_gists: number;
+    public_members_url: string;
+    public_repos: number;
+    repos_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsGetResponse = {
+    created_at: string;
+    description: string;
+    html_url: string;
+    id: number;
+    members_count: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    organization: TeamsGetResponseOrganization;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repos_count: number;
+    repositories_url: string;
+    slug: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsCreateDiscussionCommentResponseReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsCreateDiscussionCommentResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsCreateDiscussionCommentResponse = {
+    author: TeamsCreateDiscussionCommentResponseAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    created_at: string;
+    discussion_url: string;
+    html_url: string;
+    last_edited_at: null;
+    node_id: string;
+    number: number;
+    reactions: TeamsCreateDiscussionCommentResponseReactions;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsCreateDiscussionResponseReactions = {
+    "+1": number;
+    "-1": number;
+    confused: number;
+    heart: number;
+    hooray: number;
+    laugh: number;
+    total_count: number;
+    url: string;
+  };
+  type TeamsCreateDiscussionResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsCreateDiscussionResponse = {
+    author: TeamsCreateDiscussionResponseAuthor;
+    body: string;
+    body_html: string;
+    body_version: string;
+    comments_count: number;
+    comments_url: string;
+    created_at: string;
+    html_url: string;
+    last_edited_at: null;
+    node_id: string;
+    number: number;
+    pinned: boolean;
+    private: boolean;
+    reactions: TeamsCreateDiscussionResponseReactions;
+    team_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsCreateResponseOrganization = {
+    avatar_url: string;
+    blog: string;
+    company: string;
+    created_at: string;
+    description: string;
+    email: string;
+    events_url: string;
+    followers: number;
+    following: number;
+    has_organization_projects: boolean;
+    has_repository_projects: boolean;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_verified: boolean;
+    issues_url: string;
+    location: string;
+    login: string;
+    members_url: string;
+    name: string;
+    node_id: string;
+    public_gists: number;
+    public_members_url: string;
+    public_repos: number;
+    repos_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsCreateResponse = {
+    created_at: string;
+    description: string;
+    html_url: string;
+    id: number;
+    members_count: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    organization: TeamsCreateResponseOrganization;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repos_count: number;
+    repositories_url: string;
+    slug: string;
+    updated_at: string;
+    url: string;
+  };
+  type TeamsCheckManagesRepoResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type TeamsCheckManagesRepoResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type TeamsCheckManagesRepoResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: TeamsCheckManagesRepoResponseOwner;
+    permissions: TeamsCheckManagesRepoResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type TeamsAddOrUpdateProjectResponse = {
+    documentation_url: string;
+    message: string;
+  };
+  type TeamsAddOrUpdateMembershipResponse = {
+    role: string;
+    state: string;
+    url: string;
+  };
+  type TeamsAddMemberResponseErrorsItem = {
+    code: string;
+    field: string;
+    resource: string;
+  };
+  type TeamsAddMemberResponse = {
+    errors: Array<TeamsAddMemberResponseErrorsItem>;
+    message: string;
+  };
+  type SearchUsersResponseItemsItem = {
+    avatar_url: string;
+    followers_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    score: number;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchUsersResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchUsersResponseItemsItem>;
+    total_count: number;
+  };
+  type SearchTopicsResponseItemsItem = {
+    created_at: string;
+    created_by: string;
+    curated: boolean;
+    description: string;
+    display_name: string;
+    featured: boolean;
+    name: string;
+    released: string;
+    score: number;
+    short_description: string;
+    updated_at: string;
+  };
+  type SearchTopicsResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchTopicsResponseItemsItem>;
+    total_count: number;
+  };
+  type SearchReposResponseItemsItemOwner = {
+    avatar_url: string;
+    gravatar_id: string;
+    id: number;
+    login: string;
+    node_id: string;
+    received_events_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchReposResponseItemsItem = {
+    created_at: string;
+    default_branch: string;
+    description: string;
+    fork: boolean;
+    forks_count: number;
+    full_name: string;
+    homepage: string;
+    html_url: string;
+    id: number;
+    language: string;
+    master_branch: string;
+    name: string;
+    node_id: string;
+    open_issues_count: number;
+    owner: SearchReposResponseItemsItemOwner;
+    private: boolean;
+    pushed_at: string;
+    score: number;
+    size: number;
+    stargazers_count: number;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type SearchReposResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchReposResponseItemsItem>;
+    total_count: number;
+  };
+  type SearchLabelsResponseItemsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    score: number;
+    url: string;
+  };
+  type SearchLabelsResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchLabelsResponseItemsItem>;
+    total_count: number;
+  };
+  type SearchIssuesAndPullRequestsResponseItemsItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchIssuesAndPullRequestsResponseItemsItemPullRequest = {
+    diff_url: null;
+    html_url: null;
+    patch_url: null;
+  };
+  type SearchIssuesAndPullRequestsResponseItemsItemLabelsItem = {
+    color: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type SearchIssuesAndPullRequestsResponseItemsItem = {
+    assignee: null;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<SearchIssuesAndPullRequestsResponseItemsItemLabelsItem>;
+    labels_url: string;
+    milestone: null;
+    node_id: string;
+    number: number;
+    pull_request: SearchIssuesAndPullRequestsResponseItemsItemPullRequest;
+    repository_url: string;
+    score: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: SearchIssuesAndPullRequestsResponseItemsItemUser;
+  };
+  type SearchIssuesAndPullRequestsResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchIssuesAndPullRequestsResponseItemsItem>;
+    total_count: number;
+  };
+  type SearchIssuesResponseItemsItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchIssuesResponseItemsItemPullRequest = {
+    diff_url: null;
+    html_url: null;
+    patch_url: null;
+  };
+  type SearchIssuesResponseItemsItemLabelsItem = {
+    color: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type SearchIssuesResponseItemsItem = {
+    assignee: null;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<SearchIssuesResponseItemsItemLabelsItem>;
+    labels_url: string;
+    milestone: null;
+    node_id: string;
+    number: number;
+    pull_request: SearchIssuesResponseItemsItemPullRequest;
+    repository_url: string;
+    score: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: SearchIssuesResponseItemsItemUser;
+  };
+  type SearchIssuesResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchIssuesResponseItemsItem>;
+    total_count: number;
+  };
+  type SearchCommitsResponseItemsItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchCommitsResponseItemsItemRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: SearchCommitsResponseItemsItemRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type SearchCommitsResponseItemsItemParentsItem = {
+    html_url: string;
+    sha: string;
+    url: string;
+  };
+  type SearchCommitsResponseItemsItemCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchCommitsResponseItemsItemCommitTree = { sha: string; url: string };
+  type SearchCommitsResponseItemsItemCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type SearchCommitsResponseItemsItemCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type SearchCommitsResponseItemsItemCommit = {
+    author: SearchCommitsResponseItemsItemCommitAuthor;
+    comment_count: number;
+    committer: SearchCommitsResponseItemsItemCommitCommitter;
+    message: string;
+    tree: SearchCommitsResponseItemsItemCommitTree;
+    url: string;
+  };
+  type SearchCommitsResponseItemsItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchCommitsResponseItemsItem = {
+    author: SearchCommitsResponseItemsItemAuthor;
+    comments_url: string;
+    commit: SearchCommitsResponseItemsItemCommit;
+    committer: SearchCommitsResponseItemsItemCommitter;
+    html_url: string;
+    parents: Array<SearchCommitsResponseItemsItemParentsItem>;
+    repository: SearchCommitsResponseItemsItemRepository;
+    score: number;
+    sha: string;
+    url: string;
+  };
+  type SearchCommitsResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchCommitsResponseItemsItem>;
+    total_count: number;
+  };
+  type SearchCodeResponseItemsItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type SearchCodeResponseItemsItemRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: SearchCodeResponseItemsItemRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type SearchCodeResponseItemsItem = {
+    git_url: string;
+    html_url: string;
+    name: string;
+    path: string;
+    repository: SearchCodeResponseItemsItemRepository;
+    score: number;
+    sha: string;
+    url: string;
+  };
+  type SearchCodeResponse = {
+    incomplete_results: boolean;
+    items: Array<SearchCodeResponseItemsItem>;
+    total_count: number;
+  };
+  type ReposUploadReleaseAssetResponseValueUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUploadReleaseAssetResponseValue = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposUploadReleaseAssetResponseValueUploader;
+    url: string;
+  };
+  type ReposUploadReleaseAssetResponse = {
+    value: ReposUploadReleaseAssetResponseValue;
+  };
+  type ReposUpdateReleaseAssetResponseUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateReleaseAssetResponse = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposUpdateReleaseAssetResponseUploader;
+    url: string;
+  };
+  type ReposUpdateReleaseResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateReleaseResponseAssetsItemUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateReleaseResponseAssetsItem = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposUpdateReleaseResponseAssetsItemUploader;
+    url: string;
+  };
+  type ReposUpdateReleaseResponse = {
+    assets: Array<ReposUpdateReleaseResponseAssetsItem>;
+    assets_url: string;
+    author: ReposUpdateReleaseResponseAuthor;
+    body: string;
+    created_at: string;
+    draft: boolean;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    prerelease: boolean;
+    published_at: string;
+    tag_name: string;
+    tarball_url: string;
+    target_commitish: string;
+    upload_url: string;
+    url: string;
+    zipball_url: string;
+  };
+  type ReposUpdateProtectedBranchRequiredStatusChecksResponse = {
+    contexts: Array<string>;
+    contexts_url: string;
+    strict: boolean;
+    url: string;
+  };
+  type ReposUpdateProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposUpdateProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictions = {
+    teams: Array<
+      ReposUpdateProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsTeamsItem
+    >;
+    teams_url: string;
+    url: string;
+    users: Array<
+      ReposUpdateProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsUsersItem
+    >;
+    users_url: string;
+  };
+  type ReposUpdateProtectedBranchPullRequestReviewEnforcementResponse = {
+    dismiss_stale_reviews: boolean;
+    dismissal_restrictions: ReposUpdateProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictions;
+    require_code_owner_reviews: boolean;
+    required_approving_review_count: number;
+    url: string;
+  };
+  type ReposUpdateInvitationResponseRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateInvitationResponseRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ReposUpdateInvitationResponseRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ReposUpdateInvitationResponseInviter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateInvitationResponseInvitee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateInvitationResponse = {
+    created_at: string;
+    html_url: string;
+    id: number;
+    invitee: ReposUpdateInvitationResponseInvitee;
+    inviter: ReposUpdateInvitationResponseInviter;
+    permissions: string;
+    repository: ReposUpdateInvitationResponseRepository;
+    url: string;
+  };
+  type ReposUpdateHookResponseLastResponse = {
+    code: null;
+    message: null;
+    status: string;
+  };
+  type ReposUpdateHookResponseConfig = {
+    content_type: string;
+    insecure_ssl: string;
+    url: string;
+  };
+  type ReposUpdateHookResponse = {
+    active: boolean;
+    config: ReposUpdateHookResponseConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    last_response: ReposUpdateHookResponseLastResponse;
+    name: string;
+    ping_url: string;
+    test_url: string;
+    type: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposUpdateFileResponseContentLinks = {
+    git: string;
+    html: string;
+    self: string;
+  };
+  type ReposUpdateFileResponseContent = {
+    _links: ReposUpdateFileResponseContentLinks;
+    download_url: string;
+    git_url: string;
+    html_url: string;
+    name: string;
+    path: string;
+    sha: string;
+    size: number;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateFileResponseCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposUpdateFileResponseCommitTree = { sha: string; url: string };
+  type ReposUpdateFileResponseCommitParentsItem = {
+    html_url: string;
+    sha: string;
+    url: string;
+  };
+  type ReposUpdateFileResponseCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposUpdateFileResponseCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposUpdateFileResponseCommit = {
+    author: ReposUpdateFileResponseCommitAuthor;
+    committer: ReposUpdateFileResponseCommitCommitter;
+    html_url: string;
+    message: string;
+    node_id: string;
+    parents: Array<ReposUpdateFileResponseCommitParentsItem>;
+    sha: string;
+    tree: ReposUpdateFileResponseCommitTree;
+    url: string;
+    verification: ReposUpdateFileResponseCommitVerification;
+  };
+  type ReposUpdateFileResponse = {
+    commit: ReposUpdateFileResponseCommit;
+    content: ReposUpdateFileResponseContent;
+  };
+  type ReposUpdateCommitCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateCommitCommentResponse = {
+    body: string;
+    commit_id: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    line: number;
+    node_id: string;
+    path: string;
+    position: number;
+    updated_at: string;
+    url: string;
+    user: ReposUpdateCommitCommentResponseUser;
+  };
+  type ReposUpdateBranchProtectionResponseRestrictionsUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRestrictionsTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRestrictionsAppsItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposUpdateBranchProtectionResponseRestrictionsAppsItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRestrictionsAppsItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposUpdateBranchProtectionResponseRestrictionsAppsItemOwner;
+    permissions: ReposUpdateBranchProtectionResponseRestrictionsAppsItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposUpdateBranchProtectionResponseRestrictions = {
+    apps: Array<ReposUpdateBranchProtectionResponseRestrictionsAppsItem>;
+    apps_url: string;
+    teams: Array<ReposUpdateBranchProtectionResponseRestrictionsTeamsItem>;
+    teams_url: string;
+    url: string;
+    users: Array<ReposUpdateBranchProtectionResponseRestrictionsUsersItem>;
+    users_url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRequiredStatusChecks = {
+    contexts: Array<string>;
+    contexts_url: string;
+    strict: boolean;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictions = {
+    teams: Array<
+      ReposUpdateBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsTeamsItem
+    >;
+    teams_url: string;
+    url: string;
+    users: Array<
+      ReposUpdateBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsUsersItem
+    >;
+    users_url: string;
+  };
+  type ReposUpdateBranchProtectionResponseRequiredPullRequestReviews = {
+    dismiss_stale_reviews: boolean;
+    dismissal_restrictions: ReposUpdateBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictions;
+    require_code_owner_reviews: boolean;
+    required_approving_review_count: number;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponseEnforceAdmins = {
+    enabled: boolean;
+    url: string;
+  };
+  type ReposUpdateBranchProtectionResponse = {
+    enforce_admins: ReposUpdateBranchProtectionResponseEnforceAdmins;
+    required_pull_request_reviews: ReposUpdateBranchProtectionResponseRequiredPullRequestReviews;
+    required_status_checks: ReposUpdateBranchProtectionResponseRequiredStatusChecks;
+    restrictions: ReposUpdateBranchProtectionResponseRestrictions;
+    url: string;
+  };
+  type ReposUpdateResponseSourcePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposUpdateResponseSourceOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateResponseSource = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposUpdateResponseSourceOwner;
+    permissions: ReposUpdateResponseSourcePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposUpdateResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposUpdateResponseParentPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposUpdateResponseParentOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateResponseParent = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposUpdateResponseParentOwner;
+    permissions: ReposUpdateResponseParentPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposUpdateResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateResponseOrganization = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposUpdateResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    organization: ReposUpdateResponseOrganization;
+    owner: ReposUpdateResponseOwner;
+    parent: ReposUpdateResponseParent;
+    permissions: ReposUpdateResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    source: ReposUpdateResponseSource;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposTransferResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposTransferResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposTransferResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposTransferResponseOwner;
+    permissions: ReposTransferResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponseFilesReadme = {
+    html_url: string;
+    url: string;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponseFilesPullRequestTemplate = {
+    html_url: string;
+    url: string;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponseFilesLicense = {
+    html_url: string;
+    key: string;
+    name: string;
+    spdx_id: string;
+    url: string;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponseFilesIssueTemplate = {
+    html_url: string;
+    url: string;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponseFilesContributing = {
+    html_url: string;
+    url: string;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponseFilesCodeOfConduct = {
+    html_url: string;
+    key: string;
+    name: string;
+    url: string;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponseFiles = {
+    code_of_conduct: ReposRetrieveCommunityProfileMetricsResponseFilesCodeOfConduct;
+    contributing: ReposRetrieveCommunityProfileMetricsResponseFilesContributing;
+    issue_template: ReposRetrieveCommunityProfileMetricsResponseFilesIssueTemplate;
+    license: ReposRetrieveCommunityProfileMetricsResponseFilesLicense;
+    pull_request_template: ReposRetrieveCommunityProfileMetricsResponseFilesPullRequestTemplate;
+    readme: ReposRetrieveCommunityProfileMetricsResponseFilesReadme;
+  };
+  type ReposRetrieveCommunityProfileMetricsResponse = {
+    description: string;
+    documentation: boolean;
+    files: ReposRetrieveCommunityProfileMetricsResponseFiles;
+    health_percentage: number;
+    updated_at: string;
+  };
+  type ReposRequestPageBuildResponse = { status: string; url: string };
+  type ReposReplaceTopicsResponse = { names: Array<string> };
+  type ReposReplaceProtectedBranchUserRestrictionsResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposReplaceProtectedBranchTeamRestrictionsResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposReplaceProtectedBranchAppRestrictionsResponseItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposReplaceProtectedBranchAppRestrictionsResponseItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposReplaceProtectedBranchAppRestrictionsResponseItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposReplaceProtectedBranchAppRestrictionsResponseItemOwner;
+    permissions: ReposReplaceProtectedBranchAppRestrictionsResponseItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposRemoveProtectedBranchUserRestrictionsResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposRemoveProtectedBranchTeamRestrictionsResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposRemoveProtectedBranchAppRestrictionsResponseItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposRemoveProtectedBranchAppRestrictionsResponseItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposRemoveProtectedBranchAppRestrictionsResponseItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposRemoveProtectedBranchAppRestrictionsResponseItemOwner;
+    permissions: ReposRemoveProtectedBranchAppRestrictionsResponseItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposMergeResponseParentsItem = { sha: string; url: string };
+  type ReposMergeResponseCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposMergeResponseCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposMergeResponseCommitTree = { sha: string; url: string };
+  type ReposMergeResponseCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposMergeResponseCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposMergeResponseCommit = {
+    author: ReposMergeResponseCommitAuthor;
+    comment_count: number;
+    committer: ReposMergeResponseCommitCommitter;
+    message: string;
+    tree: ReposMergeResponseCommitTree;
+    url: string;
+    verification: ReposMergeResponseCommitVerification;
+  };
+  type ReposMergeResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposMergeResponse = {
+    author: ReposMergeResponseAuthor;
+    comments_url: string;
+    commit: ReposMergeResponseCommit;
+    committer: ReposMergeResponseCommitter;
+    html_url: string;
+    node_id: string;
+    parents: Array<ReposMergeResponseParentsItem>;
+    sha: string;
+    url: string;
+  };
+  type ReposListUsersWithAccessToProtectedBranchResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListTopicsResponse = { names: Array<string> };
+  type ReposListTeamsWithAccessToProtectedBranchResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposListTeamsResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposListTagsResponseItemCommit = { sha: string; url: string };
+  type ReposListTagsResponseItem = {
+    commit: ReposListTagsResponseItemCommit;
+    name: string;
+    tarball_url: string;
+    zipball_url: string;
+  };
+  type ReposListStatusesForRefResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListStatusesForRefResponseItem = {
+    avatar_url: string;
+    context: string;
+    created_at: string;
+    creator: ReposListStatusesForRefResponseItemCreator;
+    description: string;
+    id: number;
+    node_id: string;
+    state: string;
+    target_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposListReleasesResponseItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListReleasesResponseItemAssetsItemUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListReleasesResponseItemAssetsItem = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposListReleasesResponseItemAssetsItemUploader;
+    url: string;
+  };
+  type ReposListReleasesResponseItem = {
+    assets: Array<ReposListReleasesResponseItemAssetsItem>;
+    assets_url: string;
+    author: ReposListReleasesResponseItemAuthor;
+    body: string;
+    created_at: string;
+    draft: boolean;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    prerelease: boolean;
+    published_at: string;
+    tag_name: string;
+    tarball_url: string;
+    target_commitish: string;
+    upload_url: string;
+    url: string;
+    zipball_url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemRequestedTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemRequestedReviewersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: ReposListPullRequestsAssociatedWithCommitResponseItemMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemHeadUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemHeadRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemHeadRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemHeadRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposListPullRequestsAssociatedWithCommitResponseItemHeadRepoOwner;
+    permissions: ReposListPullRequestsAssociatedWithCommitResponseItemHeadRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemHead = {
+    label: string;
+    ref: string;
+    repo: ReposListPullRequestsAssociatedWithCommitResponseItemHeadRepo;
+    sha: string;
+    user: ReposListPullRequestsAssociatedWithCommitResponseItemHeadUser;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemBaseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemBaseRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemBaseRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemBaseRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposListPullRequestsAssociatedWithCommitResponseItemBaseRepoOwner;
+    permissions: ReposListPullRequestsAssociatedWithCommitResponseItemBaseRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemBase = {
+    label: string;
+    ref: string;
+    repo: ReposListPullRequestsAssociatedWithCommitResponseItemBaseRepo;
+    sha: string;
+    user: ReposListPullRequestsAssociatedWithCommitResponseItemBaseUser;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksStatuses = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksSelf = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksReviewComments = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksReviewComment = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksIssue = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksHtml = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksCommits = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinksComments = {
+    href: string;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItemLinks = {
+    comments: ReposListPullRequestsAssociatedWithCommitResponseItemLinksComments;
+    commits: ReposListPullRequestsAssociatedWithCommitResponseItemLinksCommits;
+    html: ReposListPullRequestsAssociatedWithCommitResponseItemLinksHtml;
+    issue: ReposListPullRequestsAssociatedWithCommitResponseItemLinksIssue;
+    review_comment: ReposListPullRequestsAssociatedWithCommitResponseItemLinksReviewComment;
+    review_comments: ReposListPullRequestsAssociatedWithCommitResponseItemLinksReviewComments;
+    self: ReposListPullRequestsAssociatedWithCommitResponseItemLinksSelf;
+    statuses: ReposListPullRequestsAssociatedWithCommitResponseItemLinksStatuses;
+  };
+  type ReposListPullRequestsAssociatedWithCommitResponseItem = {
+    _links: ReposListPullRequestsAssociatedWithCommitResponseItemLinks;
+    active_lock_reason: string;
+    assignee: ReposListPullRequestsAssociatedWithCommitResponseItemAssignee;
+    assignees: Array<
+      ReposListPullRequestsAssociatedWithCommitResponseItemAssigneesItem
+    >;
+    author_association: string;
+    base: ReposListPullRequestsAssociatedWithCommitResponseItemBase;
+    body: string;
+    closed_at: string;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    diff_url: string;
+    draft: boolean;
+    head: ReposListPullRequestsAssociatedWithCommitResponseItemHead;
+    html_url: string;
+    id: number;
+    issue_url: string;
+    labels: Array<
+      ReposListPullRequestsAssociatedWithCommitResponseItemLabelsItem
+    >;
+    locked: boolean;
+    merge_commit_sha: string;
+    merged_at: string;
+    milestone: ReposListPullRequestsAssociatedWithCommitResponseItemMilestone;
+    node_id: string;
+    number: number;
+    patch_url: string;
+    requested_reviewers: Array<
+      ReposListPullRequestsAssociatedWithCommitResponseItemRequestedReviewersItem
+    >;
+    requested_teams: Array<
+      ReposListPullRequestsAssociatedWithCommitResponseItemRequestedTeamsItem
+    >;
+    review_comment_url: string;
+    review_comments_url: string;
+    state: string;
+    statuses_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: ReposListPullRequestsAssociatedWithCommitResponseItemUser;
+  };
+  type ReposListPublicResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPublicResponseItem = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ReposListPublicResponseItemOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ReposListProtectedBranchUserRestrictionsResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListProtectedBranchTeamRestrictionsResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposListPagesBuildsResponseItemPusher = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListPagesBuildsResponseItemError = { message: null };
+  type ReposListPagesBuildsResponseItem = {
+    commit: string;
+    created_at: string;
+    duration: number;
+    error: ReposListPagesBuildsResponseItemError;
+    pusher: ReposListPagesBuildsResponseItemPusher;
+    status: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposListLanguagesResponse = { C: number; Python: number };
+  type ReposListInvitationsForAuthenticatedUserResponseItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListInvitationsForAuthenticatedUserResponseItemRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ReposListInvitationsForAuthenticatedUserResponseItemRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ReposListInvitationsForAuthenticatedUserResponseItemInviter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListInvitationsForAuthenticatedUserResponseItemInvitee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListInvitationsForAuthenticatedUserResponseItem = {
+    created_at: string;
+    html_url: string;
+    id: number;
+    invitee: ReposListInvitationsForAuthenticatedUserResponseItemInvitee;
+    inviter: ReposListInvitationsForAuthenticatedUserResponseItemInviter;
+    permissions: string;
+    repository: ReposListInvitationsForAuthenticatedUserResponseItemRepository;
+    url: string;
+  };
+  type ReposListInvitationsResponseItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListInvitationsResponseItemRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ReposListInvitationsResponseItemRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ReposListInvitationsResponseItemInviter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListInvitationsResponseItemInvitee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListInvitationsResponseItem = {
+    created_at: string;
+    html_url: string;
+    id: number;
+    invitee: ReposListInvitationsResponseItemInvitee;
+    inviter: ReposListInvitationsResponseItemInviter;
+    permissions: string;
+    repository: ReposListInvitationsResponseItemRepository;
+    url: string;
+  };
+  type ReposListHooksResponseItemLastResponse = {
+    code: null;
+    message: null;
+    status: string;
+  };
+  type ReposListHooksResponseItemConfig = {
+    content_type: string;
+    insecure_ssl: string;
+    url: string;
+  };
+  type ReposListHooksResponseItem = {
+    active: boolean;
+    config: ReposListHooksResponseItemConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    last_response: ReposListHooksResponseItemLastResponse;
+    name: string;
+    ping_url: string;
+    test_url: string;
+    type: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposListForksResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposListForksResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListForksResponseItemLicense = {
+    key: string;
+    name: string;
+    node_id: string;
+    spdx_id: string;
+    url: string;
+  };
+  type ReposListForksResponseItem = {
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    license: ReposListForksResponseItemLicense;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposListForksResponseItemOwner;
+    permissions: ReposListForksResponseItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposListForOrgResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposListForOrgResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListForOrgResponseItemLicense = {
+    key: string;
+    name: string;
+    node_id: string;
+    spdx_id: string;
+    url: string;
+  };
+  type ReposListForOrgResponseItem = {
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    license: ReposListForOrgResponseItemLicense;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposListForOrgResponseItemOwner;
+    permissions: ReposListForOrgResponseItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposListDownloadsResponseItem = {
+    content_type: string;
+    description: string;
+    download_count: number;
+    html_url: string;
+    id: number;
+    name: string;
+    size: number;
+    url: string;
+  };
+  type ReposListDeploymentsResponseItemPayload = { deploy: string };
+  type ReposListDeploymentsResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListDeploymentsResponseItem = {
+    created_at: string;
+    creator: ReposListDeploymentsResponseItemCreator;
+    description: string;
+    environment: string;
+    id: number;
+    node_id: string;
+    original_environment: string;
+    payload: ReposListDeploymentsResponseItemPayload;
+    production_environment: boolean;
+    ref: string;
+    repository_url: string;
+    sha: string;
+    statuses_url: string;
+    task: string;
+    transient_environment: boolean;
+    updated_at: string;
+    url: string;
+  };
+  type ReposListDeploymentStatusesResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListDeploymentStatusesResponseItem = {
+    created_at: string;
+    creator: ReposListDeploymentStatusesResponseItemCreator;
+    deployment_url: string;
+    description: string;
+    environment: string;
+    environment_url: string;
+    id: number;
+    log_url: string;
+    node_id: string;
+    repository_url: string;
+    state: string;
+    target_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposListDeployKeysResponseItem = {
+    created_at: string;
+    id: number;
+    key: string;
+    read_only: boolean;
+    title: string;
+    url: string;
+    verified: boolean;
+  };
+  type ReposListContributorsResponseItem = {
+    avatar_url: string;
+    contributions: number;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListCommitsResponseItemParentsItem = { sha: string; url: string };
+  type ReposListCommitsResponseItemCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListCommitsResponseItemCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposListCommitsResponseItemCommitTree = { sha: string; url: string };
+  type ReposListCommitsResponseItemCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposListCommitsResponseItemCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposListCommitsResponseItemCommit = {
+    author: ReposListCommitsResponseItemCommitAuthor;
+    comment_count: number;
+    committer: ReposListCommitsResponseItemCommitCommitter;
+    message: string;
+    tree: ReposListCommitsResponseItemCommitTree;
+    url: string;
+    verification: ReposListCommitsResponseItemCommitVerification;
+  };
+  type ReposListCommitsResponseItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListCommitsResponseItem = {
+    author: ReposListCommitsResponseItemAuthor;
+    comments_url: string;
+    commit: ReposListCommitsResponseItemCommit;
+    committer: ReposListCommitsResponseItemCommitter;
+    html_url: string;
+    node_id: string;
+    parents: Array<ReposListCommitsResponseItemParentsItem>;
+    sha: string;
+    url: string;
+  };
+  type ReposListCommitCommentsResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListCommitCommentsResponseItem = {
+    body: string;
+    commit_id: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    line: number;
+    node_id: string;
+    path: string;
+    position: number;
+    updated_at: string;
+    url: string;
+    user: ReposListCommitCommentsResponseItemUser;
+  };
+  type ReposListCommentsForCommitResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListCommentsForCommitResponseItem = {
+    body: string;
+    commit_id: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    line: number;
+    node_id: string;
+    path: string;
+    position: number;
+    updated_at: string;
+    url: string;
+    user: ReposListCommentsForCommitResponseItemUser;
+  };
+  type ReposListCollaboratorsResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposListCollaboratorsResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    permissions: ReposListCollaboratorsResponseItemPermissions;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListBranchesForHeadCommitResponseItemCommit = {
+    sha: string;
+    url: string;
+  };
+  type ReposListBranchesForHeadCommitResponseItem = {
+    commit: ReposListBranchesForHeadCommitResponseItemCommit;
+    name: string;
+    protected: string;
+  };
+  type ReposListBranchesResponseItemProtectionRequiredStatusChecks = {
+    contexts: Array<string>;
+    enforcement_level: string;
+  };
+  type ReposListBranchesResponseItemProtection = {
+    enabled: boolean;
+    required_status_checks: ReposListBranchesResponseItemProtectionRequiredStatusChecks;
+  };
+  type ReposListBranchesResponseItemCommit = { sha: string; url: string };
+  type ReposListBranchesResponseItem = {
+    commit: ReposListBranchesResponseItemCommit;
+    name: string;
+    protected: boolean;
+    protection: ReposListBranchesResponseItemProtection;
+    protection_url: string;
+  };
+  type ReposListAssetsForReleaseResponseItemUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposListAssetsForReleaseResponseItem = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposListAssetsForReleaseResponseItemUploader;
+    url: string;
+  };
+  type ReposListAppsWithAccessToProtectedBranchResponseItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposListAppsWithAccessToProtectedBranchResponseItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposListAppsWithAccessToProtectedBranchResponseItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposListAppsWithAccessToProtectedBranchResponseItemOwner;
+    permissions: ReposListAppsWithAccessToProtectedBranchResponseItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposGetViewsResponseViewsItem = {
+    count: number;
+    timestamp: string;
+    uniques: number;
+  };
+  type ReposGetViewsResponse = {
+    count: number;
+    uniques: number;
+    views: Array<ReposGetViewsResponseViewsItem>;
+  };
+  type ReposGetUsersWithAccessToProtectedBranchResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetTopReferrersResponseItem = {
+    count: number;
+    referrer: string;
+    uniques: number;
+  };
+  type ReposGetTopPathsResponseItem = {
+    count: number;
+    path: string;
+    title: string;
+    uniques: number;
+  };
+  type ReposGetTeamsWithAccessToProtectedBranchResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposGetReleaseByTagResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetReleaseByTagResponseAssetsItemUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetReleaseByTagResponseAssetsItem = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposGetReleaseByTagResponseAssetsItemUploader;
+    url: string;
+  };
+  type ReposGetReleaseByTagResponse = {
+    assets: Array<ReposGetReleaseByTagResponseAssetsItem>;
+    assets_url: string;
+    author: ReposGetReleaseByTagResponseAuthor;
+    body: string;
+    created_at: string;
+    draft: boolean;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    prerelease: boolean;
+    published_at: string;
+    tag_name: string;
+    tarball_url: string;
+    target_commitish: string;
+    upload_url: string;
+    url: string;
+    zipball_url: string;
+  };
+  type ReposGetReleaseAssetResponseUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetReleaseAssetResponse = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposGetReleaseAssetResponseUploader;
+    url: string;
+  };
+  type ReposGetReleaseResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetReleaseResponseAssetsItemUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetReleaseResponseAssetsItem = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposGetReleaseResponseAssetsItemUploader;
+    url: string;
+  };
+  type ReposGetReleaseResponse = {
+    assets: Array<ReposGetReleaseResponseAssetsItem>;
+    assets_url: string;
+    author: ReposGetReleaseResponseAuthor;
+    body: string;
+    created_at: string;
+    draft: boolean;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    prerelease: boolean;
+    published_at: string;
+    tag_name: string;
+    tarball_url: string;
+    target_commitish: string;
+    upload_url: string;
+    url: string;
+    zipball_url: string;
+  };
+  type ReposGetReadmeResponseLinks = {
+    git: string;
+    html: string;
+    self: string;
+  };
+  type ReposGetReadmeResponse = {
+    _links: ReposGetReadmeResponseLinks;
+    content: string;
+    download_url: string;
+    encoding: string;
+    git_url: string;
+    html_url: string;
+    name: string;
+    path: string;
+    sha: string;
+    size: number;
+    type: string;
+    url: string;
+  };
+  type ReposGetProtectedBranchRestrictionsResponseUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetProtectedBranchRestrictionsResponseTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposGetProtectedBranchRestrictionsResponseAppsItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposGetProtectedBranchRestrictionsResponseAppsItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposGetProtectedBranchRestrictionsResponseAppsItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposGetProtectedBranchRestrictionsResponseAppsItemOwner;
+    permissions: ReposGetProtectedBranchRestrictionsResponseAppsItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposGetProtectedBranchRestrictionsResponse = {
+    apps: Array<ReposGetProtectedBranchRestrictionsResponseAppsItem>;
+    apps_url: string;
+    teams: Array<ReposGetProtectedBranchRestrictionsResponseTeamsItem>;
+    teams_url: string;
+    url: string;
+    users: Array<ReposGetProtectedBranchRestrictionsResponseUsersItem>;
+    users_url: string;
+  };
+  type ReposGetProtectedBranchRequiredStatusChecksResponse = {
+    contexts: Array<string>;
+    contexts_url: string;
+    strict: boolean;
+    url: string;
+  };
+  type ReposGetProtectedBranchRequiredSignaturesResponse = {
+    enabled: boolean;
+    url: string;
+  };
+  type ReposGetProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposGetProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictions = {
+    teams: Array<
+      ReposGetProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsTeamsItem
+    >;
+    teams_url: string;
+    url: string;
+    users: Array<
+      ReposGetProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictionsUsersItem
+    >;
+    users_url: string;
+  };
+  type ReposGetProtectedBranchPullRequestReviewEnforcementResponse = {
+    dismiss_stale_reviews: boolean;
+    dismissal_restrictions: ReposGetProtectedBranchPullRequestReviewEnforcementResponseDismissalRestrictions;
+    require_code_owner_reviews: boolean;
+    required_approving_review_count: number;
+    url: string;
+  };
+  type ReposGetProtectedBranchAdminEnforcementResponse = {
+    enabled: boolean;
+    url: string;
+  };
+  type ReposGetParticipationStatsResponse = {
+    all: Array<number>;
+    owner: Array<number>;
+  };
+  type ReposGetPagesBuildResponsePusher = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetPagesBuildResponseError = { message: null };
+  type ReposGetPagesBuildResponse = {
+    commit: string;
+    created_at: string;
+    duration: number;
+    error: ReposGetPagesBuildResponseError;
+    pusher: ReposGetPagesBuildResponsePusher;
+    status: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposGetPagesResponseSource = { branch: string; directory: string };
+  type ReposGetPagesResponse = {
+    cname: string;
+    custom_404: boolean;
+    html_url: string;
+    source: ReposGetPagesResponseSource;
+    status: string;
+    url: string;
+  };
+  type ReposGetLatestReleaseResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetLatestReleaseResponseAssetsItemUploader = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetLatestReleaseResponseAssetsItem = {
+    browser_download_url: string;
+    content_type: string;
+    created_at: string;
+    download_count: number;
+    id: number;
+    label: string;
+    name: string;
+    node_id: string;
+    size: number;
+    state: string;
+    updated_at: string;
+    uploader: ReposGetLatestReleaseResponseAssetsItemUploader;
+    url: string;
+  };
+  type ReposGetLatestReleaseResponse = {
+    assets: Array<ReposGetLatestReleaseResponseAssetsItem>;
+    assets_url: string;
+    author: ReposGetLatestReleaseResponseAuthor;
+    body: string;
+    created_at: string;
+    draft: boolean;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    prerelease: boolean;
+    published_at: string;
+    tag_name: string;
+    tarball_url: string;
+    target_commitish: string;
+    upload_url: string;
+    url: string;
+    zipball_url: string;
+  };
+  type ReposGetLatestPagesBuildResponsePusher = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetLatestPagesBuildResponseError = { message: null };
+  type ReposGetLatestPagesBuildResponse = {
+    commit: string;
+    created_at: string;
+    duration: number;
+    error: ReposGetLatestPagesBuildResponseError;
+    pusher: ReposGetLatestPagesBuildResponsePusher;
+    status: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposGetHookResponseLastResponse = {
+    code: null;
+    message: null;
+    status: string;
+  };
+  type ReposGetHookResponseConfig = {
+    content_type: string;
+    insecure_ssl: string;
+    url: string;
+  };
+  type ReposGetHookResponse = {
+    active: boolean;
+    config: ReposGetHookResponseConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    last_response: ReposGetHookResponseLastResponse;
+    name: string;
+    ping_url: string;
+    test_url: string;
+    type: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposGetDownloadResponse = {
+    content_type: string;
+    description: string;
+    download_count: number;
+    html_url: string;
+    id: number;
+    name: string;
+    size: number;
+    url: string;
+  };
+  type ReposGetDeploymentStatusResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetDeploymentStatusResponse = {
+    created_at: string;
+    creator: ReposGetDeploymentStatusResponseCreator;
+    deployment_url: string;
+    description: string;
+    environment: string;
+    environment_url: string;
+    id: number;
+    log_url: string;
+    node_id: string;
+    repository_url: string;
+    state: string;
+    target_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposGetDeploymentResponsePayload = { deploy: string };
+  type ReposGetDeploymentResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetDeploymentResponse = {
+    created_at: string;
+    creator: ReposGetDeploymentResponseCreator;
+    description: string;
+    environment: string;
+    id: number;
+    node_id: string;
+    original_environment: string;
+    payload: ReposGetDeploymentResponsePayload;
+    production_environment: boolean;
+    ref: string;
+    repository_url: string;
+    sha: string;
+    statuses_url: string;
+    task: string;
+    transient_environment: boolean;
+    updated_at: string;
+    url: string;
+  };
+  type ReposGetDeployKeyResponse = {
+    created_at: string;
+    id: number;
+    key: string;
+    read_only: boolean;
+    title: string;
+    url: string;
+    verified: boolean;
+  };
+  type ReposGetContributorsStatsResponseItemWeeksItem = {
+    a: number;
+    c: number;
+    d: number;
+    w: string;
+  };
+  type ReposGetContributorsStatsResponseItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetContributorsStatsResponseItem = {
+    author: ReposGetContributorsStatsResponseItemAuthor;
+    total: number;
+    weeks: Array<ReposGetContributorsStatsResponseItemWeeksItem>;
+  };
+  type ReposGetContentsResponseItemLinks = {
+    git: string;
+    html: string;
+    self: string;
+  };
+  type ReposGetContentsResponseItem = {
+    _links: ReposGetContentsResponseItemLinks;
+    download_url: string | null;
+    git_url: string;
+    html_url: string;
+    name: string;
+    path: string;
+    sha: string;
+    size: number;
+    type: string;
+    url: string;
+  };
+  type ReposGetContentsResponseLinks = {
+    git: string;
+    html: string;
+    self: string;
+  };
+  type ReposGetContentsResponse =
+    | {
+        _links: ReposGetContentsResponseLinks;
+        content?: string;
+        download_url: string | null;
+        encoding?: string;
+        git_url: string;
+        html_url: string;
+        name: string;
+        path: string;
+        sha: string;
+        size: number;
+        type: string;
+        url: string;
+        target?: string;
+        submodule_git_url?: string;
+      }
+    | Array<ReposGetContentsResponseItem>;
+  type ReposGetCommitCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetCommitCommentResponse = {
+    body: string;
+    commit_id: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    line: number;
+    node_id: string;
+    path: string;
+    position: number;
+    updated_at: string;
+    url: string;
+    user: ReposGetCommitCommentResponseUser;
+  };
+  type ReposGetCommitActivityStatsResponseItem = {
+    days: Array<number>;
+    total: number;
+    week: number;
+  };
+  type ReposGetCommitResponseStats = {
+    additions: number;
+    deletions: number;
+    total: number;
+  };
+  type ReposGetCommitResponseParentsItem = { sha: string; url: string };
+  type ReposGetCommitResponseFilesItem = {
+    additions: number;
+    blob_url: string;
+    changes: number;
+    deletions: number;
+    filename: string;
+    patch: string;
+    raw_url: string;
+    status: string;
+  };
+  type ReposGetCommitResponseCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetCommitResponseCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposGetCommitResponseCommitTree = { sha: string; url: string };
+  type ReposGetCommitResponseCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposGetCommitResponseCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposGetCommitResponseCommit = {
+    author: ReposGetCommitResponseCommitAuthor;
+    comment_count: number;
+    committer: ReposGetCommitResponseCommitCommitter;
+    message: string;
+    tree: ReposGetCommitResponseCommitTree;
+    url: string;
+    verification: ReposGetCommitResponseCommitVerification;
+  };
+  type ReposGetCommitResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetCommitResponse = {
+    author: ReposGetCommitResponseAuthor;
+    comments_url: string;
+    commit: ReposGetCommitResponseCommit;
+    committer: ReposGetCommitResponseCommitter;
+    files: Array<ReposGetCommitResponseFilesItem>;
+    html_url: string;
+    node_id: string;
+    parents: Array<ReposGetCommitResponseParentsItem>;
+    sha: string;
+    stats: ReposGetCommitResponseStats;
+    url: string;
+  };
+  type ReposGetCombinedStatusForRefResponseStatusesItem = {
+    avatar_url: string;
+    context: string;
+    created_at: string;
+    description: string;
+    id: number;
+    node_id: string;
+    state: string;
+    target_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposGetCombinedStatusForRefResponseRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetCombinedStatusForRefResponseRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ReposGetCombinedStatusForRefResponseRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ReposGetCombinedStatusForRefResponse = {
+    commit_url: string;
+    repository: ReposGetCombinedStatusForRefResponseRepository;
+    sha: string;
+    state: string;
+    statuses: Array<ReposGetCombinedStatusForRefResponseStatusesItem>;
+    total_count: number;
+    url: string;
+  };
+  type ReposGetCollaboratorPermissionLevelResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetCollaboratorPermissionLevelResponse = {
+    permission: string;
+    user: ReposGetCollaboratorPermissionLevelResponseUser;
+  };
+  type ReposGetClonesResponseClonesItem = {
+    count: number;
+    timestamp: string;
+    uniques: number;
+  };
+  type ReposGetClonesResponse = {
+    clones: Array<ReposGetClonesResponseClonesItem>;
+    count: number;
+    uniques: number;
+  };
+  type ReposGetBranchProtectionResponseRestrictionsUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponseRestrictionsTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponseRestrictionsAppsItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposGetBranchProtectionResponseRestrictionsAppsItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponseRestrictionsAppsItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposGetBranchProtectionResponseRestrictionsAppsItemOwner;
+    permissions: ReposGetBranchProtectionResponseRestrictionsAppsItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposGetBranchProtectionResponseRestrictions = {
+    apps: Array<ReposGetBranchProtectionResponseRestrictionsAppsItem>;
+    apps_url: string;
+    teams: Array<ReposGetBranchProtectionResponseRestrictionsTeamsItem>;
+    teams_url: string;
+    url: string;
+    users: Array<ReposGetBranchProtectionResponseRestrictionsUsersItem>;
+    users_url: string;
+  };
+  type ReposGetBranchProtectionResponseRequiredStatusChecks = {
+    contexts: Array<string>;
+    contexts_url: string;
+    strict: boolean;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictions = {
+    teams: Array<
+      ReposGetBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsTeamsItem
+    >;
+    teams_url: string;
+    url: string;
+    users: Array<
+      ReposGetBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictionsUsersItem
+    >;
+    users_url: string;
+  };
+  type ReposGetBranchProtectionResponseRequiredPullRequestReviews = {
+    dismiss_stale_reviews: boolean;
+    dismissal_restrictions: ReposGetBranchProtectionResponseRequiredPullRequestReviewsDismissalRestrictions;
+    require_code_owner_reviews: boolean;
+    required_approving_review_count: number;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponseEnforceAdmins = {
+    enabled: boolean;
+    url: string;
+  };
+  type ReposGetBranchProtectionResponse = {
+    enforce_admins: ReposGetBranchProtectionResponseEnforceAdmins;
+    required_pull_request_reviews: ReposGetBranchProtectionResponseRequiredPullRequestReviews;
+    required_status_checks: ReposGetBranchProtectionResponseRequiredStatusChecks;
+    restrictions: ReposGetBranchProtectionResponseRestrictions;
+    url: string;
+  };
+  type ReposGetBranchResponseProtectionRequiredStatusChecks = {
+    contexts: Array<string>;
+    enforcement_level: string;
+  };
+  type ReposGetBranchResponseProtection = {
+    enabled: boolean;
+    required_status_checks: ReposGetBranchResponseProtectionRequiredStatusChecks;
+  };
+  type ReposGetBranchResponseCommitParentsItem = { sha: string; url: string };
+  type ReposGetBranchResponseCommitCommitter = {
+    avatar_url: string;
+    gravatar_id: string;
+    id: number;
+    login: string;
+    url: string;
+  };
+  type ReposGetBranchResponseCommitCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposGetBranchResponseCommitCommitTree = { sha: string; url: string };
+  type ReposGetBranchResponseCommitCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposGetBranchResponseCommitCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposGetBranchResponseCommitCommit = {
+    author: ReposGetBranchResponseCommitCommitAuthor;
+    committer: ReposGetBranchResponseCommitCommitCommitter;
+    message: string;
+    tree: ReposGetBranchResponseCommitCommitTree;
+    url: string;
+    verification: ReposGetBranchResponseCommitCommitVerification;
+  };
+  type ReposGetBranchResponseCommitAuthor = {
+    avatar_url: string;
+    gravatar_id: string;
+    id: number;
+    login: string;
+    url: string;
+  };
+  type ReposGetBranchResponseCommit = {
+    author: ReposGetBranchResponseCommitAuthor;
+    commit: ReposGetBranchResponseCommitCommit;
+    committer: ReposGetBranchResponseCommitCommitter;
+    node_id: string;
+    parents: Array<ReposGetBranchResponseCommitParentsItem>;
+    sha: string;
+    url: string;
+  };
+  type ReposGetBranchResponseLinks = { html: string; self: string };
+  type ReposGetBranchResponse = {
+    _links: ReposGetBranchResponseLinks;
+    commit: ReposGetBranchResponseCommit;
+    name: string;
+    protected: boolean;
+    protection: ReposGetBranchResponseProtection;
+    protection_url: string;
+  };
+  type ReposGetAppsWithAccessToProtectedBranchResponseItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposGetAppsWithAccessToProtectedBranchResponseItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposGetAppsWithAccessToProtectedBranchResponseItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposGetAppsWithAccessToProtectedBranchResponseItemOwner;
+    permissions: ReposGetAppsWithAccessToProtectedBranchResponseItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposGetResponseSourcePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposGetResponseSourceOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetResponseSource = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposGetResponseSourceOwner;
+    permissions: ReposGetResponseSourcePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposGetResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposGetResponseParentPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposGetResponseParentOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetResponseParent = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposGetResponseParentOwner;
+    permissions: ReposGetResponseParentPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposGetResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetResponseOrganization = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposGetResponseLicense = {
+    key: string;
+    name: string;
+    node_id: string;
+    spdx_id: string;
+    url: string;
+  };
+  type ReposGetResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    license: ReposGetResponseLicense;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    organization: ReposGetResponseOrganization;
+    owner: ReposGetResponseOwner;
+    parent: ReposGetResponseParent;
+    permissions: ReposGetResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    source: ReposGetResponseSource;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposEnablePagesSiteResponseSource = {
+    branch: string;
+    directory: string;
+  };
+  type ReposEnablePagesSiteResponse = {
+    cname: string;
+    custom_404: boolean;
+    html_url: string;
+    source: ReposEnablePagesSiteResponseSource;
+    status: string;
+    url: string;
+  };
+  type ReposDeleteFileResponseCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposDeleteFileResponseCommitTree = { sha: string; url: string };
+  type ReposDeleteFileResponseCommitParentsItem = {
+    html_url: string;
+    sha: string;
+    url: string;
+  };
+  type ReposDeleteFileResponseCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposDeleteFileResponseCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposDeleteFileResponseCommit = {
+    author: ReposDeleteFileResponseCommitAuthor;
+    committer: ReposDeleteFileResponseCommitCommitter;
+    html_url: string;
+    message: string;
+    node_id: string;
+    parents: Array<ReposDeleteFileResponseCommitParentsItem>;
+    sha: string;
+    tree: ReposDeleteFileResponseCommitTree;
+    url: string;
+    verification: ReposDeleteFileResponseCommitVerification;
+  };
+  type ReposDeleteFileResponse = {
+    commit: ReposDeleteFileResponseCommit;
+    content: null;
+  };
+  type ReposDeleteResponse = { documentation_url: string; message: string };
+  type ReposCreateUsingTemplateResponseTemplateRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposCreateUsingTemplateResponseTemplateRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateUsingTemplateResponseTemplateRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposCreateUsingTemplateResponseTemplateRepositoryOwner;
+    permissions: ReposCreateUsingTemplateResponseTemplateRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposCreateUsingTemplateResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposCreateUsingTemplateResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateUsingTemplateResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposCreateUsingTemplateResponseOwner;
+    permissions: ReposCreateUsingTemplateResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: ReposCreateUsingTemplateResponseTemplateRepository;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposCreateStatusResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateStatusResponse = {
+    avatar_url: string;
+    context: string;
+    created_at: string;
+    creator: ReposCreateStatusResponseCreator;
+    description: string;
+    id: number;
+    node_id: string;
+    state: string;
+    target_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposCreateReleaseResponseAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateReleaseResponse = {
+    assets: Array<any>;
+    assets_url: string;
+    author: ReposCreateReleaseResponseAuthor;
+    body: string;
+    created_at: string;
+    draft: boolean;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    prerelease: boolean;
+    published_at: string;
+    tag_name: string;
+    tarball_url: string;
+    target_commitish: string;
+    upload_url: string;
+    url: string;
+    zipball_url: string;
+  };
+  type ReposCreateOrUpdateFileResponseContentLinks = {
+    git: string;
+    html: string;
+    self: string;
+  };
+  type ReposCreateOrUpdateFileResponseContent = {
+    _links: ReposCreateOrUpdateFileResponseContentLinks;
+    download_url: string;
+    git_url: string;
+    html_url: string;
+    name: string;
+    path: string;
+    sha: string;
+    size: number;
+    type: string;
+    url: string;
+  };
+  type ReposCreateOrUpdateFileResponseCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposCreateOrUpdateFileResponseCommitTree = { sha: string; url: string };
+  type ReposCreateOrUpdateFileResponseCommitParentsItem = {
+    html_url: string;
+    sha: string;
+    url: string;
+  };
+  type ReposCreateOrUpdateFileResponseCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCreateOrUpdateFileResponseCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCreateOrUpdateFileResponseCommit = {
+    author: ReposCreateOrUpdateFileResponseCommitAuthor;
+    committer: ReposCreateOrUpdateFileResponseCommitCommitter;
+    html_url: string;
+    message: string;
+    node_id: string;
+    parents: Array<ReposCreateOrUpdateFileResponseCommitParentsItem>;
+    sha: string;
+    tree: ReposCreateOrUpdateFileResponseCommitTree;
+    url: string;
+    verification: ReposCreateOrUpdateFileResponseCommitVerification;
+  };
+  type ReposCreateOrUpdateFileResponse = {
+    commit: ReposCreateOrUpdateFileResponseCommit;
+    content: ReposCreateOrUpdateFileResponseContent;
+  };
+  type ReposCreateInOrgResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposCreateInOrgResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateInOrgResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposCreateInOrgResponseOwner;
+    permissions: ReposCreateInOrgResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposCreateHookResponseLastResponse = {
+    code: null;
+    message: null;
+    status: string;
+  };
+  type ReposCreateHookResponseConfig = {
+    content_type: string;
+    insecure_ssl: string;
+    url: string;
+  };
+  type ReposCreateHookResponse = {
+    active: boolean;
+    config: ReposCreateHookResponseConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    last_response: ReposCreateHookResponseLastResponse;
+    name: string;
+    ping_url: string;
+    test_url: string;
+    type: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposCreateForkResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposCreateForkResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateForkResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposCreateForkResponseOwner;
+    permissions: ReposCreateForkResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposCreateForAuthenticatedUserResponsePermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ReposCreateForAuthenticatedUserResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateForAuthenticatedUserResponse = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ReposCreateForAuthenticatedUserResponseOwner;
+    permissions: ReposCreateForAuthenticatedUserResponsePermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ReposCreateFileResponseContentLinks = {
+    git: string;
+    html: string;
+    self: string;
+  };
+  type ReposCreateFileResponseContent = {
+    _links: ReposCreateFileResponseContentLinks;
+    download_url: string;
+    git_url: string;
+    html_url: string;
+    name: string;
+    path: string;
+    sha: string;
+    size: number;
+    type: string;
+    url: string;
+  };
+  type ReposCreateFileResponseCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposCreateFileResponseCommitTree = { sha: string; url: string };
+  type ReposCreateFileResponseCommitParentsItem = {
+    html_url: string;
+    sha: string;
+    url: string;
+  };
+  type ReposCreateFileResponseCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCreateFileResponseCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCreateFileResponseCommit = {
+    author: ReposCreateFileResponseCommitAuthor;
+    committer: ReposCreateFileResponseCommitCommitter;
+    html_url: string;
+    message: string;
+    node_id: string;
+    parents: Array<ReposCreateFileResponseCommitParentsItem>;
+    sha: string;
+    tree: ReposCreateFileResponseCommitTree;
+    url: string;
+    verification: ReposCreateFileResponseCommitVerification;
+  };
+  type ReposCreateFileResponse = {
+    commit: ReposCreateFileResponseCommit;
+    content: ReposCreateFileResponseContent;
+  };
+  type ReposCreateDeploymentStatusResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateDeploymentStatusResponse = {
+    created_at: string;
+    creator: ReposCreateDeploymentStatusResponseCreator;
+    deployment_url: string;
+    description: string;
+    environment: string;
+    environment_url: string;
+    id: number;
+    log_url: string;
+    node_id: string;
+    repository_url: string;
+    state: string;
+    target_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ReposCreateDeploymentResponsePayload = { deploy: string };
+  type ReposCreateDeploymentResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateDeploymentResponse = {
+    created_at: string;
+    creator: ReposCreateDeploymentResponseCreator;
+    description: string;
+    environment: string;
+    id: number;
+    node_id: string;
+    original_environment: string;
+    payload: ReposCreateDeploymentResponsePayload;
+    production_environment: boolean;
+    ref: string;
+    repository_url: string;
+    sha: string;
+    statuses_url: string;
+    task: string;
+    transient_environment: boolean;
+    updated_at: string;
+    url: string;
+  };
+  type ReposCreateCommitCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCreateCommitCommentResponse = {
+    body: string;
+    commit_id: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    line: number;
+    node_id: string;
+    path: string;
+    position: number;
+    updated_at: string;
+    url: string;
+    user: ReposCreateCommitCommentResponseUser;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitParentsItem = {
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitCommitTree = {
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitCommit = {
+    author: ReposCompareCommitsResponseMergeBaseCommitCommitAuthor;
+    comment_count: number;
+    committer: ReposCompareCommitsResponseMergeBaseCommitCommitCommitter;
+    message: string;
+    tree: ReposCompareCommitsResponseMergeBaseCommitCommitTree;
+    url: string;
+    verification: ReposCompareCommitsResponseMergeBaseCommitCommitVerification;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommitAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseMergeBaseCommit = {
+    author: ReposCompareCommitsResponseMergeBaseCommitAuthor;
+    comments_url: string;
+    commit: ReposCompareCommitsResponseMergeBaseCommitCommit;
+    committer: ReposCompareCommitsResponseMergeBaseCommitCommitter;
+    html_url: string;
+    node_id: string;
+    parents: Array<ReposCompareCommitsResponseMergeBaseCommitParentsItem>;
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseFilesItem = {
+    additions: number;
+    blob_url: string;
+    changes: number;
+    contents_url: string;
+    deletions: number;
+    filename: string;
+    patch: string;
+    raw_url: string;
+    sha: string;
+    status: string;
+  };
+  type ReposCompareCommitsResponseCommitsItemParentsItem = {
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseCommitsItemCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseCommitsItemCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposCompareCommitsResponseCommitsItemCommitTree = {
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseCommitsItemCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCompareCommitsResponseCommitsItemCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCompareCommitsResponseCommitsItemCommit = {
+    author: ReposCompareCommitsResponseCommitsItemCommitAuthor;
+    comment_count: number;
+    committer: ReposCompareCommitsResponseCommitsItemCommitCommitter;
+    message: string;
+    tree: ReposCompareCommitsResponseCommitsItemCommitTree;
+    url: string;
+    verification: ReposCompareCommitsResponseCommitsItemCommitVerification;
+  };
+  type ReposCompareCommitsResponseCommitsItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseCommitsItem = {
+    author: ReposCompareCommitsResponseCommitsItemAuthor;
+    comments_url: string;
+    commit: ReposCompareCommitsResponseCommitsItemCommit;
+    committer: ReposCompareCommitsResponseCommitsItemCommitter;
+    html_url: string;
+    node_id: string;
+    parents: Array<ReposCompareCommitsResponseCommitsItemParentsItem>;
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseBaseCommitParentsItem = {
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseBaseCommitCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseBaseCommitCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type ReposCompareCommitsResponseBaseCommitCommitTree = {
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseBaseCommitCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCompareCommitsResponseBaseCommitCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type ReposCompareCommitsResponseBaseCommitCommit = {
+    author: ReposCompareCommitsResponseBaseCommitCommitAuthor;
+    comment_count: number;
+    committer: ReposCompareCommitsResponseBaseCommitCommitCommitter;
+    message: string;
+    tree: ReposCompareCommitsResponseBaseCommitCommitTree;
+    url: string;
+    verification: ReposCompareCommitsResponseBaseCommitCommitVerification;
+  };
+  type ReposCompareCommitsResponseBaseCommitAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponseBaseCommit = {
+    author: ReposCompareCommitsResponseBaseCommitAuthor;
+    comments_url: string;
+    commit: ReposCompareCommitsResponseBaseCommitCommit;
+    committer: ReposCompareCommitsResponseBaseCommitCommitter;
+    html_url: string;
+    node_id: string;
+    parents: Array<ReposCompareCommitsResponseBaseCommitParentsItem>;
+    sha: string;
+    url: string;
+  };
+  type ReposCompareCommitsResponse = {
+    ahead_by: number;
+    base_commit: ReposCompareCommitsResponseBaseCommit;
+    behind_by: number;
+    commits: Array<ReposCompareCommitsResponseCommitsItem>;
+    diff_url: string;
+    files: Array<ReposCompareCommitsResponseFilesItem>;
+    html_url: string;
+    merge_base_commit: ReposCompareCommitsResponseMergeBaseCommit;
+    patch_url: string;
+    permalink_url: string;
+    status: string;
+    total_commits: number;
+    url: string;
+  };
+  type ReposAddProtectedBranchUserRestrictionsResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposAddProtectedBranchTeamRestrictionsResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type ReposAddProtectedBranchRequiredSignaturesResponse = {
+    enabled: boolean;
+    url: string;
+  };
+  type ReposAddProtectedBranchAppRestrictionsResponseItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ReposAddProtectedBranchAppRestrictionsResponseItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ReposAddProtectedBranchAppRestrictionsResponseItem = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ReposAddProtectedBranchAppRestrictionsResponseItemOwner;
+    permissions: ReposAddProtectedBranchAppRestrictionsResponseItemPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ReposAddProtectedBranchAdminEnforcementResponse = {
+    enabled: boolean;
+    url: string;
+  };
+  type ReposAddDeployKeyResponse = {
+    created_at: string;
+    id: number;
+    key: string;
+    read_only: boolean;
+    title: string;
+    url: string;
+    verified: boolean;
+  };
+  type ReposAddCollaboratorResponseRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposAddCollaboratorResponseRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ReposAddCollaboratorResponseRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ReposAddCollaboratorResponseInviter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposAddCollaboratorResponseInvitee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReposAddCollaboratorResponse = {
+    created_at: string;
+    html_url: string;
+    id: number;
+    invitee: ReposAddCollaboratorResponseInvitee;
+    inviter: ReposAddCollaboratorResponseInviter;
+    permissions: string;
+    repository: ReposAddCollaboratorResponseRepository;
+    url: string;
+  };
+  type ReactionsListForTeamDiscussionCommentResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsListForTeamDiscussionCommentResponseItem = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsListForTeamDiscussionCommentResponseItemUser;
+  };
+  type ReactionsListForTeamDiscussionResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsListForTeamDiscussionResponseItem = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsListForTeamDiscussionResponseItemUser;
+  };
+  type ReactionsListForPullRequestReviewCommentResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsListForPullRequestReviewCommentResponseItem = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsListForPullRequestReviewCommentResponseItemUser;
+  };
+  type ReactionsListForIssueCommentResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsListForIssueCommentResponseItem = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsListForIssueCommentResponseItemUser;
+  };
+  type ReactionsListForIssueResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsListForIssueResponseItem = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsListForIssueResponseItemUser;
+  };
+  type ReactionsListForCommitCommentResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsListForCommitCommentResponseItem = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsListForCommitCommentResponseItemUser;
+  };
+  type ReactionsCreateForTeamDiscussionCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsCreateForTeamDiscussionCommentResponse = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsCreateForTeamDiscussionCommentResponseUser;
+  };
+  type ReactionsCreateForTeamDiscussionResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsCreateForTeamDiscussionResponse = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsCreateForTeamDiscussionResponseUser;
+  };
+  type ReactionsCreateForPullRequestReviewCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsCreateForPullRequestReviewCommentResponse = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsCreateForPullRequestReviewCommentResponseUser;
+  };
+  type ReactionsCreateForIssueCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsCreateForIssueCommentResponse = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsCreateForIssueCommentResponseUser;
+  };
+  type ReactionsCreateForIssueResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsCreateForIssueResponse = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsCreateForIssueResponseUser;
+  };
+  type ReactionsCreateForCommitCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ReactionsCreateForCommitCommentResponse = {
+    content: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    user: ReactionsCreateForCommitCommentResponseUser;
+  };
+  type RateLimitGetResponseResourcesSearch = {
+    limit: number;
+    remaining: number;
+    reset: number;
+  };
+  type RateLimitGetResponseResourcesIntegrationManifest = {
+    limit: number;
+    remaining: number;
+    reset: number;
+  };
+  type RateLimitGetResponseResourcesGraphql = {
+    limit: number;
+    remaining: number;
+    reset: number;
+  };
+  type RateLimitGetResponseResourcesCore = {
+    limit: number;
+    remaining: number;
+    reset: number;
+  };
+  type RateLimitGetResponseResources = {
+    core: RateLimitGetResponseResourcesCore;
+    graphql: RateLimitGetResponseResourcesGraphql;
+    integration_manifest: RateLimitGetResponseResourcesIntegrationManifest;
+    search: RateLimitGetResponseResourcesSearch;
+  };
+  type RateLimitGetResponseRate = {
+    limit: number;
+    remaining: number;
+    reset: number;
+  };
+  type RateLimitGetResponse = {
+    rate: RateLimitGetResponseRate;
+    resources: RateLimitGetResponseResources;
+  };
+  type PullsUpdateReviewResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateReviewResponseLinksPullRequest = { href: string };
+  type PullsUpdateReviewResponseLinksHtml = { href: string };
+  type PullsUpdateReviewResponseLinks = {
+    html: PullsUpdateReviewResponseLinksHtml;
+    pull_request: PullsUpdateReviewResponseLinksPullRequest;
+  };
+  type PullsUpdateReviewResponse = {
+    _links: PullsUpdateReviewResponseLinks;
+    body: string;
+    commit_id: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    pull_request_url: string;
+    state: string;
+    user: PullsUpdateReviewResponseUser;
+  };
+  type PullsUpdateCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateCommentResponseLinksSelf = { href: string };
+  type PullsUpdateCommentResponseLinksPullRequest = { href: string };
+  type PullsUpdateCommentResponseLinksHtml = { href: string };
+  type PullsUpdateCommentResponseLinks = {
+    html: PullsUpdateCommentResponseLinksHtml;
+    pull_request: PullsUpdateCommentResponseLinksPullRequest;
+    self: PullsUpdateCommentResponseLinksSelf;
+  };
+  type PullsUpdateCommentResponse = {
+    _links: PullsUpdateCommentResponseLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    in_reply_to_id: number;
+    line: number;
+    node_id: string;
+    original_commit_id: string;
+    original_line: number;
+    original_position: number;
+    original_start_line: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    side: string;
+    start_line: number;
+    start_side: string;
+    updated_at: string;
+    url: string;
+    user: PullsUpdateCommentResponseUser;
+  };
+  type PullsUpdateBranchResponse = { message: string; url: string };
+  type PullsUpdateResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseRequestedTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type PullsUpdateResponseRequestedReviewersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: PullsUpdateResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type PullsUpdateResponseMergedBy = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type PullsUpdateResponseHeadUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseHeadRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsUpdateResponseHeadRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseHeadRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsUpdateResponseHeadRepoOwner;
+    permissions: PullsUpdateResponseHeadRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsUpdateResponseHead = {
+    label: string;
+    ref: string;
+    repo: PullsUpdateResponseHeadRepo;
+    sha: string;
+    user: PullsUpdateResponseHeadUser;
+  };
+  type PullsUpdateResponseBaseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseBaseRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsUpdateResponseBaseRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseBaseRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsUpdateResponseBaseRepoOwner;
+    permissions: PullsUpdateResponseBaseRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsUpdateResponseBase = {
+    label: string;
+    ref: string;
+    repo: PullsUpdateResponseBaseRepo;
+    sha: string;
+    user: PullsUpdateResponseBaseUser;
+  };
+  type PullsUpdateResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsUpdateResponseLinksStatuses = { href: string };
+  type PullsUpdateResponseLinksSelf = { href: string };
+  type PullsUpdateResponseLinksReviewComments = { href: string };
+  type PullsUpdateResponseLinksReviewComment = { href: string };
+  type PullsUpdateResponseLinksIssue = { href: string };
+  type PullsUpdateResponseLinksHtml = { href: string };
+  type PullsUpdateResponseLinksCommits = { href: string };
+  type PullsUpdateResponseLinksComments = { href: string };
+  type PullsUpdateResponseLinks = {
+    comments: PullsUpdateResponseLinksComments;
+    commits: PullsUpdateResponseLinksCommits;
+    html: PullsUpdateResponseLinksHtml;
+    issue: PullsUpdateResponseLinksIssue;
+    review_comment: PullsUpdateResponseLinksReviewComment;
+    review_comments: PullsUpdateResponseLinksReviewComments;
+    self: PullsUpdateResponseLinksSelf;
+    statuses: PullsUpdateResponseLinksStatuses;
+  };
+  type PullsUpdateResponse = {
+    _links: PullsUpdateResponseLinks;
+    active_lock_reason: string;
+    additions: number;
+    assignee: PullsUpdateResponseAssignee;
+    assignees: Array<PullsUpdateResponseAssigneesItem>;
+    author_association: string;
+    base: PullsUpdateResponseBase;
+    body: string;
+    changed_files: number;
+    closed_at: string;
+    comments: number;
+    comments_url: string;
+    commits: number;
+    commits_url: string;
+    created_at: string;
+    deletions: number;
+    diff_url: string;
+    draft: boolean;
+    head: PullsUpdateResponseHead;
+    html_url: string;
+    id: number;
+    issue_url: string;
+    labels: Array<PullsUpdateResponseLabelsItem>;
+    locked: boolean;
+    maintainer_can_modify: boolean;
+    merge_commit_sha: string;
+    mergeable: boolean;
+    mergeable_state: string;
+    merged: boolean;
+    merged_at: string;
+    merged_by: PullsUpdateResponseMergedBy;
+    milestone: PullsUpdateResponseMilestone;
+    node_id: string;
+    number: number;
+    patch_url: string;
+    rebaseable: boolean;
+    requested_reviewers: Array<PullsUpdateResponseRequestedReviewersItem>;
+    requested_teams: Array<PullsUpdateResponseRequestedTeamsItem>;
+    review_comment_url: string;
+    review_comments: number;
+    review_comments_url: string;
+    state: string;
+    statuses_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: PullsUpdateResponseUser;
+  };
+  type PullsSubmitReviewResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsSubmitReviewResponseLinksPullRequest = { href: string };
+  type PullsSubmitReviewResponseLinksHtml = { href: string };
+  type PullsSubmitReviewResponseLinks = {
+    html: PullsSubmitReviewResponseLinksHtml;
+    pull_request: PullsSubmitReviewResponseLinksPullRequest;
+  };
+  type PullsSubmitReviewResponse = {
+    _links: PullsSubmitReviewResponseLinks;
+    body: string;
+    commit_id: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    pull_request_url: string;
+    state: string;
+    user: PullsSubmitReviewResponseUser;
+  };
+  type PullsMergeResponse = { merged: boolean; message: string; sha: string };
+  type PullsListReviewsResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListReviewsResponseItemLinksPullRequest = { href: string };
+  type PullsListReviewsResponseItemLinksHtml = { href: string };
+  type PullsListReviewsResponseItemLinks = {
+    html: PullsListReviewsResponseItemLinksHtml;
+    pull_request: PullsListReviewsResponseItemLinksPullRequest;
+  };
+  type PullsListReviewsResponseItem = {
+    _links: PullsListReviewsResponseItemLinks;
+    body: string;
+    commit_id: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    pull_request_url: string;
+    state: string;
+    user: PullsListReviewsResponseItemUser;
+  };
+  type PullsListReviewRequestsResponseUsersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListReviewRequestsResponseTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type PullsListReviewRequestsResponse = {
+    teams: Array<PullsListReviewRequestsResponseTeamsItem>;
+    users: Array<PullsListReviewRequestsResponseUsersItem>;
+  };
+  type PullsListFilesResponseItem = {
+    additions: number;
+    blob_url: string;
+    changes: number;
+    contents_url: string;
+    deletions: number;
+    filename: string;
+    patch: string;
+    raw_url: string;
+    sha: string;
+    status: string;
+  };
+  type PullsListCommitsResponseItemParentsItem = { sha: string; url: string };
+  type PullsListCommitsResponseItemCommitter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListCommitsResponseItemCommitVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type PullsListCommitsResponseItemCommitTree = { sha: string; url: string };
+  type PullsListCommitsResponseItemCommitCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type PullsListCommitsResponseItemCommitAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type PullsListCommitsResponseItemCommit = {
+    author: PullsListCommitsResponseItemCommitAuthor;
+    comment_count: number;
+    committer: PullsListCommitsResponseItemCommitCommitter;
+    message: string;
+    tree: PullsListCommitsResponseItemCommitTree;
+    url: string;
+    verification: PullsListCommitsResponseItemCommitVerification;
+  };
+  type PullsListCommitsResponseItemAuthor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListCommitsResponseItem = {
+    author: PullsListCommitsResponseItemAuthor;
+    comments_url: string;
+    commit: PullsListCommitsResponseItemCommit;
+    committer: PullsListCommitsResponseItemCommitter;
+    html_url: string;
+    node_id: string;
+    parents: Array<PullsListCommitsResponseItemParentsItem>;
+    sha: string;
+    url: string;
+  };
+  type PullsListCommentsForRepoResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListCommentsForRepoResponseItemLinksSelf = { href: string };
+  type PullsListCommentsForRepoResponseItemLinksPullRequest = { href: string };
+  type PullsListCommentsForRepoResponseItemLinksHtml = { href: string };
+  type PullsListCommentsForRepoResponseItemLinks = {
+    html: PullsListCommentsForRepoResponseItemLinksHtml;
+    pull_request: PullsListCommentsForRepoResponseItemLinksPullRequest;
+    self: PullsListCommentsForRepoResponseItemLinksSelf;
+  };
+  type PullsListCommentsForRepoResponseItem = {
+    _links: PullsListCommentsForRepoResponseItemLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    in_reply_to_id: number;
+    line: number;
+    node_id: string;
+    original_commit_id: string;
+    original_line: number;
+    original_position: number;
+    original_start_line: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    side: string;
+    start_line: number;
+    start_side: string;
+    updated_at: string;
+    url: string;
+    user: PullsListCommentsForRepoResponseItemUser;
+  };
+  type PullsListCommentsResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListCommentsResponseItemLinksSelf = { href: string };
+  type PullsListCommentsResponseItemLinksPullRequest = { href: string };
+  type PullsListCommentsResponseItemLinksHtml = { href: string };
+  type PullsListCommentsResponseItemLinks = {
+    html: PullsListCommentsResponseItemLinksHtml;
+    pull_request: PullsListCommentsResponseItemLinksPullRequest;
+    self: PullsListCommentsResponseItemLinksSelf;
+  };
+  type PullsListCommentsResponseItem = {
+    _links: PullsListCommentsResponseItemLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    in_reply_to_id: number;
+    line: number;
+    node_id: string;
+    original_commit_id: string;
+    original_line: number;
+    original_position: number;
+    original_start_line: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    side: string;
+    start_line: number;
+    start_side: string;
+    updated_at: string;
+    url: string;
+    user: PullsListCommentsResponseItemUser;
+  };
+  type PullsListResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemRequestedTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type PullsListResponseItemRequestedReviewersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: PullsListResponseItemMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type PullsListResponseItemLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type PullsListResponseItemHeadUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemHeadRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsListResponseItemHeadRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemHeadRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsListResponseItemHeadRepoOwner;
+    permissions: PullsListResponseItemHeadRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsListResponseItemHead = {
+    label: string;
+    ref: string;
+    repo: PullsListResponseItemHeadRepo;
+    sha: string;
+    user: PullsListResponseItemHeadUser;
+  };
+  type PullsListResponseItemBaseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemBaseRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsListResponseItemBaseRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemBaseRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsListResponseItemBaseRepoOwner;
+    permissions: PullsListResponseItemBaseRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsListResponseItemBase = {
+    label: string;
+    ref: string;
+    repo: PullsListResponseItemBaseRepo;
+    sha: string;
+    user: PullsListResponseItemBaseUser;
+  };
+  type PullsListResponseItemAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsListResponseItemLinksStatuses = { href: string };
+  type PullsListResponseItemLinksSelf = { href: string };
+  type PullsListResponseItemLinksReviewComments = { href: string };
+  type PullsListResponseItemLinksReviewComment = { href: string };
+  type PullsListResponseItemLinksIssue = { href: string };
+  type PullsListResponseItemLinksHtml = { href: string };
+  type PullsListResponseItemLinksCommits = { href: string };
+  type PullsListResponseItemLinksComments = { href: string };
+  type PullsListResponseItemLinks = {
+    comments: PullsListResponseItemLinksComments;
+    commits: PullsListResponseItemLinksCommits;
+    html: PullsListResponseItemLinksHtml;
+    issue: PullsListResponseItemLinksIssue;
+    review_comment: PullsListResponseItemLinksReviewComment;
+    review_comments: PullsListResponseItemLinksReviewComments;
+    self: PullsListResponseItemLinksSelf;
+    statuses: PullsListResponseItemLinksStatuses;
+  };
+  type PullsListResponseItem = {
+    _links: PullsListResponseItemLinks;
+    active_lock_reason: string;
+    assignee: PullsListResponseItemAssignee;
+    assignees: Array<PullsListResponseItemAssigneesItem>;
+    author_association: string;
+    base: PullsListResponseItemBase;
+    body: string;
+    closed_at: string;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    diff_url: string;
+    draft: boolean;
+    head: PullsListResponseItemHead;
+    html_url: string;
+    id: number;
+    issue_url: string;
+    labels: Array<PullsListResponseItemLabelsItem>;
+    locked: boolean;
+    merge_commit_sha: string;
+    merged_at: string;
+    milestone: PullsListResponseItemMilestone;
+    node_id: string;
+    number: number;
+    patch_url: string;
+    requested_reviewers: Array<PullsListResponseItemRequestedReviewersItem>;
+    requested_teams: Array<PullsListResponseItemRequestedTeamsItem>;
+    review_comment_url: string;
+    review_comments_url: string;
+    state: string;
+    statuses_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: PullsListResponseItemUser;
+  };
+  type PullsGetReviewResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetReviewResponseLinksPullRequest = { href: string };
+  type PullsGetReviewResponseLinksHtml = { href: string };
+  type PullsGetReviewResponseLinks = {
+    html: PullsGetReviewResponseLinksHtml;
+    pull_request: PullsGetReviewResponseLinksPullRequest;
+  };
+  type PullsGetReviewResponse = {
+    _links: PullsGetReviewResponseLinks;
+    body: string;
+    commit_id: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    pull_request_url: string;
+    state: string;
+    user: PullsGetReviewResponseUser;
+  };
+  type PullsGetCommentsForReviewResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetCommentsForReviewResponseItemLinksSelf = { href: string };
+  type PullsGetCommentsForReviewResponseItemLinksPullRequest = { href: string };
+  type PullsGetCommentsForReviewResponseItemLinksHtml = { href: string };
+  type PullsGetCommentsForReviewResponseItemLinks = {
+    html: PullsGetCommentsForReviewResponseItemLinksHtml;
+    pull_request: PullsGetCommentsForReviewResponseItemLinksPullRequest;
+    self: PullsGetCommentsForReviewResponseItemLinksSelf;
+  };
+  type PullsGetCommentsForReviewResponseItem = {
+    _links: PullsGetCommentsForReviewResponseItemLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    in_reply_to_id: number;
+    node_id: string;
+    original_commit_id: string;
+    original_position: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    updated_at: string;
+    url: string;
+    user: PullsGetCommentsForReviewResponseItemUser;
+  };
+  type PullsGetCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetCommentResponseLinksSelf = { href: string };
+  type PullsGetCommentResponseLinksPullRequest = { href: string };
+  type PullsGetCommentResponseLinksHtml = { href: string };
+  type PullsGetCommentResponseLinks = {
+    html: PullsGetCommentResponseLinksHtml;
+    pull_request: PullsGetCommentResponseLinksPullRequest;
+    self: PullsGetCommentResponseLinksSelf;
+  };
+  type PullsGetCommentResponse = {
+    _links: PullsGetCommentResponseLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    in_reply_to_id: number;
+    line: number;
+    node_id: string;
+    original_commit_id: string;
+    original_line: number;
+    original_position: number;
+    original_start_line: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    side: string;
+    start_line: number;
+    start_side: string;
+    updated_at: string;
+    url: string;
+    user: PullsGetCommentResponseUser;
+  };
+  type PullsGetResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseRequestedTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type PullsGetResponseRequestedReviewersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: PullsGetResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type PullsGetResponseMergedBy = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type PullsGetResponseHeadUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseHeadRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsGetResponseHeadRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseHeadRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsGetResponseHeadRepoOwner;
+    permissions: PullsGetResponseHeadRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsGetResponseHead = {
+    label: string;
+    ref: string;
+    repo: PullsGetResponseHeadRepo;
+    sha: string;
+    user: PullsGetResponseHeadUser;
+  };
+  type PullsGetResponseBaseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseBaseRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsGetResponseBaseRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseBaseRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsGetResponseBaseRepoOwner;
+    permissions: PullsGetResponseBaseRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsGetResponseBase = {
+    label: string;
+    ref: string;
+    repo: PullsGetResponseBaseRepo;
+    sha: string;
+    user: PullsGetResponseBaseUser;
+  };
+  type PullsGetResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsGetResponseLinksStatuses = { href: string };
+  type PullsGetResponseLinksSelf = { href: string };
+  type PullsGetResponseLinksReviewComments = { href: string };
+  type PullsGetResponseLinksReviewComment = { href: string };
+  type PullsGetResponseLinksIssue = { href: string };
+  type PullsGetResponseLinksHtml = { href: string };
+  type PullsGetResponseLinksCommits = { href: string };
+  type PullsGetResponseLinksComments = { href: string };
+  type PullsGetResponseLinks = {
+    comments: PullsGetResponseLinksComments;
+    commits: PullsGetResponseLinksCommits;
+    html: PullsGetResponseLinksHtml;
+    issue: PullsGetResponseLinksIssue;
+    review_comment: PullsGetResponseLinksReviewComment;
+    review_comments: PullsGetResponseLinksReviewComments;
+    self: PullsGetResponseLinksSelf;
+    statuses: PullsGetResponseLinksStatuses;
+  };
+  type PullsGetResponse = {
+    _links: PullsGetResponseLinks;
+    active_lock_reason: string;
+    additions: number;
+    assignee: PullsGetResponseAssignee;
+    assignees: Array<PullsGetResponseAssigneesItem>;
+    author_association: string;
+    base: PullsGetResponseBase;
+    body: string;
+    changed_files: number;
+    closed_at: string;
+    comments: number;
+    comments_url: string;
+    commits: number;
+    commits_url: string;
+    created_at: string;
+    deletions: number;
+    diff_url: string;
+    draft: boolean;
+    head: PullsGetResponseHead;
+    html_url: string;
+    id: number;
+    issue_url: string;
+    labels: Array<PullsGetResponseLabelsItem>;
+    locked: boolean;
+    maintainer_can_modify: boolean;
+    merge_commit_sha: string;
+    mergeable: boolean;
+    mergeable_state: string;
+    merged: boolean;
+    merged_at: string;
+    merged_by: PullsGetResponseMergedBy;
+    milestone: PullsGetResponseMilestone;
+    node_id: string;
+    number: number;
+    patch_url: string;
+    rebaseable: boolean;
+    requested_reviewers: Array<PullsGetResponseRequestedReviewersItem>;
+    requested_teams: Array<PullsGetResponseRequestedTeamsItem>;
+    review_comment_url: string;
+    review_comments: number;
+    review_comments_url: string;
+    state: string;
+    statuses_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: PullsGetResponseUser;
+  };
+  type PullsDismissReviewResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsDismissReviewResponseLinksPullRequest = { href: string };
+  type PullsDismissReviewResponseLinksHtml = { href: string };
+  type PullsDismissReviewResponseLinks = {
+    html: PullsDismissReviewResponseLinksHtml;
+    pull_request: PullsDismissReviewResponseLinksPullRequest;
+  };
+  type PullsDismissReviewResponse = {
+    _links: PullsDismissReviewResponseLinks;
+    body: string;
+    commit_id: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    pull_request_url: string;
+    state: string;
+    user: PullsDismissReviewResponseUser;
+  };
+  type PullsDeletePendingReviewResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsDeletePendingReviewResponseLinksPullRequest = { href: string };
+  type PullsDeletePendingReviewResponseLinksHtml = { href: string };
+  type PullsDeletePendingReviewResponseLinks = {
+    html: PullsDeletePendingReviewResponseLinksHtml;
+    pull_request: PullsDeletePendingReviewResponseLinksPullRequest;
+  };
+  type PullsDeletePendingReviewResponse = {
+    _links: PullsDeletePendingReviewResponseLinks;
+    body: string;
+    commit_id: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    pull_request_url: string;
+    state: string;
+    user: PullsDeletePendingReviewResponseUser;
+  };
+  type PullsCreateReviewRequestResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseRequestedTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseRequestedReviewersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: PullsCreateReviewRequestResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseHeadUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseHeadRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsCreateReviewRequestResponseHeadRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseHeadRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsCreateReviewRequestResponseHeadRepoOwner;
+    permissions: PullsCreateReviewRequestResponseHeadRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsCreateReviewRequestResponseHead = {
+    label: string;
+    ref: string;
+    repo: PullsCreateReviewRequestResponseHeadRepo;
+    sha: string;
+    user: PullsCreateReviewRequestResponseHeadUser;
+  };
+  type PullsCreateReviewRequestResponseBaseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseBaseRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsCreateReviewRequestResponseBaseRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseBaseRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsCreateReviewRequestResponseBaseRepoOwner;
+    permissions: PullsCreateReviewRequestResponseBaseRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsCreateReviewRequestResponseBase = {
+    label: string;
+    ref: string;
+    repo: PullsCreateReviewRequestResponseBaseRepo;
+    sha: string;
+    user: PullsCreateReviewRequestResponseBaseUser;
+  };
+  type PullsCreateReviewRequestResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewRequestResponseLinksStatuses = { href: string };
+  type PullsCreateReviewRequestResponseLinksSelf = { href: string };
+  type PullsCreateReviewRequestResponseLinksReviewComments = { href: string };
+  type PullsCreateReviewRequestResponseLinksReviewComment = { href: string };
+  type PullsCreateReviewRequestResponseLinksIssue = { href: string };
+  type PullsCreateReviewRequestResponseLinksHtml = { href: string };
+  type PullsCreateReviewRequestResponseLinksCommits = { href: string };
+  type PullsCreateReviewRequestResponseLinksComments = { href: string };
+  type PullsCreateReviewRequestResponseLinks = {
+    comments: PullsCreateReviewRequestResponseLinksComments;
+    commits: PullsCreateReviewRequestResponseLinksCommits;
+    html: PullsCreateReviewRequestResponseLinksHtml;
+    issue: PullsCreateReviewRequestResponseLinksIssue;
+    review_comment: PullsCreateReviewRequestResponseLinksReviewComment;
+    review_comments: PullsCreateReviewRequestResponseLinksReviewComments;
+    self: PullsCreateReviewRequestResponseLinksSelf;
+    statuses: PullsCreateReviewRequestResponseLinksStatuses;
+  };
+  type PullsCreateReviewRequestResponse = {
+    _links: PullsCreateReviewRequestResponseLinks;
+    active_lock_reason: string;
+    assignee: PullsCreateReviewRequestResponseAssignee;
+    assignees: Array<PullsCreateReviewRequestResponseAssigneesItem>;
+    author_association: string;
+    base: PullsCreateReviewRequestResponseBase;
+    body: string;
+    closed_at: string;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    diff_url: string;
+    draft: boolean;
+    head: PullsCreateReviewRequestResponseHead;
+    html_url: string;
+    id: number;
+    issue_url: string;
+    labels: Array<PullsCreateReviewRequestResponseLabelsItem>;
+    locked: boolean;
+    merge_commit_sha: string;
+    merged_at: string;
+    milestone: PullsCreateReviewRequestResponseMilestone;
+    node_id: string;
+    number: number;
+    patch_url: string;
+    requested_reviewers: Array<
+      PullsCreateReviewRequestResponseRequestedReviewersItem
+    >;
+    requested_teams: Array<PullsCreateReviewRequestResponseRequestedTeamsItem>;
+    review_comment_url: string;
+    review_comments_url: string;
+    state: string;
+    statuses_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: PullsCreateReviewRequestResponseUser;
+  };
+  type PullsCreateReviewCommentReplyResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewCommentReplyResponseLinksSelf = { href: string };
+  type PullsCreateReviewCommentReplyResponseLinksPullRequest = { href: string };
+  type PullsCreateReviewCommentReplyResponseLinksHtml = { href: string };
+  type PullsCreateReviewCommentReplyResponseLinks = {
+    html: PullsCreateReviewCommentReplyResponseLinksHtml;
+    pull_request: PullsCreateReviewCommentReplyResponseLinksPullRequest;
+    self: PullsCreateReviewCommentReplyResponseLinksSelf;
+  };
+  type PullsCreateReviewCommentReplyResponse = {
+    _links: PullsCreateReviewCommentReplyResponseLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    original_commit_id: string;
+    original_position: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    updated_at: string;
+    url: string;
+    user: PullsCreateReviewCommentReplyResponseUser;
+  };
+  type PullsCreateReviewResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateReviewResponseLinksPullRequest = { href: string };
+  type PullsCreateReviewResponseLinksHtml = { href: string };
+  type PullsCreateReviewResponseLinks = {
+    html: PullsCreateReviewResponseLinksHtml;
+    pull_request: PullsCreateReviewResponseLinksPullRequest;
+  };
+  type PullsCreateReviewResponse = {
+    _links: PullsCreateReviewResponseLinks;
+    body: string;
+    commit_id: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    pull_request_url: string;
+    state: string;
+    user: PullsCreateReviewResponseUser;
+  };
+  type PullsCreateFromIssueResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseRequestedTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseRequestedReviewersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: PullsCreateFromIssueResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseMergedBy = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseHeadUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseHeadRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsCreateFromIssueResponseHeadRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseHeadRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsCreateFromIssueResponseHeadRepoOwner;
+    permissions: PullsCreateFromIssueResponseHeadRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsCreateFromIssueResponseHead = {
+    label: string;
+    ref: string;
+    repo: PullsCreateFromIssueResponseHeadRepo;
+    sha: string;
+    user: PullsCreateFromIssueResponseHeadUser;
+  };
+  type PullsCreateFromIssueResponseBaseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseBaseRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsCreateFromIssueResponseBaseRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseBaseRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsCreateFromIssueResponseBaseRepoOwner;
+    permissions: PullsCreateFromIssueResponseBaseRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsCreateFromIssueResponseBase = {
+    label: string;
+    ref: string;
+    repo: PullsCreateFromIssueResponseBaseRepo;
+    sha: string;
+    user: PullsCreateFromIssueResponseBaseUser;
+  };
+  type PullsCreateFromIssueResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateFromIssueResponseLinksStatuses = { href: string };
+  type PullsCreateFromIssueResponseLinksSelf = { href: string };
+  type PullsCreateFromIssueResponseLinksReviewComments = { href: string };
+  type PullsCreateFromIssueResponseLinksReviewComment = { href: string };
+  type PullsCreateFromIssueResponseLinksIssue = { href: string };
+  type PullsCreateFromIssueResponseLinksHtml = { href: string };
+  type PullsCreateFromIssueResponseLinksCommits = { href: string };
+  type PullsCreateFromIssueResponseLinksComments = { href: string };
+  type PullsCreateFromIssueResponseLinks = {
+    comments: PullsCreateFromIssueResponseLinksComments;
+    commits: PullsCreateFromIssueResponseLinksCommits;
+    html: PullsCreateFromIssueResponseLinksHtml;
+    issue: PullsCreateFromIssueResponseLinksIssue;
+    review_comment: PullsCreateFromIssueResponseLinksReviewComment;
+    review_comments: PullsCreateFromIssueResponseLinksReviewComments;
+    self: PullsCreateFromIssueResponseLinksSelf;
+    statuses: PullsCreateFromIssueResponseLinksStatuses;
+  };
+  type PullsCreateFromIssueResponse = {
+    _links: PullsCreateFromIssueResponseLinks;
+    active_lock_reason: string;
+    additions: number;
+    assignee: PullsCreateFromIssueResponseAssignee;
+    assignees: Array<PullsCreateFromIssueResponseAssigneesItem>;
+    author_association: string;
+    base: PullsCreateFromIssueResponseBase;
+    body: string;
+    changed_files: number;
+    closed_at: string;
+    comments: number;
+    comments_url: string;
+    commits: number;
+    commits_url: string;
+    created_at: string;
+    deletions: number;
+    diff_url: string;
+    draft: boolean;
+    head: PullsCreateFromIssueResponseHead;
+    html_url: string;
+    id: number;
+    issue_url: string;
+    labels: Array<PullsCreateFromIssueResponseLabelsItem>;
+    locked: boolean;
+    maintainer_can_modify: boolean;
+    merge_commit_sha: string;
+    mergeable: boolean;
+    mergeable_state: string;
+    merged: boolean;
+    merged_at: string;
+    merged_by: PullsCreateFromIssueResponseMergedBy;
+    milestone: PullsCreateFromIssueResponseMilestone;
+    node_id: string;
+    number: number;
+    patch_url: string;
+    rebaseable: boolean;
+    requested_reviewers: Array<
+      PullsCreateFromIssueResponseRequestedReviewersItem
+    >;
+    requested_teams: Array<PullsCreateFromIssueResponseRequestedTeamsItem>;
+    review_comment_url: string;
+    review_comments: number;
+    review_comments_url: string;
+    state: string;
+    statuses_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: PullsCreateFromIssueResponseUser;
+  };
+  type PullsCreateCommentReplyResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateCommentReplyResponseLinksSelf = { href: string };
+  type PullsCreateCommentReplyResponseLinksPullRequest = { href: string };
+  type PullsCreateCommentReplyResponseLinksHtml = { href: string };
+  type PullsCreateCommentReplyResponseLinks = {
+    html: PullsCreateCommentReplyResponseLinksHtml;
+    pull_request: PullsCreateCommentReplyResponseLinksPullRequest;
+    self: PullsCreateCommentReplyResponseLinksSelf;
+  };
+  type PullsCreateCommentReplyResponse = {
+    _links: PullsCreateCommentReplyResponseLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    in_reply_to_id: number;
+    line: number;
+    node_id: string;
+    original_commit_id: string;
+    original_line: number;
+    original_position: number;
+    original_start_line: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    side: string;
+    start_line: number;
+    start_side: string;
+    updated_at: string;
+    url: string;
+    user: PullsCreateCommentReplyResponseUser;
+  };
+  type PullsCreateCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateCommentResponseLinksSelf = { href: string };
+  type PullsCreateCommentResponseLinksPullRequest = { href: string };
+  type PullsCreateCommentResponseLinksHtml = { href: string };
+  type PullsCreateCommentResponseLinks = {
+    html: PullsCreateCommentResponseLinksHtml;
+    pull_request: PullsCreateCommentResponseLinksPullRequest;
+    self: PullsCreateCommentResponseLinksSelf;
+  };
+  type PullsCreateCommentResponse = {
+    _links: PullsCreateCommentResponseLinks;
+    author_association: string;
+    body: string;
+    commit_id: string;
+    created_at: string;
+    diff_hunk: string;
+    html_url: string;
+    id: number;
+    in_reply_to_id: number;
+    line: number;
+    node_id: string;
+    original_commit_id: string;
+    original_line: number;
+    original_position: number;
+    original_start_line: number;
+    path: string;
+    position: number;
+    pull_request_review_id: number;
+    pull_request_url: string;
+    side: string;
+    start_line: number;
+    start_side: string;
+    updated_at: string;
+    url: string;
+    user: PullsCreateCommentResponseUser;
+  };
+  type PullsCreateResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseRequestedTeamsItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type PullsCreateResponseRequestedReviewersItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: PullsCreateResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type PullsCreateResponseMergedBy = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type PullsCreateResponseHeadUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseHeadRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsCreateResponseHeadRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseHeadRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsCreateResponseHeadRepoOwner;
+    permissions: PullsCreateResponseHeadRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsCreateResponseHead = {
+    label: string;
+    ref: string;
+    repo: PullsCreateResponseHeadRepo;
+    sha: string;
+    user: PullsCreateResponseHeadUser;
+  };
+  type PullsCreateResponseBaseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseBaseRepoPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type PullsCreateResponseBaseRepoOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseBaseRepo = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: PullsCreateResponseBaseRepoOwner;
+    permissions: PullsCreateResponseBaseRepoPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type PullsCreateResponseBase = {
+    label: string;
+    ref: string;
+    repo: PullsCreateResponseBaseRepo;
+    sha: string;
+    user: PullsCreateResponseBaseUser;
+  };
+  type PullsCreateResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type PullsCreateResponseLinksStatuses = { href: string };
+  type PullsCreateResponseLinksSelf = { href: string };
+  type PullsCreateResponseLinksReviewComments = { href: string };
+  type PullsCreateResponseLinksReviewComment = { href: string };
+  type PullsCreateResponseLinksIssue = { href: string };
+  type PullsCreateResponseLinksHtml = { href: string };
+  type PullsCreateResponseLinksCommits = { href: string };
+  type PullsCreateResponseLinksComments = { href: string };
+  type PullsCreateResponseLinks = {
+    comments: PullsCreateResponseLinksComments;
+    commits: PullsCreateResponseLinksCommits;
+    html: PullsCreateResponseLinksHtml;
+    issue: PullsCreateResponseLinksIssue;
+    review_comment: PullsCreateResponseLinksReviewComment;
+    review_comments: PullsCreateResponseLinksReviewComments;
+    self: PullsCreateResponseLinksSelf;
+    statuses: PullsCreateResponseLinksStatuses;
+  };
+  type PullsCreateResponse = {
+    _links: PullsCreateResponseLinks;
+    active_lock_reason: string;
+    additions: number;
+    assignee: PullsCreateResponseAssignee;
+    assignees: Array<PullsCreateResponseAssigneesItem>;
+    author_association: string;
+    base: PullsCreateResponseBase;
+    body: string;
+    changed_files: number;
+    closed_at: string;
+    comments: number;
+    comments_url: string;
+    commits: number;
+    commits_url: string;
+    created_at: string;
+    deletions: number;
+    diff_url: string;
+    draft: boolean;
+    head: PullsCreateResponseHead;
+    html_url: string;
+    id: number;
+    issue_url: string;
+    labels: Array<PullsCreateResponseLabelsItem>;
+    locked: boolean;
+    maintainer_can_modify: boolean;
+    merge_commit_sha: string;
+    mergeable: boolean;
+    mergeable_state: string;
+    merged: boolean;
+    merged_at: string;
+    merged_by: PullsCreateResponseMergedBy;
+    milestone: PullsCreateResponseMilestone;
+    node_id: string;
+    number: number;
+    patch_url: string;
+    rebaseable: boolean;
+    requested_reviewers: Array<PullsCreateResponseRequestedReviewersItem>;
+    requested_teams: Array<PullsCreateResponseRequestedTeamsItem>;
+    review_comment_url: string;
+    review_comments: number;
+    review_comments_url: string;
+    state: string;
+    statuses_url: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: PullsCreateResponseUser;
+  };
+  type ProjectsUpdateColumnResponse = {
+    cards_url: string;
+    created_at: string;
+    id: number;
+    name: string;
+    node_id: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsUpdateCardResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsUpdateCardResponse = {
+    archived: boolean;
+    column_url: string;
+    content_url: string;
+    created_at: string;
+    creator: ProjectsUpdateCardResponseCreator;
+    id: number;
+    node_id: string;
+    note: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsUpdateResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsUpdateResponse = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsUpdateResponseCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsReviewUserPermissionLevelResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsReviewUserPermissionLevelResponse = {
+    permission: string;
+    user: ProjectsReviewUserPermissionLevelResponseUser;
+  };
+  type ProjectsListForUserResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsListForUserResponseItem = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsListForUserResponseItemCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsListForRepoResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsListForRepoResponseItem = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsListForRepoResponseItemCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsListForOrgResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsListForOrgResponseItem = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsListForOrgResponseItemCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsListColumnsResponseItem = {
+    cards_url: string;
+    created_at: string;
+    id: number;
+    name: string;
+    node_id: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsListCollaboratorsResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsListCardsResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsListCardsResponseItem = {
+    archived: boolean;
+    column_url: string;
+    content_url: string;
+    created_at: string;
+    creator: ProjectsListCardsResponseItemCreator;
+    id: number;
+    node_id: string;
+    note: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsGetColumnResponse = {
+    cards_url: string;
+    created_at: string;
+    id: number;
+    name: string;
+    node_id: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsGetCardResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsGetCardResponse = {
+    archived: boolean;
+    column_url: string;
+    content_url: string;
+    created_at: string;
+    creator: ProjectsGetCardResponseCreator;
+    id: number;
+    node_id: string;
+    note: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsGetResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsGetResponse = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsGetResponseCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsCreateForRepoResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsCreateForRepoResponse = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsCreateForRepoResponseCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsCreateForOrgResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsCreateForOrgResponse = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsCreateForOrgResponseCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsCreateForAuthenticatedUserResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsCreateForAuthenticatedUserResponse = {
+    body: string;
+    columns_url: string;
+    created_at: string;
+    creator: ProjectsCreateForAuthenticatedUserResponseCreator;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    number: number;
+    owner_url: string;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsCreateColumnResponse = {
+    cards_url: string;
+    created_at: string;
+    id: number;
+    name: string;
+    node_id: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type ProjectsCreateCardResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ProjectsCreateCardResponse = {
+    archived: boolean;
+    column_url: string;
+    content_url: string;
+    created_at: string;
+    creator: ProjectsCreateCardResponseCreator;
+    id: number;
+    node_id: string;
+    note: string;
+    project_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type OrgsUpdateMembershipResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsUpdateMembershipResponseOrganization = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsUpdateMembershipResponse = {
+    organization: OrgsUpdateMembershipResponseOrganization;
+    organization_url: string;
+    role: string;
+    state: string;
+    url: string;
+    user: OrgsUpdateMembershipResponseUser;
+  };
+  type OrgsUpdateHookResponseConfig = { content_type: string; url: string };
+  type OrgsUpdateHookResponse = {
+    active: boolean;
+    config: OrgsUpdateHookResponseConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    name: string;
+    ping_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type OrgsUpdateResponsePlan = {
+    name: string;
+    private_repos: number;
+    space: number;
+  };
+  type OrgsUpdateResponse = {
+    avatar_url: string;
+    billing_email: string;
+    blog: string;
+    collaborators: number;
+    company: string;
+    created_at: string;
+    default_repository_settings: string;
+    description: string;
+    disk_usage: number;
+    email: string;
+    events_url: string;
+    followers: number;
+    following: number;
+    has_organization_projects: boolean;
+    has_repository_projects: boolean;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_verified: boolean;
+    issues_url: string;
+    location: string;
+    login: string;
+    members_allowed_repository_creation_type: string;
+    members_can_create_repositories: boolean;
+    members_url: string;
+    name: string;
+    node_id: string;
+    owned_private_repos: number;
+    plan: OrgsUpdateResponsePlan;
+    private_gists: number;
+    public_gists: number;
+    public_members_url: string;
+    public_repos: number;
+    repos_url: string;
+    total_private_repos: number;
+    two_factor_requirement_enabled: boolean;
+    type: string;
+    url: string;
+  };
+  type OrgsRemoveOutsideCollaboratorResponse = {
+    documentation_url: string;
+    message: string;
+  };
+  type OrgsListPublicMembersResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsListPendingInvitationsResponseItemInviter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsListPendingInvitationsResponseItem = {
+    created_at: string;
+    email: string;
+    id: number;
+    invitation_team_url: string;
+    inviter: OrgsListPendingInvitationsResponseItemInviter;
+    login: string;
+    role: string;
+    team_count: number;
+  };
+  type OrgsListOutsideCollaboratorsResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsListMembershipsResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsListMembershipsResponseItemOrganization = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsListMembershipsResponseItem = {
+    organization: OrgsListMembershipsResponseItemOrganization;
+    organization_url: string;
+    role: string;
+    state: string;
+    url: string;
+    user: OrgsListMembershipsResponseItemUser;
+  };
+  type OrgsListMembersResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsListInvitationTeamsResponseItem = {
+    description: string;
+    html_url: string;
+    id: number;
+    members_url: string;
+    name: string;
+    node_id: string;
+    parent: null;
+    permission: string;
+    privacy: string;
+    repositories_url: string;
+    slug: string;
+    url: string;
+  };
+  type OrgsListInstallationsResponseInstallationsItemPermissions = {
+    deployments: string;
+    metadata: string;
+    pull_requests: string;
+    statuses: string;
+  };
+  type OrgsListInstallationsResponseInstallationsItemAccount = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsListInstallationsResponseInstallationsItem = {
+    access_tokens_url: string;
+    account: OrgsListInstallationsResponseInstallationsItemAccount;
+    app_id: number;
+    created_at: string;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: OrgsListInstallationsResponseInstallationsItemPermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: null;
+    target_id: number;
+    target_type: string;
+    updated_at: string;
+  };
+  type OrgsListInstallationsResponse = {
+    installations: Array<OrgsListInstallationsResponseInstallationsItem>;
+    total_count: number;
+  };
+  type OrgsListHooksResponseItemConfig = { content_type: string; url: string };
+  type OrgsListHooksResponseItem = {
+    active: boolean;
+    config: OrgsListHooksResponseItemConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    name: string;
+    ping_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type OrgsListForUserResponseItem = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsListForAuthenticatedUserResponseItem = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsListBlockedUsersResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsListResponseItem = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsGetMembershipForAuthenticatedUserResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsGetMembershipForAuthenticatedUserResponseOrganization = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsGetMembershipForAuthenticatedUserResponse = {
+    organization: OrgsGetMembershipForAuthenticatedUserResponseOrganization;
+    organization_url: string;
+    role: string;
+    state: string;
+    url: string;
+    user: OrgsGetMembershipForAuthenticatedUserResponseUser;
+  };
+  type OrgsGetMembershipResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsGetMembershipResponseOrganization = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsGetMembershipResponse = {
+    organization: OrgsGetMembershipResponseOrganization;
+    organization_url: string;
+    role: string;
+    state: string;
+    url: string;
+    user: OrgsGetMembershipResponseUser;
+  };
+  type OrgsGetHookResponseConfig = { content_type: string; url: string };
+  type OrgsGetHookResponse = {
+    active: boolean;
+    config: OrgsGetHookResponseConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    name: string;
+    ping_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type OrgsGetResponsePlan = {
+    name: string;
+    private_repos: number;
+    space: number;
+    filled_seats?: number;
+    seats?: number;
+  };
+  type OrgsGetResponse = {
+    avatar_url: string;
+    billing_email?: string;
+    blog: string;
+    collaborators?: number;
+    company: string;
+    created_at: string;
+    default_repository_settings?: string;
+    description: string;
+    disk_usage?: number;
+    email: string;
+    events_url: string;
+    followers: number;
+    following: number;
+    has_organization_projects: boolean;
+    has_repository_projects: boolean;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_verified: boolean;
+    issues_url: string;
+    location: string;
+    login: string;
+    members_allowed_repository_creation_type?: string;
+    members_can_create_repositories?: boolean;
+    members_url: string;
+    name: string;
+    node_id: string;
+    owned_private_repos?: number;
+    plan: OrgsGetResponsePlan;
+    private_gists?: number;
+    public_gists: number;
+    public_members_url: string;
+    public_repos: number;
+    repos_url: string;
+    total_private_repos?: number;
+    two_factor_requirement_enabled?: boolean;
+    type: string;
+    url: string;
+  };
+  type OrgsCreateInvitationResponseInviter = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsCreateInvitationResponse = {
+    created_at: string;
+    email: string;
+    id: number;
+    invitation_team_url: string;
+    inviter: OrgsCreateInvitationResponseInviter;
+    login: string;
+    role: string;
+    team_count: number;
+  };
+  type OrgsCreateHookResponseConfig = { content_type: string; url: string };
+  type OrgsCreateHookResponse = {
+    active: boolean;
+    config: OrgsCreateHookResponseConfig;
+    created_at: string;
+    events: Array<string>;
+    id: number;
+    name: string;
+    ping_url: string;
+    updated_at: string;
+    url: string;
+  };
+  type OrgsConvertMemberToOutsideCollaboratorResponse = {
+    documentation_url: string;
+    message: string;
+  };
+  type OrgsAddOrUpdateMembershipResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OrgsAddOrUpdateMembershipResponseOrganization = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type OrgsAddOrUpdateMembershipResponse = {
+    organization: OrgsAddOrUpdateMembershipResponseOrganization;
+    organization_url: string;
+    role: string;
+    state: string;
+    url: string;
+    user: OrgsAddOrUpdateMembershipResponseUser;
+  };
+  type OauthAuthorizationsUpdateAuthorizationResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsUpdateAuthorizationResponse = {
+    app: OauthAuthorizationsUpdateAuthorizationResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsResetAuthorizationResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OauthAuthorizationsResetAuthorizationResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsResetAuthorizationResponse = {
+    app: OauthAuthorizationsResetAuthorizationResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+    user: OauthAuthorizationsResetAuthorizationResponseUser;
+  };
+  type OauthAuthorizationsListGrantsResponseItemApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsListGrantsResponseItem = {
+    app: OauthAuthorizationsListGrantsResponseItemApp;
+    created_at: string;
+    id: number;
+    scopes: Array<string>;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsListAuthorizationsResponseItemApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsListAuthorizationsResponseItem = {
+    app: OauthAuthorizationsListAuthorizationsResponseItemApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintResponse = {
+    app: OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintResponse = {
+    app: OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetOrCreateAuthorizationForAppResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetOrCreateAuthorizationForAppResponse = {
+    app: OauthAuthorizationsGetOrCreateAuthorizationForAppResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetGrantResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetGrantResponse = {
+    app: OauthAuthorizationsGetGrantResponseApp;
+    created_at: string;
+    id: number;
+    scopes: Array<string>;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetAuthorizationResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsGetAuthorizationResponse = {
+    app: OauthAuthorizationsGetAuthorizationResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsCreateAuthorizationResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsCreateAuthorizationResponse = {
+    app: OauthAuthorizationsCreateAuthorizationResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+  };
+  type OauthAuthorizationsCheckAuthorizationResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type OauthAuthorizationsCheckAuthorizationResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type OauthAuthorizationsCheckAuthorizationResponse = {
+    app: OauthAuthorizationsCheckAuthorizationResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+    user: OauthAuthorizationsCheckAuthorizationResponseUser;
+  };
+  type MigrationsUpdateImportResponse = {
+    authors_url: string;
+    html_url: string;
+    repository_url: string;
+    status: string;
+    url: string;
+    use_lfs: string;
+    vcs: string;
+    vcs_url: string;
+    authors_count?: number;
+    commit_count?: number;
+    has_large_files?: boolean;
+    large_files_count?: number;
+    large_files_size?: number;
+    percent?: number;
+    status_text?: string;
+    tfvc_project?: string;
+  };
+  type MigrationsStartImportResponse = {
+    authors_count: number;
+    authors_url: string;
+    commit_count: number;
+    has_large_files: boolean;
+    html_url: string;
+    large_files_count: number;
+    large_files_size: number;
+    percent: number;
+    repository_url: string;
+    status: string;
+    status_text: string;
+    url: string;
+    use_lfs: string;
+    vcs: string;
+    vcs_url: string;
+  };
+  type MigrationsStartForOrgResponseRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type MigrationsStartForOrgResponseRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsStartForOrgResponseRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: MigrationsStartForOrgResponseRepositoriesItemOwner;
+    permissions: MigrationsStartForOrgResponseRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type MigrationsStartForOrgResponseOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type MigrationsStartForOrgResponse = {
+    created_at: string;
+    exclude_attachments: boolean;
+    guid: string;
+    id: number;
+    lock_repositories: boolean;
+    owner: MigrationsStartForOrgResponseOwner;
+    repositories: Array<MigrationsStartForOrgResponseRepositoriesItem>;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type MigrationsStartForAuthenticatedUserResponseRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type MigrationsStartForAuthenticatedUserResponseRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsStartForAuthenticatedUserResponseRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: MigrationsStartForAuthenticatedUserResponseRepositoriesItemOwner;
+    permissions: MigrationsStartForAuthenticatedUserResponseRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type MigrationsStartForAuthenticatedUserResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsStartForAuthenticatedUserResponse = {
+    created_at: string;
+    exclude_attachments: boolean;
+    guid: string;
+    id: number;
+    lock_repositories: boolean;
+    owner: MigrationsStartForAuthenticatedUserResponseOwner;
+    repositories: Array<
+      MigrationsStartForAuthenticatedUserResponseRepositoriesItem
+    >;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type MigrationsSetLfsPreferenceResponse = {
+    authors_count: number;
+    authors_url: string;
+    has_large_files: boolean;
+    html_url: string;
+    large_files_count: number;
+    large_files_size: number;
+    repository_url: string;
+    status: string;
+    status_text: string;
+    url: string;
+    use_lfs: string;
+    vcs: string;
+    vcs_url: string;
+  };
+  type MigrationsMapCommitAuthorResponse = {
+    email: string;
+    id: number;
+    import_url: string;
+    name: string;
+    remote_id: string;
+    remote_name: string;
+    url: string;
+  };
+  type MigrationsListForOrgResponseItemRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type MigrationsListForOrgResponseItemRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsListForOrgResponseItemRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: MigrationsListForOrgResponseItemRepositoriesItemOwner;
+    permissions: MigrationsListForOrgResponseItemRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type MigrationsListForOrgResponseItemOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type MigrationsListForOrgResponseItem = {
+    created_at: string;
+    exclude_attachments: boolean;
+    guid: string;
+    id: number;
+    lock_repositories: boolean;
+    owner: MigrationsListForOrgResponseItemOwner;
+    repositories: Array<MigrationsListForOrgResponseItemRepositoriesItem>;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type MigrationsListForAuthenticatedUserResponseItemRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type MigrationsListForAuthenticatedUserResponseItemRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsListForAuthenticatedUserResponseItemRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: MigrationsListForAuthenticatedUserResponseItemRepositoriesItemOwner;
+    permissions: MigrationsListForAuthenticatedUserResponseItemRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type MigrationsListForAuthenticatedUserResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsListForAuthenticatedUserResponseItem = {
+    created_at: string;
+    exclude_attachments: boolean;
+    guid: string;
+    id: number;
+    lock_repositories: boolean;
+    owner: MigrationsListForAuthenticatedUserResponseItemOwner;
+    repositories: Array<
+      MigrationsListForAuthenticatedUserResponseItemRepositoriesItem
+    >;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type MigrationsGetStatusForOrgResponseRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type MigrationsGetStatusForOrgResponseRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsGetStatusForOrgResponseRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: MigrationsGetStatusForOrgResponseRepositoriesItemOwner;
+    permissions: MigrationsGetStatusForOrgResponseRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type MigrationsGetStatusForOrgResponseOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type MigrationsGetStatusForOrgResponse = {
+    created_at: string;
+    exclude_attachments: boolean;
+    guid: string;
+    id: number;
+    lock_repositories: boolean;
+    owner: MigrationsGetStatusForOrgResponseOwner;
+    repositories: Array<MigrationsGetStatusForOrgResponseRepositoriesItem>;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type MigrationsGetStatusForAuthenticatedUserResponseRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type MigrationsGetStatusForAuthenticatedUserResponseRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsGetStatusForAuthenticatedUserResponseRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: MigrationsGetStatusForAuthenticatedUserResponseRepositoriesItemOwner;
+    permissions: MigrationsGetStatusForAuthenticatedUserResponseRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type MigrationsGetStatusForAuthenticatedUserResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type MigrationsGetStatusForAuthenticatedUserResponse = {
+    created_at: string;
+    exclude_attachments: boolean;
+    guid: string;
+    id: number;
+    lock_repositories: boolean;
+    owner: MigrationsGetStatusForAuthenticatedUserResponseOwner;
+    repositories: Array<
+      MigrationsGetStatusForAuthenticatedUserResponseRepositoriesItem
+    >;
+    state: string;
+    updated_at: string;
+    url: string;
+  };
+  type MigrationsGetLargeFilesResponseItem = {
+    oid: string;
+    path: string;
+    ref_name: string;
+    size: number;
+  };
+  type MigrationsGetImportProgressResponse = {
+    authors_count: number;
+    authors_url: string;
+    has_large_files: boolean;
+    html_url: string;
+    large_files_count: number;
+    large_files_size: number;
+    repository_url: string;
+    status: string;
+    status_text: string;
+    url: string;
+    use_lfs: string;
+    vcs: string;
+    vcs_url: string;
+  };
+  type MigrationsGetCommitAuthorsResponseItem = {
+    email: string;
+    id: number;
+    import_url: string;
+    name: string;
+    remote_id: string;
+    remote_name: string;
+    url: string;
+  };
+  type MetaGetResponse = {
+    git: Array<string>;
+    hooks: Array<string>;
+    importer: Array<string>;
+    pages: Array<string>;
+    verifiable_password_authentication: boolean;
+  };
+  type LicensesListCommonlyUsedResponseItem = {
+    key: string;
+    name: string;
+    node_id?: string;
+    spdx_id: string;
+    url: string;
+  };
+  type LicensesListResponseItem = {
+    key: string;
+    name: string;
+    node_id?: string;
+    spdx_id: string;
+    url: string;
+  };
+  type LicensesGetForRepoResponseLicense = {
+    key: string;
+    name: string;
+    node_id: string;
+    spdx_id: string;
+    url: string;
+  };
+  type LicensesGetForRepoResponseLinks = {
+    git: string;
+    html: string;
+    self: string;
+  };
+  type LicensesGetForRepoResponse = {
+    _links: LicensesGetForRepoResponseLinks;
+    content: string;
+    download_url: string;
+    encoding: string;
+    git_url: string;
+    html_url: string;
+    license: LicensesGetForRepoResponseLicense;
+    name: string;
+    path: string;
+    sha: string;
+    size: number;
+    type: string;
+    url: string;
+  };
+  type LicensesGetResponse = {
+    body: string;
+    conditions: Array<string>;
+    description: string;
+    featured: boolean;
+    html_url: string;
+    implementation: string;
+    key: string;
+    limitations: Array<string>;
+    name: string;
+    node_id: string;
+    permissions: Array<string>;
+    spdx_id: string;
+    url: string;
+  };
+  type IssuesUpdateMilestoneResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesUpdateMilestoneResponse = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesUpdateMilestoneResponseCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesUpdateLabelResponse = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesUpdateCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesUpdateCommentResponse = {
+    body: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: IssuesUpdateCommentResponseUser;
+  };
+  type IssuesUpdateResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesUpdateResponsePullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesUpdateResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesUpdateResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesUpdateResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesUpdateResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesUpdateResponseClosedBy = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesUpdateResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesUpdateResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesUpdateResponse = {
+    active_lock_reason: string;
+    assignee: IssuesUpdateResponseAssignee;
+    assignees: Array<IssuesUpdateResponseAssigneesItem>;
+    body: string;
+    closed_at: null;
+    closed_by: IssuesUpdateResponseClosedBy;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesUpdateResponseLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesUpdateResponseMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesUpdateResponsePullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesUpdateResponseUser;
+  };
+  type IssuesReplaceLabelsResponseItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesRemoveLabelResponseItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponsePullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesRemoveAssigneesResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesRemoveAssigneesResponse = {
+    active_lock_reason: string;
+    assignee: IssuesRemoveAssigneesResponseAssignee;
+    assignees: Array<IssuesRemoveAssigneesResponseAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesRemoveAssigneesResponseLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesRemoveAssigneesResponseMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesRemoveAssigneesResponsePullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesRemoveAssigneesResponseUser;
+  };
+  type IssuesListMilestonesForRepoResponseItemCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListMilestonesForRepoResponseItem = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesListMilestonesForRepoResponseItemCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesListLabelsOnIssueResponseItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListLabelsForRepoResponseItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListLabelsForMilestoneResponseItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItemPullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItemMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItemMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesListForRepoResponseItemMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItemLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItemAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItemAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForRepoResponseItem = {
+    active_lock_reason: string;
+    assignee: IssuesListForRepoResponseItemAssignee;
+    assignees: Array<IssuesListForRepoResponseItemAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesListForRepoResponseItemLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesListForRepoResponseItemMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesListForRepoResponseItemPullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesListForRepoResponseItemUser;
+  };
+  type IssuesListForOrgResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItemRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type IssuesListForOrgResponseItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItemRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: IssuesListForOrgResponseItemRepositoryOwner;
+    permissions: IssuesListForOrgResponseItemRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type IssuesListForOrgResponseItemPullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItemMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItemMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesListForOrgResponseItemMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItemLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItemAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItemAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForOrgResponseItem = {
+    active_lock_reason: string;
+    assignee: IssuesListForOrgResponseItemAssignee;
+    assignees: Array<IssuesListForOrgResponseItemAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesListForOrgResponseItemLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesListForOrgResponseItemMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesListForOrgResponseItemPullRequest;
+    repository: IssuesListForOrgResponseItemRepository;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesListForOrgResponseItemUser;
+  };
+  type IssuesListForAuthenticatedUserResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItemRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type IssuesListForAuthenticatedUserResponseItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItemRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: IssuesListForAuthenticatedUserResponseItemRepositoryOwner;
+    permissions: IssuesListForAuthenticatedUserResponseItemRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type IssuesListForAuthenticatedUserResponseItemPullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItemMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItemMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesListForAuthenticatedUserResponseItemMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItemLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItemAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItemAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListForAuthenticatedUserResponseItem = {
+    active_lock_reason: string;
+    assignee: IssuesListForAuthenticatedUserResponseItemAssignee;
+    assignees: Array<IssuesListForAuthenticatedUserResponseItemAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesListForAuthenticatedUserResponseItemLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesListForAuthenticatedUserResponseItemMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesListForAuthenticatedUserResponseItemPullRequest;
+    repository: IssuesListForAuthenticatedUserResponseItemRepository;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesListForAuthenticatedUserResponseItemUser;
+  };
+  type IssuesListEventsForTimelineResponseItemActor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListEventsForTimelineResponseItem = {
+    actor: IssuesListEventsForTimelineResponseItemActor;
+    commit_id: string;
+    commit_url: string;
+    created_at: string;
+    event: string;
+    id: number;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssueUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssuePullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssueMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssueMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesListEventsForRepoResponseItemIssueMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssueLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssueAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssueAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItemIssue = {
+    active_lock_reason: string;
+    assignee: IssuesListEventsForRepoResponseItemIssueAssignee;
+    assignees: Array<IssuesListEventsForRepoResponseItemIssueAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesListEventsForRepoResponseItemIssueLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesListEventsForRepoResponseItemIssueMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesListEventsForRepoResponseItemIssuePullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesListEventsForRepoResponseItemIssueUser;
+  };
+  type IssuesListEventsForRepoResponseItemActor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListEventsForRepoResponseItem = {
+    actor: IssuesListEventsForRepoResponseItemActor;
+    commit_id: string;
+    commit_url: string;
+    created_at: string;
+    event: string;
+    id: number;
+    issue: IssuesListEventsForRepoResponseItemIssue;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListEventsResponseItemActor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListEventsResponseItem = {
+    actor: IssuesListEventsResponseItemActor;
+    commit_id: string;
+    commit_url: string;
+    created_at: string;
+    event: string;
+    id: number;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListCommentsForRepoResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListCommentsForRepoResponseItem = {
+    body: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: IssuesListCommentsForRepoResponseItemUser;
+  };
+  type IssuesListCommentsResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListCommentsResponseItem = {
+    body: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: IssuesListCommentsResponseItemUser;
+  };
+  type IssuesListAssigneesResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListResponseItemRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type IssuesListResponseItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListResponseItemRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: IssuesListResponseItemRepositoryOwner;
+    permissions: IssuesListResponseItemRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type IssuesListResponseItemPullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesListResponseItemMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListResponseItemMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesListResponseItemMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesListResponseItemLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesListResponseItemAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListResponseItemAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesListResponseItem = {
+    active_lock_reason: string;
+    assignee: IssuesListResponseItemAssignee;
+    assignees: Array<IssuesListResponseItemAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesListResponseItemLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesListResponseItemMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesListResponseItemPullRequest;
+    repository: IssuesListResponseItemRepository;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesListResponseItemUser;
+  };
+  type IssuesGetMilestoneResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetMilestoneResponse = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesGetMilestoneResponseCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesGetLabelResponse = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssueUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssuePullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssueMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssueMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesGetEventResponseIssueMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssueLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssueAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssueAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetEventResponseIssue = {
+    active_lock_reason: string;
+    assignee: IssuesGetEventResponseIssueAssignee;
+    assignees: Array<IssuesGetEventResponseIssueAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesGetEventResponseIssueLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesGetEventResponseIssueMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesGetEventResponseIssuePullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesGetEventResponseIssueUser;
+  };
+  type IssuesGetEventResponseActor = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetEventResponse = {
+    actor: IssuesGetEventResponseActor;
+    commit_id: string;
+    commit_url: string;
+    created_at: string;
+    event: string;
+    id: number;
+    issue: IssuesGetEventResponseIssue;
+    node_id: string;
+    url: string;
+  };
+  type IssuesGetCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetCommentResponse = {
+    body: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: IssuesGetCommentResponseUser;
+  };
+  type IssuesGetResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetResponsePullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesGetResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesGetResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesGetResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesGetResponseClosedBy = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesGetResponse = {
+    active_lock_reason: string;
+    assignee: IssuesGetResponseAssignee;
+    assignees: Array<IssuesGetResponseAssigneesItem>;
+    body: string;
+    closed_at: null;
+    closed_by: IssuesGetResponseClosedBy;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesGetResponseLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesGetResponseMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesGetResponsePullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesGetResponseUser;
+  };
+  type IssuesCreateMilestoneResponseCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesCreateMilestoneResponse = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesCreateMilestoneResponseCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesCreateLabelResponse = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesCreateCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesCreateCommentResponse = {
+    body: string;
+    created_at: string;
+    html_url: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: IssuesCreateCommentResponseUser;
+  };
+  type IssuesCreateResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesCreateResponsePullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesCreateResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesCreateResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesCreateResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesCreateResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesCreateResponseClosedBy = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesCreateResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesCreateResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesCreateResponse = {
+    active_lock_reason: string;
+    assignee: IssuesCreateResponseAssignee;
+    assignees: Array<IssuesCreateResponseAssigneesItem>;
+    body: string;
+    closed_at: null;
+    closed_by: IssuesCreateResponseClosedBy;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesCreateResponseLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesCreateResponseMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesCreateResponsePullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesCreateResponseUser;
+  };
+  type IssuesAddLabelsResponseItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponsePullRequest = {
+    diff_url: string;
+    html_url: string;
+    patch_url: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponseMilestoneCreator = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponseMilestone = {
+    closed_at: string;
+    closed_issues: number;
+    created_at: string;
+    creator: IssuesAddAssigneesResponseMilestoneCreator;
+    description: string;
+    due_on: string;
+    html_url: string;
+    id: number;
+    labels_url: string;
+    node_id: string;
+    number: number;
+    open_issues: number;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponseLabelsItem = {
+    color: string;
+    default: boolean;
+    description: string;
+    id: number;
+    name: string;
+    node_id: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponseAssigneesItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponseAssignee = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type IssuesAddAssigneesResponse = {
+    active_lock_reason: string;
+    assignee: IssuesAddAssigneesResponseAssignee;
+    assignees: Array<IssuesAddAssigneesResponseAssigneesItem>;
+    body: string;
+    closed_at: null;
+    comments: number;
+    comments_url: string;
+    created_at: string;
+    events_url: string;
+    html_url: string;
+    id: number;
+    labels: Array<IssuesAddAssigneesResponseLabelsItem>;
+    labels_url: string;
+    locked: boolean;
+    milestone: IssuesAddAssigneesResponseMilestone;
+    node_id: string;
+    number: number;
+    pull_request: IssuesAddAssigneesResponsePullRequest;
+    repository_url: string;
+    state: string;
+    title: string;
+    updated_at: string;
+    url: string;
+    user: IssuesAddAssigneesResponseUser;
+  };
+  type InteractionsGetRestrictionsForRepoResponse = {
+    expires_at: string;
+    limit: string;
+    origin: string;
+  };
+  type InteractionsGetRestrictionsForOrgResponse = {
+    expires_at: string;
+    limit: string;
+    origin: string;
+  };
+  type InteractionsAddOrUpdateRestrictionsForRepoResponse = {
+    expires_at: string;
+    limit: string;
+    origin: string;
+  };
+  type InteractionsAddOrUpdateRestrictionsForOrgResponse = {
+    expires_at: string;
+    limit: string;
+    origin: string;
+  };
+  type GitignoreGetTemplateResponse = { name: string; source: string };
+  type GitUpdateRefResponseObject = { sha: string; type: string; url: string };
+  type GitUpdateRefResponse = {
+    node_id: string;
+    object: GitUpdateRefResponseObject;
+    ref: string;
+    url: string;
+  };
+  type GitListMatchingRefsResponseItemObject = {
+    sha: string;
+    type: string;
+    url: string;
+  };
+  type GitListMatchingRefsResponseItem = {
+    node_id: string;
+    object: GitListMatchingRefsResponseItemObject;
+    ref: string;
+    url: string;
+  };
+  type GitGetTagResponseVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type GitGetTagResponseTagger = { date: string; email: string; name: string };
+  type GitGetTagResponseObject = { sha: string; type: string; url: string };
+  type GitGetTagResponse = {
+    message: string;
+    node_id: string;
+    object: GitGetTagResponseObject;
+    sha: string;
+    tag: string;
+    tagger: GitGetTagResponseTagger;
+    url: string;
+    verification: GitGetTagResponseVerification;
+  };
+  type GitGetRefResponseObject = { sha: string; type: string; url: string };
+  type GitGetRefResponse = {
+    node_id: string;
+    object: GitGetRefResponseObject;
+    ref: string;
+    url: string;
+  };
+  type GitGetCommitResponseVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type GitGetCommitResponseTree = { sha: string; url: string };
+  type GitGetCommitResponseParentsItem = { sha: string; url: string };
+  type GitGetCommitResponseCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type GitGetCommitResponseAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type GitGetCommitResponse = {
+    author: GitGetCommitResponseAuthor;
+    committer: GitGetCommitResponseCommitter;
+    message: string;
+    parents: Array<GitGetCommitResponseParentsItem>;
+    sha: string;
+    tree: GitGetCommitResponseTree;
+    url: string;
+    verification: GitGetCommitResponseVerification;
+  };
+  type GitGetBlobResponse = {
+    content: string;
+    encoding: string;
+    sha: string;
+    size: number;
+    url: string;
+  };
+  type GitCreateTreeResponseTreeItem = {
+    mode: string;
+    path: string;
+    sha: string;
+    size: number;
+    type: string;
+    url: string;
+  };
+  type GitCreateTreeResponse = {
+    sha: string;
+    tree: Array<GitCreateTreeResponseTreeItem>;
+    url: string;
+  };
+  type GitCreateTagResponseVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type GitCreateTagResponseTagger = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type GitCreateTagResponseObject = { sha: string; type: string; url: string };
+  type GitCreateTagResponse = {
+    message: string;
+    node_id: string;
+    object: GitCreateTagResponseObject;
+    sha: string;
+    tag: string;
+    tagger: GitCreateTagResponseTagger;
+    url: string;
+    verification: GitCreateTagResponseVerification;
+  };
+  type GitCreateRefResponseObject = { sha: string; type: string; url: string };
+  type GitCreateRefResponse = {
+    node_id: string;
+    object: GitCreateRefResponseObject;
+    ref: string;
+    url: string;
+  };
+  type GitCreateCommitResponseVerification = {
+    payload: null;
+    reason: string;
+    signature: null;
+    verified: boolean;
+  };
+  type GitCreateCommitResponseTree = { sha: string; url: string };
+  type GitCreateCommitResponseParentsItem = { sha: string; url: string };
+  type GitCreateCommitResponseCommitter = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type GitCreateCommitResponseAuthor = {
+    date: string;
+    email: string;
+    name: string;
+  };
+  type GitCreateCommitResponse = {
+    author: GitCreateCommitResponseAuthor;
+    committer: GitCreateCommitResponseCommitter;
+    message: string;
+    node_id: string;
+    parents: Array<GitCreateCommitResponseParentsItem>;
+    sha: string;
+    tree: GitCreateCommitResponseTree;
+    url: string;
+    verification: GitCreateCommitResponseVerification;
+  };
+  type GitCreateBlobResponse = { sha: string; url: string };
+  type GistsUpdateCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsUpdateCommentResponse = {
+    body: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: GistsUpdateCommentResponseUser;
+  };
+  type GistsUpdateResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsUpdateResponseHistoryItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsUpdateResponseHistoryItemChangeStatus = {
+    additions: number;
+    deletions: number;
+    total: number;
+  };
+  type GistsUpdateResponseHistoryItem = {
+    change_status: GistsUpdateResponseHistoryItemChangeStatus;
+    committed_at: string;
+    url: string;
+    user: GistsUpdateResponseHistoryItemUser;
+    version: string;
+  };
+  type GistsUpdateResponseForksItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsUpdateResponseForksItem = {
+    created_at: string;
+    id: string;
+    updated_at: string;
+    url: string;
+    user: GistsUpdateResponseForksItemUser;
+  };
+  type GistsUpdateResponseFilesNewFileTxt = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsUpdateResponseFilesHelloWorldRb = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsUpdateResponseFilesHelloWorldPy = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsUpdateResponseFilesHelloWorldMd = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsUpdateResponseFiles = {
+    "hello_world.md": GistsUpdateResponseFilesHelloWorldMd;
+    "hello_world.py": GistsUpdateResponseFilesHelloWorldPy;
+    "hello_world.rb": GistsUpdateResponseFilesHelloWorldRb;
+    "new_file.txt": GistsUpdateResponseFilesNewFileTxt;
+  };
+  type GistsUpdateResponse = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsUpdateResponseFiles;
+    forks: Array<GistsUpdateResponseForksItem>;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    history: Array<GistsUpdateResponseHistoryItem>;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsUpdateResponseOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsListStarredResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsListStarredResponseItemFilesHelloWorldRb = {
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    type: string;
+  };
+  type GistsListStarredResponseItemFiles = {
+    "hello_world.rb": GistsListStarredResponseItemFilesHelloWorldRb;
+  };
+  type GistsListStarredResponseItem = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsListStarredResponseItemFiles;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsListStarredResponseItemOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsListPublicForUserResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsListPublicForUserResponseItemFilesHelloWorldRb = {
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    type: string;
+  };
+  type GistsListPublicForUserResponseItemFiles = {
+    "hello_world.rb": GistsListPublicForUserResponseItemFilesHelloWorldRb;
+  };
+  type GistsListPublicForUserResponseItem = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsListPublicForUserResponseItemFiles;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsListPublicForUserResponseItemOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsListPublicResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsListPublicResponseItemFilesHelloWorldRb = {
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    type: string;
+  };
+  type GistsListPublicResponseItemFiles = {
+    "hello_world.rb": GistsListPublicResponseItemFilesHelloWorldRb;
+  };
+  type GistsListPublicResponseItem = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsListPublicResponseItemFiles;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsListPublicResponseItemOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsListForksResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsListForksResponseItem = {
+    created_at: string;
+    id: string;
+    updated_at: string;
+    url: string;
+    user: GistsListForksResponseItemUser;
+  };
+  type GistsListCommitsResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsListCommitsResponseItemChangeStatus = {
+    additions: number;
+    deletions: number;
+    total: number;
+  };
+  type GistsListCommitsResponseItem = {
+    change_status: GistsListCommitsResponseItemChangeStatus;
+    committed_at: string;
+    url: string;
+    user: GistsListCommitsResponseItemUser;
+    version: string;
+  };
+  type GistsListCommentsResponseItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsListCommentsResponseItem = {
+    body: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: GistsListCommentsResponseItemUser;
+  };
+  type GistsListResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsListResponseItemFilesHelloWorldRb = {
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    type: string;
+  };
+  type GistsListResponseItemFiles = {
+    "hello_world.rb": GistsListResponseItemFilesHelloWorldRb;
+  };
+  type GistsListResponseItem = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsListResponseItemFiles;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsListResponseItemOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsGetRevisionResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsGetRevisionResponseHistoryItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsGetRevisionResponseHistoryItemChangeStatus = {
+    additions: number;
+    deletions: number;
+    total: number;
+  };
+  type GistsGetRevisionResponseHistoryItem = {
+    change_status: GistsGetRevisionResponseHistoryItemChangeStatus;
+    committed_at: string;
+    url: string;
+    user: GistsGetRevisionResponseHistoryItemUser;
+    version: string;
+  };
+  type GistsGetRevisionResponseForksItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsGetRevisionResponseForksItem = {
+    created_at: string;
+    id: string;
+    updated_at: string;
+    url: string;
+    user: GistsGetRevisionResponseForksItemUser;
+  };
+  type GistsGetRevisionResponseFilesHelloWorldRubyTxt = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetRevisionResponseFilesHelloWorldPythonTxt = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetRevisionResponseFilesHelloWorldRb = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetRevisionResponseFilesHelloWorldPy = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetRevisionResponseFiles = {
+    "hello_world.py": GistsGetRevisionResponseFilesHelloWorldPy;
+    "hello_world.rb": GistsGetRevisionResponseFilesHelloWorldRb;
+    "hello_world_python.txt": GistsGetRevisionResponseFilesHelloWorldPythonTxt;
+    "hello_world_ruby.txt": GistsGetRevisionResponseFilesHelloWorldRubyTxt;
+  };
+  type GistsGetRevisionResponse = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsGetRevisionResponseFiles;
+    forks: Array<GistsGetRevisionResponseForksItem>;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    history: Array<GistsGetRevisionResponseHistoryItem>;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsGetRevisionResponseOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsGetCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsGetCommentResponse = {
+    body: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: GistsGetCommentResponseUser;
+  };
+  type GistsGetResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsGetResponseHistoryItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsGetResponseHistoryItemChangeStatus = {
+    additions: number;
+    deletions: number;
+    total: number;
+  };
+  type GistsGetResponseHistoryItem = {
+    change_status: GistsGetResponseHistoryItemChangeStatus;
+    committed_at: string;
+    url: string;
+    user: GistsGetResponseHistoryItemUser;
+    version: string;
+  };
+  type GistsGetResponseForksItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsGetResponseForksItem = {
+    created_at: string;
+    id: string;
+    updated_at: string;
+    url: string;
+    user: GistsGetResponseForksItemUser;
+  };
+  type GistsGetResponseFilesHelloWorldRubyTxt = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetResponseFilesHelloWorldPythonTxt = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetResponseFilesHelloWorldRb = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetResponseFilesHelloWorldPy = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsGetResponseFiles = {
+    "hello_world.py": GistsGetResponseFilesHelloWorldPy;
+    "hello_world.rb": GistsGetResponseFilesHelloWorldRb;
+    "hello_world_python.txt": GistsGetResponseFilesHelloWorldPythonTxt;
+    "hello_world_ruby.txt": GistsGetResponseFilesHelloWorldRubyTxt;
+  };
+  type GistsGetResponse = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsGetResponseFiles;
+    forks: Array<GistsGetResponseForksItem>;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    history: Array<GistsGetResponseHistoryItem>;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsGetResponseOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsForkResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsForkResponseFilesHelloWorldRb = {
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    type: string;
+  };
+  type GistsForkResponseFiles = {
+    "hello_world.rb": GistsForkResponseFilesHelloWorldRb;
+  };
+  type GistsForkResponse = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsForkResponseFiles;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsForkResponseOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type GistsCreateCommentResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsCreateCommentResponse = {
+    body: string;
+    created_at: string;
+    id: number;
+    node_id: string;
+    updated_at: string;
+    url: string;
+    user: GistsCreateCommentResponseUser;
+  };
+  type GistsCreateResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsCreateResponseHistoryItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsCreateResponseHistoryItemChangeStatus = {
+    additions: number;
+    deletions: number;
+    total: number;
+  };
+  type GistsCreateResponseHistoryItem = {
+    change_status: GistsCreateResponseHistoryItemChangeStatus;
+    committed_at: string;
+    url: string;
+    user: GistsCreateResponseHistoryItemUser;
+    version: string;
+  };
+  type GistsCreateResponseForksItemUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type GistsCreateResponseForksItem = {
+    created_at: string;
+    id: string;
+    updated_at: string;
+    url: string;
+    user: GistsCreateResponseForksItemUser;
+  };
+  type GistsCreateResponseFilesHelloWorldRubyTxt = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsCreateResponseFilesHelloWorldPythonTxt = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsCreateResponseFilesHelloWorldRb = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsCreateResponseFilesHelloWorldPy = {
+    content: string;
+    filename: string;
+    language: string;
+    raw_url: string;
+    size: number;
+    truncated: boolean;
+    type: string;
+  };
+  type GistsCreateResponseFiles = {
+    "hello_world.py": GistsCreateResponseFilesHelloWorldPy;
+    "hello_world.rb": GistsCreateResponseFilesHelloWorldRb;
+    "hello_world_python.txt": GistsCreateResponseFilesHelloWorldPythonTxt;
+    "hello_world_ruby.txt": GistsCreateResponseFilesHelloWorldRubyTxt;
+  };
+  type GistsCreateResponse = {
+    comments: number;
+    comments_url: string;
+    commits_url: string;
+    created_at: string;
+    description: string;
+    files: GistsCreateResponseFiles;
+    forks: Array<GistsCreateResponseForksItem>;
+    forks_url: string;
+    git_pull_url: string;
+    git_push_url: string;
+    history: Array<GistsCreateResponseHistoryItem>;
+    html_url: string;
+    id: string;
+    node_id: string;
+    owner: GistsCreateResponseOwner;
+    public: boolean;
+    truncated: boolean;
+    updated_at: string;
+    url: string;
+    user: null;
+  };
+  type CodesOfConductListConductCodesResponseItem = {
+    key: string;
+    name: string;
+    url: string;
+  };
+  type CodesOfConductGetForRepoResponse = {
+    body: string;
+    key: string;
+    name: string;
+    url: string;
+  };
+  type CodesOfConductGetConductCodeResponse = {
+    body: string;
+    key: string;
+    name: string;
+    url: string;
+  };
+  type ChecksUpdateResponsePullRequestsItemHeadRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksUpdateResponsePullRequestsItemHead = {
+    ref: string;
+    repo: ChecksUpdateResponsePullRequestsItemHeadRepo;
+    sha: string;
+  };
+  type ChecksUpdateResponsePullRequestsItemBaseRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksUpdateResponsePullRequestsItemBase = {
+    ref: string;
+    repo: ChecksUpdateResponsePullRequestsItemBaseRepo;
+    sha: string;
+  };
+  type ChecksUpdateResponsePullRequestsItem = {
+    base: ChecksUpdateResponsePullRequestsItemBase;
+    head: ChecksUpdateResponsePullRequestsItemHead;
+    id: number;
+    number: number;
+    url: string;
+  };
+  type ChecksUpdateResponseOutput = {
+    annotations_count: number;
+    annotations_url: string;
+    summary: string;
+    text: string;
+    title: string;
+  };
+  type ChecksUpdateResponseCheckSuite = { id: number };
+  type ChecksUpdateResponseAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksUpdateResponseAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksUpdateResponseApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksUpdateResponseAppOwner;
+    permissions: ChecksUpdateResponseAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksUpdateResponse = {
+    app: ChecksUpdateResponseApp;
+    check_suite: ChecksUpdateResponseCheckSuite;
+    completed_at: string;
+    conclusion: string;
+    details_url: string;
+    external_id: string;
+    head_sha: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    output: ChecksUpdateResponseOutput;
+    pull_requests: Array<ChecksUpdateResponsePullRequestsItem>;
+    started_at: string;
+    status: string;
+    url: string;
+  };
+  type ChecksSetSuitesPreferencesResponseRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ChecksSetSuitesPreferencesResponseRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ChecksSetSuitesPreferencesResponseRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ChecksSetSuitesPreferencesResponseRepositoryOwner;
+    permissions: ChecksSetSuitesPreferencesResponseRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ChecksSetSuitesPreferencesResponsePreferencesAutoTriggerChecksItem = {
+    app_id: number;
+    setting: boolean;
+  };
+  type ChecksSetSuitesPreferencesResponsePreferences = {
+    auto_trigger_checks: Array<
+      ChecksSetSuitesPreferencesResponsePreferencesAutoTriggerChecksItem
+    >;
+  };
+  type ChecksSetSuitesPreferencesResponse = {
+    preferences: ChecksSetSuitesPreferencesResponsePreferences;
+    repository: ChecksSetSuitesPreferencesResponseRepository;
+  };
+  type ChecksListSuitesForRefResponseCheckSuitesItemRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ChecksListSuitesForRefResponseCheckSuitesItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ChecksListSuitesForRefResponseCheckSuitesItemRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ChecksListSuitesForRefResponseCheckSuitesItemRepositoryOwner;
+    permissions: ChecksListSuitesForRefResponseCheckSuitesItemRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ChecksListSuitesForRefResponseCheckSuitesItemAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksListSuitesForRefResponseCheckSuitesItemAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksListSuitesForRefResponseCheckSuitesItemApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksListSuitesForRefResponseCheckSuitesItemAppOwner;
+    permissions: ChecksListSuitesForRefResponseCheckSuitesItemAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksListSuitesForRefResponseCheckSuitesItem = {
+    after: string;
+    app: ChecksListSuitesForRefResponseCheckSuitesItemApp;
+    before: string;
+    conclusion: string;
+    head_branch: string;
+    head_sha: string;
+    id: number;
+    node_id: string;
+    pull_requests: Array<any>;
+    repository: ChecksListSuitesForRefResponseCheckSuitesItemRepository;
+    status: string;
+    url: string;
+  };
+  type ChecksListSuitesForRefResponse = {
+    check_suites: Array<ChecksListSuitesForRefResponseCheckSuitesItem>;
+    total_count: number;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemPullRequestsItemHeadRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemPullRequestsItemHead = {
+    ref: string;
+    repo: ChecksListForSuiteResponseCheckRunsItemPullRequestsItemHeadRepo;
+    sha: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemPullRequestsItemBaseRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemPullRequestsItemBase = {
+    ref: string;
+    repo: ChecksListForSuiteResponseCheckRunsItemPullRequestsItemBaseRepo;
+    sha: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemPullRequestsItem = {
+    base: ChecksListForSuiteResponseCheckRunsItemPullRequestsItemBase;
+    head: ChecksListForSuiteResponseCheckRunsItemPullRequestsItemHead;
+    id: number;
+    number: number;
+    url: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemOutput = {
+    annotations_count: number;
+    annotations_url: string;
+    summary: string;
+    text: string;
+    title: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemCheckSuite = { id: number };
+  type ChecksListForSuiteResponseCheckRunsItemAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItemApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksListForSuiteResponseCheckRunsItemAppOwner;
+    permissions: ChecksListForSuiteResponseCheckRunsItemAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksListForSuiteResponseCheckRunsItem = {
+    app: ChecksListForSuiteResponseCheckRunsItemApp;
+    check_suite: ChecksListForSuiteResponseCheckRunsItemCheckSuite;
+    completed_at: string;
+    conclusion: string;
+    details_url: string;
+    external_id: string;
+    head_sha: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    output: ChecksListForSuiteResponseCheckRunsItemOutput;
+    pull_requests: Array<
+      ChecksListForSuiteResponseCheckRunsItemPullRequestsItem
+    >;
+    started_at: string;
+    status: string;
+    url: string;
+  };
+  type ChecksListForSuiteResponse = {
+    check_runs: Array<ChecksListForSuiteResponseCheckRunsItem>;
+    total_count: number;
+  };
+  type ChecksListForRefResponseCheckRunsItemPullRequestsItemHeadRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemPullRequestsItemHead = {
+    ref: string;
+    repo: ChecksListForRefResponseCheckRunsItemPullRequestsItemHeadRepo;
+    sha: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemPullRequestsItemBaseRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemPullRequestsItemBase = {
+    ref: string;
+    repo: ChecksListForRefResponseCheckRunsItemPullRequestsItemBaseRepo;
+    sha: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemPullRequestsItem = {
+    base: ChecksListForRefResponseCheckRunsItemPullRequestsItemBase;
+    head: ChecksListForRefResponseCheckRunsItemPullRequestsItemHead;
+    id: number;
+    number: number;
+    url: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemOutput = {
+    annotations_count: number;
+    annotations_url: string;
+    summary: string;
+    text: string;
+    title: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemCheckSuite = { id: number };
+  type ChecksListForRefResponseCheckRunsItemAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksListForRefResponseCheckRunsItemApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksListForRefResponseCheckRunsItemAppOwner;
+    permissions: ChecksListForRefResponseCheckRunsItemAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksListForRefResponseCheckRunsItem = {
+    app: ChecksListForRefResponseCheckRunsItemApp;
+    check_suite: ChecksListForRefResponseCheckRunsItemCheckSuite;
+    completed_at: string;
+    conclusion: string;
+    details_url: string;
+    external_id: string;
+    head_sha: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    output: ChecksListForRefResponseCheckRunsItemOutput;
+    pull_requests: Array<ChecksListForRefResponseCheckRunsItemPullRequestsItem>;
+    started_at: string;
+    status: string;
+    url: string;
+  };
+  type ChecksListForRefResponse = {
+    check_runs: Array<ChecksListForRefResponseCheckRunsItem>;
+    total_count: number;
+  };
+  type ChecksListAnnotationsResponseItem = {
+    annotation_level: string;
+    end_column: number;
+    end_line: number;
+    message: string;
+    path: string;
+    raw_details: string;
+    start_column: number;
+    start_line: number;
+    title: string;
+  };
+  type ChecksGetSuiteResponseRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ChecksGetSuiteResponseRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ChecksGetSuiteResponseRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ChecksGetSuiteResponseRepositoryOwner;
+    permissions: ChecksGetSuiteResponseRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ChecksGetSuiteResponseAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksGetSuiteResponseAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksGetSuiteResponseApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksGetSuiteResponseAppOwner;
+    permissions: ChecksGetSuiteResponseAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksGetSuiteResponse = {
+    after: string;
+    app: ChecksGetSuiteResponseApp;
+    before: string;
+    conclusion: string;
+    head_branch: string;
+    head_sha: string;
+    id: number;
+    node_id: string;
+    pull_requests: Array<any>;
+    repository: ChecksGetSuiteResponseRepository;
+    status: string;
+    url: string;
+  };
+  type ChecksGetResponsePullRequestsItemHeadRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksGetResponsePullRequestsItemHead = {
+    ref: string;
+    repo: ChecksGetResponsePullRequestsItemHeadRepo;
+    sha: string;
+  };
+  type ChecksGetResponsePullRequestsItemBaseRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksGetResponsePullRequestsItemBase = {
+    ref: string;
+    repo: ChecksGetResponsePullRequestsItemBaseRepo;
+    sha: string;
+  };
+  type ChecksGetResponsePullRequestsItem = {
+    base: ChecksGetResponsePullRequestsItemBase;
+    head: ChecksGetResponsePullRequestsItemHead;
+    id: number;
+    number: number;
+    url: string;
+  };
+  type ChecksGetResponseOutput = {
+    annotations_count: number;
+    annotations_url: string;
+    summary: string;
+    text: string;
+    title: string;
+  };
+  type ChecksGetResponseCheckSuite = { id: number };
+  type ChecksGetResponseAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksGetResponseAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksGetResponseApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksGetResponseAppOwner;
+    permissions: ChecksGetResponseAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksGetResponse = {
+    app: ChecksGetResponseApp;
+    check_suite: ChecksGetResponseCheckSuite;
+    completed_at: string;
+    conclusion: string;
+    details_url: string;
+    external_id: string;
+    head_sha: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    output: ChecksGetResponseOutput;
+    pull_requests: Array<ChecksGetResponsePullRequestsItem>;
+    started_at: string;
+    status: string;
+    url: string;
+  };
+  type ChecksCreateSuiteResponseRepositoryPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ChecksCreateSuiteResponseRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ChecksCreateSuiteResponseRepository = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ChecksCreateSuiteResponseRepositoryOwner;
+    permissions: ChecksCreateSuiteResponseRepositoryPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ChecksCreateSuiteResponseAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksCreateSuiteResponseAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksCreateSuiteResponseApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksCreateSuiteResponseAppOwner;
+    permissions: ChecksCreateSuiteResponseAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksCreateSuiteResponse = {
+    after: string;
+    app: ChecksCreateSuiteResponseApp;
+    before: string;
+    conclusion: string;
+    head_branch: string;
+    head_sha: string;
+    id: number;
+    node_id: string;
+    pull_requests: Array<any>;
+    repository: ChecksCreateSuiteResponseRepository;
+    status: string;
+    url: string;
+  };
+  type ChecksCreateResponsePullRequestsItemHeadRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksCreateResponsePullRequestsItemHead = {
+    ref: string;
+    repo: ChecksCreateResponsePullRequestsItemHeadRepo;
+    sha: string;
+  };
+  type ChecksCreateResponsePullRequestsItemBaseRepo = {
+    id: number;
+    name: string;
+    url: string;
+  };
+  type ChecksCreateResponsePullRequestsItemBase = {
+    ref: string;
+    repo: ChecksCreateResponsePullRequestsItemBaseRepo;
+    sha: string;
+  };
+  type ChecksCreateResponsePullRequestsItem = {
+    base: ChecksCreateResponsePullRequestsItemBase;
+    head: ChecksCreateResponsePullRequestsItemHead;
+    id: number;
+    number: number;
+    url: string;
+  };
+  type ChecksCreateResponseOutput = {
+    summary: string;
+    text: string;
+    title: string;
+    annotations_count?: number;
+    annotations_url?: string;
+  };
+  type ChecksCreateResponseCheckSuite = { id: number };
+  type ChecksCreateResponseAppPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type ChecksCreateResponseAppOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type ChecksCreateResponseApp = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: ChecksCreateResponseAppOwner;
+    permissions: ChecksCreateResponseAppPermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type ChecksCreateResponse = {
+    app: ChecksCreateResponseApp;
+    check_suite: ChecksCreateResponseCheckSuite;
+    completed_at: null | string;
+    conclusion: null | string;
+    details_url: string;
+    external_id: string;
+    head_sha: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    output: ChecksCreateResponseOutput;
+    pull_requests: Array<ChecksCreateResponsePullRequestsItem>;
+    started_at: string;
+    status: string;
+    url: string;
+  };
+  type AppsResetTokenResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsResetTokenResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type AppsResetTokenResponse = {
+    app: AppsResetTokenResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+    user: AppsResetTokenResponseUser;
+  };
+  type AppsResetAuthorizationResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsResetAuthorizationResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type AppsResetAuthorizationResponse = {
+    app: AppsResetAuthorizationResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+    user: AppsResetAuthorizationResponseUser;
+  };
+  type AppsListReposResponseRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsListReposResponseRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: AppsListReposResponseRepositoriesItemOwner;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type AppsListReposResponse = {
+    repositories: Array<AppsListReposResponseRepositoriesItem>;
+    total_count: number;
+  };
+  type AppsListPlansStubbedResponseItem = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListPlansResponseItem = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponseItemPlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponseItemAccount = {
+    email: null;
+    id: number;
+    login: string;
+    organization_billing_email: string;
+    type: string;
+    url: string;
+  };
+  type AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponseItem = {
+    account: AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponseItemAccount;
+    billing_cycle: string;
+    free_trial_ends_on: string;
+    next_billing_date: string;
+    on_free_trial: boolean;
+    plan: AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponseItemPlan;
+    unit_count: null;
+    updated_at: string;
+  };
+  type AppsListMarketplacePurchasesForAuthenticatedUserResponseItemPlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListMarketplacePurchasesForAuthenticatedUserResponseItemAccount = {
+    email: null;
+    id: number;
+    login: string;
+    organization_billing_email: string;
+    type: string;
+    url: string;
+  };
+  type AppsListMarketplacePurchasesForAuthenticatedUserResponseItem = {
+    account: AppsListMarketplacePurchasesForAuthenticatedUserResponseItemAccount;
+    billing_cycle: string;
+    free_trial_ends_on: string;
+    next_billing_date: string;
+    on_free_trial: boolean;
+    plan: AppsListMarketplacePurchasesForAuthenticatedUserResponseItemPlan;
+    unit_count: null;
+    updated_at: string;
+  };
+  type AppsListInstallationsForAuthenticatedUserResponseInstallationsItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type AppsListInstallationsForAuthenticatedUserResponseInstallationsItemAccount = {
+    avatar_url: string;
+    description?: string;
+    events_url: string;
+    hooks_url?: string;
+    id: number;
+    issues_url?: string;
+    login: string;
+    members_url?: string;
+    node_id: string;
+    public_members_url?: string;
+    repos_url: string;
+    url: string;
+    followers_url?: string;
+    following_url?: string;
+    gists_url?: string;
+    gravatar_id?: string;
+    html_url?: string;
+    organizations_url?: string;
+    received_events_url?: string;
+    site_admin?: boolean;
+    starred_url?: string;
+    subscriptions_url?: string;
+    type?: string;
+  };
+  type AppsListInstallationsForAuthenticatedUserResponseInstallationsItem = {
+    access_tokens_url: string;
+    account: AppsListInstallationsForAuthenticatedUserResponseInstallationsItemAccount;
+    app_id: number;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsListInstallationsForAuthenticatedUserResponseInstallationsItemPermissions;
+    repositories_url: string;
+    single_file_name: string;
+    target_id: number;
+    target_type: string;
+  };
+  type AppsListInstallationsForAuthenticatedUserResponse = {
+    installations: Array<
+      AppsListInstallationsForAuthenticatedUserResponseInstallationsItem
+    >;
+    total_count: number;
+  };
+  type AppsListInstallationsResponseItemPermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type AppsListInstallationsResponseItemAccount = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type AppsListInstallationsResponseItem = {
+    access_tokens_url: string;
+    account: AppsListInstallationsResponseItemAccount;
+    app_id: number;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsListInstallationsResponseItemPermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: string;
+    target_id: number;
+    target_type: string;
+  };
+  type AppsListInstallationReposForAuthenticatedUserResponseRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type AppsListInstallationReposForAuthenticatedUserResponseRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsListInstallationReposForAuthenticatedUserResponseRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: AppsListInstallationReposForAuthenticatedUserResponseRepositoriesItemOwner;
+    permissions: AppsListInstallationReposForAuthenticatedUserResponseRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type AppsListInstallationReposForAuthenticatedUserResponse = {
+    repositories: Array<
+      AppsListInstallationReposForAuthenticatedUserResponseRepositoriesItem
+    >;
+    total_count: number;
+  };
+  type AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePurchasePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePurchase = {
+    billing_cycle: string;
+    free_trial_ends_on: string;
+    next_billing_date: string;
+    on_free_trial: boolean;
+    plan: AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePurchasePlan;
+    unit_count: null;
+    updated_at: string;
+  };
+  type AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePendingChangePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePendingChange = {
+    effective_date: string;
+    id: number;
+    plan: AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePendingChangePlan;
+    unit_count: null;
+  };
+  type AppsListAccountsUserOrOrgOnPlanStubbedResponseItem = {
+    email: null;
+    id: number;
+    login: string;
+    marketplace_pending_change: AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePendingChange;
+    marketplace_purchase: AppsListAccountsUserOrOrgOnPlanStubbedResponseItemMarketplacePurchase;
+    organization_billing_email: string;
+    type: string;
+    url: string;
+  };
+  type AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePurchasePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePurchase = {
+    billing_cycle: string;
+    free_trial_ends_on: string;
+    next_billing_date: string;
+    on_free_trial: boolean;
+    plan: AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePurchasePlan;
+    unit_count: null;
+    updated_at: string;
+  };
+  type AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePendingChangePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePendingChange = {
+    effective_date: string;
+    id: number;
+    plan: AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePendingChangePlan;
+    unit_count: null;
+  };
+  type AppsListAccountsUserOrOrgOnPlanResponseItem = {
+    email: null;
+    id: number;
+    login: string;
+    marketplace_pending_change: AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePendingChange;
+    marketplace_purchase: AppsListAccountsUserOrOrgOnPlanResponseItemMarketplacePurchase;
+    organization_billing_email: string;
+    type: string;
+    url: string;
+  };
+  type AppsGetUserInstallationResponsePermissions = {
+    checks: string;
+    contents: string;
+    metadata: string;
+  };
+  type AppsGetUserInstallationResponseAccount = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsGetUserInstallationResponse = {
+    access_tokens_url: string;
+    account: AppsGetUserInstallationResponseAccount;
+    app_id: number;
+    created_at: string;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsGetUserInstallationResponsePermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: null;
+    target_id: number;
+    target_type: string;
+    updated_at: string;
+  };
+  type AppsGetRepoInstallationResponsePermissions = {
+    checks: string;
+    contents: string;
+    metadata: string;
+  };
+  type AppsGetRepoInstallationResponseAccount = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsGetRepoInstallationResponse = {
+    access_tokens_url: string;
+    account: AppsGetRepoInstallationResponseAccount;
+    app_id: number;
+    created_at: string;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsGetRepoInstallationResponsePermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: null;
+    target_id: number;
+    target_type: string;
+    updated_at: string;
+  };
+  type AppsGetOrgInstallationResponsePermissions = {
+    checks: string;
+    contents: string;
+    metadata: string;
+  };
+  type AppsGetOrgInstallationResponseAccount = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsGetOrgInstallationResponse = {
+    access_tokens_url: string;
+    account: AppsGetOrgInstallationResponseAccount;
+    app_id: number;
+    created_at: string;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsGetOrgInstallationResponsePermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: null;
+    target_id: number;
+    target_type: string;
+    updated_at: string;
+  };
+  type AppsGetInstallationResponsePermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type AppsGetInstallationResponseAccount = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type AppsGetInstallationResponse = {
+    access_tokens_url: string;
+    account: AppsGetInstallationResponseAccount;
+    app_id: number;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsGetInstallationResponsePermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: string;
+    target_id: number;
+    target_type: string;
+  };
+  type AppsGetBySlugResponsePermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type AppsGetBySlugResponseOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type AppsGetBySlugResponse = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: AppsGetBySlugResponseOwner;
+    permissions: AppsGetBySlugResponsePermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type AppsGetAuthenticatedResponsePermissions = {
+    contents: string;
+    issues: string;
+    metadata: string;
+    single_file: string;
+  };
+  type AppsGetAuthenticatedResponseOwner = {
+    avatar_url: string;
+    description: string;
+    events_url: string;
+    hooks_url: string;
+    id: number;
+    issues_url: string;
+    login: string;
+    members_url: string;
+    node_id: string;
+    public_members_url: string;
+    repos_url: string;
+    url: string;
+  };
+  type AppsGetAuthenticatedResponse = {
+    created_at: string;
+    description: string;
+    events: Array<string>;
+    external_url: string;
+    html_url: string;
+    id: number;
+    installations_count: number;
+    name: string;
+    node_id: string;
+    owner: AppsGetAuthenticatedResponseOwner;
+    permissions: AppsGetAuthenticatedResponsePermissions;
+    slug: string;
+    updated_at: string;
+  };
+  type AppsFindUserInstallationResponsePermissions = {
+    checks: string;
+    contents: string;
+    metadata: string;
+  };
+  type AppsFindUserInstallationResponseAccount = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsFindUserInstallationResponse = {
+    access_tokens_url: string;
+    account: AppsFindUserInstallationResponseAccount;
+    app_id: number;
+    created_at: string;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsFindUserInstallationResponsePermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: null;
+    target_id: number;
+    target_type: string;
+    updated_at: string;
+  };
+  type AppsFindRepoInstallationResponsePermissions = {
+    checks: string;
+    contents: string;
+    metadata: string;
+  };
+  type AppsFindRepoInstallationResponseAccount = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsFindRepoInstallationResponse = {
+    access_tokens_url: string;
+    account: AppsFindRepoInstallationResponseAccount;
+    app_id: number;
+    created_at: string;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsFindRepoInstallationResponsePermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: null;
+    target_id: number;
+    target_type: string;
+    updated_at: string;
+  };
+  type AppsFindOrgInstallationResponsePermissions = {
+    checks: string;
+    contents: string;
+    metadata: string;
+  };
+  type AppsFindOrgInstallationResponseAccount = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsFindOrgInstallationResponse = {
+    access_tokens_url: string;
+    account: AppsFindOrgInstallationResponseAccount;
+    app_id: number;
+    created_at: string;
+    events: Array<string>;
+    html_url: string;
+    id: number;
+    permissions: AppsFindOrgInstallationResponsePermissions;
+    repositories_url: string;
+    repository_selection: string;
+    single_file_name: null;
+    target_id: number;
+    target_type: string;
+    updated_at: string;
+  };
+  type AppsCreateInstallationTokenResponseRepositoriesItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type AppsCreateInstallationTokenResponseRepositoriesItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsCreateInstallationTokenResponseRepositoriesItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: AppsCreateInstallationTokenResponseRepositoriesItemOwner;
+    permissions: AppsCreateInstallationTokenResponseRepositoriesItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type AppsCreateInstallationTokenResponsePermissions = {
+    contents: string;
+    issues: string;
+  };
+  type AppsCreateInstallationTokenResponse = {
+    expires_at: string;
+    permissions: AppsCreateInstallationTokenResponsePermissions;
+    repositories: Array<AppsCreateInstallationTokenResponseRepositoriesItem>;
+    token: string;
+  };
+  type AppsCreateFromManifestResponseOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsCreateFromManifestResponse = {
+    client_id: string;
+    client_secret: string;
+    created_at: string;
+    description: null;
+    external_url: string;
+    html_url: string;
+    id: number;
+    name: string;
+    node_id: string;
+    owner: AppsCreateFromManifestResponseOwner;
+    pem: string;
+    updated_at: string;
+    webhook_secret: string;
+  };
+  type AppsCreateContentAttachmentResponse = {
+    body: string;
+    id: number;
+    title: string;
+  };
+  type AppsCheckTokenResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsCheckTokenResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type AppsCheckTokenResponse = {
+    app: AppsCheckTokenResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+    user: AppsCheckTokenResponseUser;
+  };
+  type AppsCheckAuthorizationResponseUser = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type AppsCheckAuthorizationResponseApp = {
+    client_id: string;
+    name: string;
+    url: string;
+  };
+  type AppsCheckAuthorizationResponse = {
+    app: AppsCheckAuthorizationResponseApp;
+    created_at: string;
+    fingerprint: string;
+    hashed_token: string;
+    id: number;
+    note: string;
+    note_url: string;
+    scopes: Array<string>;
+    token: string;
+    token_last_eight: string;
+    updated_at: string;
+    url: string;
+    user: AppsCheckAuthorizationResponseUser;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePurchasePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePurchase = {
+    billing_cycle: string;
+    free_trial_ends_on: string;
+    next_billing_date: string;
+    on_free_trial: boolean;
+    plan: AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePurchasePlan;
+    unit_count: null;
+    updated_at: string;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePendingChangePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePendingChange = {
+    effective_date: string;
+    id: number;
+    plan: AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePendingChangePlan;
+    unit_count: null;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyStubbedResponse = {
+    email: null;
+    id: number;
+    login: string;
+    marketplace_pending_change: AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePendingChange;
+    marketplace_purchase: AppsCheckAccountIsAssociatedWithAnyStubbedResponseMarketplacePurchase;
+    organization_billing_email: string;
+    type: string;
+    url: string;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePurchasePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePurchase = {
+    billing_cycle: string;
+    free_trial_ends_on: string;
+    next_billing_date: string;
+    on_free_trial: boolean;
+    plan: AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePurchasePlan;
+    unit_count: null;
+    updated_at: string;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePendingChangePlan = {
+    accounts_url: string;
+    bullets: Array<string>;
+    description: string;
+    has_free_trial: boolean;
+    id: number;
+    monthly_price_in_cents: number;
+    name: string;
+    number: number;
+    price_model: string;
+    state: string;
+    unit_name: null;
+    url: string;
+    yearly_price_in_cents: number;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePendingChange = {
+    effective_date: string;
+    id: number;
+    plan: AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePendingChangePlan;
+    unit_count: null;
+  };
+  type AppsCheckAccountIsAssociatedWithAnyResponse = {
+    email: null;
+    id: number;
+    login: string;
+    marketplace_pending_change: AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePendingChange;
+    marketplace_purchase: AppsCheckAccountIsAssociatedWithAnyResponseMarketplacePurchase;
+    organization_billing_email: string;
+    type: string;
+    url: string;
+  };
+  type ActivitySetThreadSubscriptionResponse = {
+    created_at: string;
+    ignored: boolean;
+    reason: null;
+    subscribed: boolean;
+    thread_url: string;
+    url: string;
+  };
+  type ActivitySetRepoSubscriptionResponse = {
+    created_at: string;
+    ignored: boolean;
+    reason: null;
+    repository_url: string;
+    subscribed: boolean;
+    url: string;
+  };
+  type ActivityListWatchersForRepoResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListWatchedReposForAuthenticatedUserResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ActivityListWatchedReposForAuthenticatedUserResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListWatchedReposForAuthenticatedUserResponseItemLicense = {
+    key: string;
+    name: string;
+    node_id: string;
+    spdx_id: string;
+    url: string;
+  };
+  type ActivityListWatchedReposForAuthenticatedUserResponseItem = {
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    license: ActivityListWatchedReposForAuthenticatedUserResponseItemLicense;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ActivityListWatchedReposForAuthenticatedUserResponseItemOwner;
+    permissions: ActivityListWatchedReposForAuthenticatedUserResponseItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ActivityListStargazersForRepoResponseItem = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListReposWatchedByUserResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ActivityListReposWatchedByUserResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListReposWatchedByUserResponseItemLicense = {
+    key: string;
+    name: string;
+    node_id: string;
+    spdx_id: string;
+    url: string;
+  };
+  type ActivityListReposWatchedByUserResponseItem = {
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    license: ActivityListReposWatchedByUserResponseItemLicense;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ActivityListReposWatchedByUserResponseItemOwner;
+    permissions: ActivityListReposWatchedByUserResponseItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ActivityListReposStarredByUserResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ActivityListReposStarredByUserResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListReposStarredByUserResponseItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ActivityListReposStarredByUserResponseItemOwner;
+    permissions: ActivityListReposStarredByUserResponseItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ActivityListReposStarredByAuthenticatedUserResponseItemPermissions = {
+    admin: boolean;
+    pull: boolean;
+    push: boolean;
+  };
+  type ActivityListReposStarredByAuthenticatedUserResponseItemOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListReposStarredByAuthenticatedUserResponseItem = {
+    allow_merge_commit: boolean;
+    allow_rebase_merge: boolean;
+    allow_squash_merge: boolean;
+    archive_url: string;
+    archived: boolean;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    clone_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    created_at: string;
+    default_branch: string;
+    deployments_url: string;
+    description: string;
+    disabled: boolean;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_count: number;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    has_downloads: boolean;
+    has_issues: boolean;
+    has_pages: boolean;
+    has_projects: boolean;
+    has_wiki: boolean;
+    homepage: string;
+    hooks_url: string;
+    html_url: string;
+    id: number;
+    is_template: boolean;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    language: null;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    mirror_url: string;
+    name: string;
+    network_count: number;
+    node_id: string;
+    notifications_url: string;
+    open_issues_count: number;
+    owner: ActivityListReposStarredByAuthenticatedUserResponseItemOwner;
+    permissions: ActivityListReposStarredByAuthenticatedUserResponseItemPermissions;
+    private: boolean;
+    pulls_url: string;
+    pushed_at: string;
+    releases_url: string;
+    size: number;
+    ssh_url: string;
+    stargazers_count: number;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_count: number;
+    subscribers_url: string;
+    subscription_url: string;
+    svn_url: string;
+    tags_url: string;
+    teams_url: string;
+    template_repository: null;
+    topics: Array<string>;
+    trees_url: string;
+    updated_at: string;
+    url: string;
+    watchers_count: number;
+  };
+  type ActivityListNotificationsForRepoResponseItemSubject = {
+    latest_comment_url: string;
+    title: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListNotificationsForRepoResponseItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListNotificationsForRepoResponseItemRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ActivityListNotificationsForRepoResponseItemRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ActivityListNotificationsForRepoResponseItem = {
+    id: string;
+    last_read_at: string;
+    reason: string;
+    repository: ActivityListNotificationsForRepoResponseItemRepository;
+    subject: ActivityListNotificationsForRepoResponseItemSubject;
+    unread: boolean;
+    updated_at: string;
+    url: string;
+  };
+  type ActivityListNotificationsResponseItemSubject = {
+    latest_comment_url: string;
+    title: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListNotificationsResponseItemRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityListNotificationsResponseItemRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ActivityListNotificationsResponseItemRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ActivityListNotificationsResponseItem = {
+    id: string;
+    last_read_at: string;
+    reason: string;
+    repository: ActivityListNotificationsResponseItemRepository;
+    subject: ActivityListNotificationsResponseItemSubject;
+    unread: boolean;
+    updated_at: string;
+    url: string;
+  };
+  type ActivityListFeedsResponseLinksUser = { href: string; type: string };
+  type ActivityListFeedsResponseLinksTimeline = { href: string; type: string };
+  type ActivityListFeedsResponseLinksSecurityAdvisories = {
+    href: string;
+    type: string;
+  };
+  type ActivityListFeedsResponseLinksCurrentUserPublic = {
+    href: string;
+    type: string;
+  };
+  type ActivityListFeedsResponseLinksCurrentUserOrganizationsItem = {
+    href: string;
+    type: string;
+  };
+  type ActivityListFeedsResponseLinksCurrentUserOrganization = {
+    href: string;
+    type: string;
+  };
+  type ActivityListFeedsResponseLinksCurrentUserActor = {
+    href: string;
+    type: string;
+  };
+  type ActivityListFeedsResponseLinksCurrentUser = {
+    href: string;
+    type: string;
+  };
+  type ActivityListFeedsResponseLinks = {
+    current_user: ActivityListFeedsResponseLinksCurrentUser;
+    current_user_actor: ActivityListFeedsResponseLinksCurrentUserActor;
+    current_user_organization: ActivityListFeedsResponseLinksCurrentUserOrganization;
+    current_user_organizations: Array<
+      ActivityListFeedsResponseLinksCurrentUserOrganizationsItem
+    >;
+    current_user_public: ActivityListFeedsResponseLinksCurrentUserPublic;
+    security_advisories: ActivityListFeedsResponseLinksSecurityAdvisories;
+    timeline: ActivityListFeedsResponseLinksTimeline;
+    user: ActivityListFeedsResponseLinksUser;
+  };
+  type ActivityListFeedsResponse = {
+    _links: ActivityListFeedsResponseLinks;
+    current_user_actor_url: string;
+    current_user_organization_url: string;
+    current_user_organization_urls: Array<string>;
+    current_user_public_url: string;
+    current_user_url: string;
+    security_advisories_url: string;
+    timeline_url: string;
+    user_url: string;
+  };
+  type ActivityGetThreadSubscriptionResponse = {
+    created_at: string;
+    ignored: boolean;
+    reason: null;
+    subscribed: boolean;
+    thread_url: string;
+    url: string;
+  };
+  type ActivityGetThreadResponseSubject = {
+    latest_comment_url: string;
+    title: string;
+    type: string;
+    url: string;
+  };
+  type ActivityGetThreadResponseRepositoryOwner = {
+    avatar_url: string;
+    events_url: string;
+    followers_url: string;
+    following_url: string;
+    gists_url: string;
+    gravatar_id: string;
+    html_url: string;
+    id: number;
+    login: string;
+    node_id: string;
+    organizations_url: string;
+    received_events_url: string;
+    repos_url: string;
+    site_admin: boolean;
+    starred_url: string;
+    subscriptions_url: string;
+    type: string;
+    url: string;
+  };
+  type ActivityGetThreadResponseRepository = {
+    archive_url: string;
+    assignees_url: string;
+    blobs_url: string;
+    branches_url: string;
+    collaborators_url: string;
+    comments_url: string;
+    commits_url: string;
+    compare_url: string;
+    contents_url: string;
+    contributors_url: string;
+    deployments_url: string;
+    description: string;
+    downloads_url: string;
+    events_url: string;
+    fork: boolean;
+    forks_url: string;
+    full_name: string;
+    git_commits_url: string;
+    git_refs_url: string;
+    git_tags_url: string;
+    git_url: string;
+    html_url: string;
+    id: number;
+    issue_comment_url: string;
+    issue_events_url: string;
+    issues_url: string;
+    keys_url: string;
+    labels_url: string;
+    languages_url: string;
+    merges_url: string;
+    milestones_url: string;
+    name: string;
+    node_id: string;
+    notifications_url: string;
+    owner: ActivityGetThreadResponseRepositoryOwner;
+    private: boolean;
+    pulls_url: string;
+    releases_url: string;
+    ssh_url: string;
+    stargazers_url: string;
+    statuses_url: string;
+    subscribers_url: string;
+    subscription_url: string;
+    tags_url: string;
+    teams_url: string;
+    trees_url: string;
+    url: string;
+  };
+  type ActivityGetThreadResponse = {
+    id: string;
+    last_read_at: string;
+    reason: string;
+    repository: ActivityGetThreadResponseRepository;
+    subject: ActivityGetThreadResponseSubject;
+    unread: boolean;
+    updated_at: string;
+    url: string;
+  };
+  type ActivityGetRepoSubscriptionResponse = {
+    created_at: string;
+    ignored: boolean;
+    reason: null;
+    repository_url: string;
+    subscribed: boolean;
+    url: string;
+  };
+  type ActivityListNotificationsResponse = Array<
+    ActivityListNotificationsResponseItem
+  >;
+  type ActivityListNotificationsForRepoResponse = Array<
+    ActivityListNotificationsForRepoResponseItem
+  >;
+  type ActivityListReposStarredByAuthenticatedUserResponse = Array<
+    ActivityListReposStarredByAuthenticatedUserResponseItem
+  >;
+  type ActivityListReposStarredByUserResponse = Array<
+    ActivityListReposStarredByUserResponseItem
+  >;
+  type ActivityListReposWatchedByUserResponse = Array<
+    ActivityListReposWatchedByUserResponseItem
+  >;
+  type ActivityListStargazersForRepoResponse = Array<
+    ActivityListStargazersForRepoResponseItem
+  >;
+  type ActivityListWatchedReposForAuthenticatedUserResponse = Array<
+    ActivityListWatchedReposForAuthenticatedUserResponseItem
+  >;
+  type ActivityListWatchersForRepoResponse = Array<
+    ActivityListWatchersForRepoResponseItem
+  >;
+  type AppsListAccountsUserOrOrgOnPlanResponse = Array<
+    AppsListAccountsUserOrOrgOnPlanResponseItem
+  >;
+  type AppsListAccountsUserOrOrgOnPlanStubbedResponse = Array<
+    AppsListAccountsUserOrOrgOnPlanStubbedResponseItem
+  >;
+  type AppsListInstallationsResponse = Array<AppsListInstallationsResponseItem>;
+  type AppsListMarketplacePurchasesForAuthenticatedUserResponse = Array<
+    AppsListMarketplacePurchasesForAuthenticatedUserResponseItem
+  >;
+  type AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponse = Array<
+    AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponseItem
+  >;
+  type AppsListPlansResponse = Array<AppsListPlansResponseItem>;
+  type AppsListPlansStubbedResponse = Array<AppsListPlansStubbedResponseItem>;
+  type ChecksListAnnotationsResponse = Array<ChecksListAnnotationsResponseItem>;
+  type CodesOfConductListConductCodesResponse = Array<
+    CodesOfConductListConductCodesResponseItem
+  >;
+  type GistsListResponse = Array<GistsListResponseItem>;
+  type GistsListCommentsResponse = Array<GistsListCommentsResponseItem>;
+  type GistsListCommitsResponse = Array<GistsListCommitsResponseItem>;
+  type GistsListForksResponse = Array<GistsListForksResponseItem>;
+  type GistsListPublicResponse = Array<GistsListPublicResponseItem>;
+  type GistsListPublicForUserResponse = Array<
+    GistsListPublicForUserResponseItem
+  >;
+  type GistsListStarredResponse = Array<GistsListStarredResponseItem>;
+  type GitListMatchingRefsResponse = Array<GitListMatchingRefsResponseItem>;
+  type GitignoreListTemplatesResponse = Array<string>;
+  type IssuesAddLabelsResponse = Array<IssuesAddLabelsResponseItem>;
+  type IssuesListResponse = Array<IssuesListResponseItem>;
+  type IssuesListAssigneesResponse = Array<IssuesListAssigneesResponseItem>;
+  type IssuesListCommentsResponse = Array<IssuesListCommentsResponseItem>;
+  type IssuesListCommentsForRepoResponse = Array<
+    IssuesListCommentsForRepoResponseItem
+  >;
+  type IssuesListEventsResponse = Array<IssuesListEventsResponseItem>;
+  type IssuesListEventsForRepoResponse = Array<
+    IssuesListEventsForRepoResponseItem
+  >;
+  type IssuesListEventsForTimelineResponse = Array<
+    IssuesListEventsForTimelineResponseItem
+  >;
+  type IssuesListForAuthenticatedUserResponse = Array<
+    IssuesListForAuthenticatedUserResponseItem
+  >;
+  type IssuesListForOrgResponse = Array<IssuesListForOrgResponseItem>;
+  type IssuesListForRepoResponse = Array<IssuesListForRepoResponseItem>;
+  type IssuesListLabelsForMilestoneResponse = Array<
+    IssuesListLabelsForMilestoneResponseItem
+  >;
+  type IssuesListLabelsForRepoResponse = Array<
+    IssuesListLabelsForRepoResponseItem
+  >;
+  type IssuesListLabelsOnIssueResponse = Array<
+    IssuesListLabelsOnIssueResponseItem
+  >;
+  type IssuesListMilestonesForRepoResponse = Array<
+    IssuesListMilestonesForRepoResponseItem
+  >;
+  type IssuesRemoveLabelResponse = Array<IssuesRemoveLabelResponseItem>;
+  type IssuesReplaceLabelsResponse = Array<IssuesReplaceLabelsResponseItem>;
+  type LicensesListResponse = Array<LicensesListResponseItem>;
+  type LicensesListCommonlyUsedResponse = Array<
+    LicensesListCommonlyUsedResponseItem
+  >;
+  type MigrationsGetCommitAuthorsResponse = Array<
+    MigrationsGetCommitAuthorsResponseItem
+  >;
+  type MigrationsGetLargeFilesResponse = Array<
+    MigrationsGetLargeFilesResponseItem
+  >;
+  type MigrationsListForAuthenticatedUserResponse = Array<
+    MigrationsListForAuthenticatedUserResponseItem
+  >;
+  type MigrationsListForOrgResponse = Array<MigrationsListForOrgResponseItem>;
+  type OauthAuthorizationsListAuthorizationsResponse = Array<
+    OauthAuthorizationsListAuthorizationsResponseItem
+  >;
+  type OauthAuthorizationsListGrantsResponse = Array<
+    OauthAuthorizationsListGrantsResponseItem
+  >;
+  type OrgsListResponse = Array<OrgsListResponseItem>;
+  type OrgsListBlockedUsersResponse = Array<OrgsListBlockedUsersResponseItem>;
+  type OrgsListForAuthenticatedUserResponse = Array<
+    OrgsListForAuthenticatedUserResponseItem
+  >;
+  type OrgsListForUserResponse = Array<OrgsListForUserResponseItem>;
+  type OrgsListHooksResponse = Array<OrgsListHooksResponseItem>;
+  type OrgsListInvitationTeamsResponse = Array<
+    OrgsListInvitationTeamsResponseItem
+  >;
+  type OrgsListMembersResponse = Array<OrgsListMembersResponseItem>;
+  type OrgsListMembershipsResponse = Array<OrgsListMembershipsResponseItem>;
+  type OrgsListOutsideCollaboratorsResponse = Array<
+    OrgsListOutsideCollaboratorsResponseItem
+  >;
+  type OrgsListPendingInvitationsResponse = Array<
+    OrgsListPendingInvitationsResponseItem
+  >;
+  type OrgsListPublicMembersResponse = Array<OrgsListPublicMembersResponseItem>;
+  type ProjectsListCardsResponse = Array<ProjectsListCardsResponseItem>;
+  type ProjectsListCollaboratorsResponse = Array<
+    ProjectsListCollaboratorsResponseItem
+  >;
+  type ProjectsListColumnsResponse = Array<ProjectsListColumnsResponseItem>;
+  type ProjectsListForOrgResponse = Array<ProjectsListForOrgResponseItem>;
+  type ProjectsListForRepoResponse = Array<ProjectsListForRepoResponseItem>;
+  type ProjectsListForUserResponse = Array<ProjectsListForUserResponseItem>;
+  type PullsGetCommentsForReviewResponse = Array<
+    PullsGetCommentsForReviewResponseItem
+  >;
+  type PullsListResponse = Array<PullsListResponseItem>;
+  type PullsListCommentsResponse = Array<PullsListCommentsResponseItem>;
+  type PullsListCommentsForRepoResponse = Array<
+    PullsListCommentsForRepoResponseItem
+  >;
+  type PullsListCommitsResponse = Array<PullsListCommitsResponseItem>;
+  type PullsListFilesResponse = Array<PullsListFilesResponseItem>;
+  type PullsListReviewsResponse = Array<PullsListReviewsResponseItem>;
+  type ReactionsListForCommitCommentResponse = Array<
+    ReactionsListForCommitCommentResponseItem
+  >;
+  type ReactionsListForIssueResponse = Array<ReactionsListForIssueResponseItem>;
+  type ReactionsListForIssueCommentResponse = Array<
+    ReactionsListForIssueCommentResponseItem
+  >;
+  type ReactionsListForPullRequestReviewCommentResponse = Array<
+    ReactionsListForPullRequestReviewCommentResponseItem
+  >;
+  type ReactionsListForTeamDiscussionResponse = Array<
+    ReactionsListForTeamDiscussionResponseItem
+  >;
+  type ReactionsListForTeamDiscussionCommentResponse = Array<
+    ReactionsListForTeamDiscussionCommentResponseItem
+  >;
+  type ReposAddProtectedBranchAppRestrictionsResponse = Array<
+    ReposAddProtectedBranchAppRestrictionsResponseItem
+  >;
+  type ReposAddProtectedBranchRequiredStatusChecksContextsResponse = Array<
+    string
+  >;
+  type ReposAddProtectedBranchTeamRestrictionsResponse = Array<
+    ReposAddProtectedBranchTeamRestrictionsResponseItem
+  >;
+  type ReposAddProtectedBranchUserRestrictionsResponse = Array<
+    ReposAddProtectedBranchUserRestrictionsResponseItem
+  >;
+  type ReposGetAppsWithAccessToProtectedBranchResponse = Array<
+    ReposGetAppsWithAccessToProtectedBranchResponseItem
+  >;
+  type ReposGetCodeFrequencyStatsResponse = Array<Array<number>>;
+  type ReposGetCommitActivityStatsResponse = Array<
+    ReposGetCommitActivityStatsResponseItem
+  >;
+  type ReposGetContributorsStatsResponse = Array<
+    ReposGetContributorsStatsResponseItem
+  >;
+  type ReposGetPunchCardStatsResponse = Array<Array<number>>;
+  type ReposGetTeamsWithAccessToProtectedBranchResponse = Array<
+    ReposGetTeamsWithAccessToProtectedBranchResponseItem
+  >;
+  type ReposGetTopPathsResponse = Array<ReposGetTopPathsResponseItem>;
+  type ReposGetTopReferrersResponse = Array<ReposGetTopReferrersResponseItem>;
+  type ReposGetUsersWithAccessToProtectedBranchResponse = Array<
+    ReposGetUsersWithAccessToProtectedBranchResponseItem
+  >;
+  type ReposListAppsWithAccessToProtectedBranchResponse = Array<
+    ReposListAppsWithAccessToProtectedBranchResponseItem
+  >;
+  type ReposListAssetsForReleaseResponse = Array<
+    ReposListAssetsForReleaseResponseItem
+  >;
+  type ReposListBranchesResponse = Array<ReposListBranchesResponseItem>;
+  type ReposListBranchesForHeadCommitResponse = Array<
+    ReposListBranchesForHeadCommitResponseItem
+  >;
+  type ReposListCollaboratorsResponse = Array<
+    ReposListCollaboratorsResponseItem
+  >;
+  type ReposListCommentsForCommitResponse = Array<
+    ReposListCommentsForCommitResponseItem
+  >;
+  type ReposListCommitCommentsResponse = Array<
+    ReposListCommitCommentsResponseItem
+  >;
+  type ReposListCommitsResponse = Array<ReposListCommitsResponseItem>;
+  type ReposListContributorsResponse = Array<ReposListContributorsResponseItem>;
+  type ReposListDeployKeysResponse = Array<ReposListDeployKeysResponseItem>;
+  type ReposListDeploymentStatusesResponse = Array<
+    ReposListDeploymentStatusesResponseItem
+  >;
+  type ReposListDeploymentsResponse = Array<ReposListDeploymentsResponseItem>;
+  type ReposListDownloadsResponse = Array<ReposListDownloadsResponseItem>;
+  type ReposListForOrgResponse = Array<ReposListForOrgResponseItem>;
+  type ReposListForksResponse = Array<ReposListForksResponseItem>;
+  type ReposListHooksResponse = Array<ReposListHooksResponseItem>;
+  type ReposListInvitationsResponse = Array<ReposListInvitationsResponseItem>;
+  type ReposListInvitationsForAuthenticatedUserResponse = Array<
+    ReposListInvitationsForAuthenticatedUserResponseItem
+  >;
+  type ReposListPagesBuildsResponse = Array<ReposListPagesBuildsResponseItem>;
+  type ReposListProtectedBranchRequiredStatusChecksContextsResponse = Array<
+    string
+  >;
+  type ReposListProtectedBranchTeamRestrictionsResponse = Array<
+    ReposListProtectedBranchTeamRestrictionsResponseItem
+  >;
+  type ReposListProtectedBranchUserRestrictionsResponse = Array<
+    ReposListProtectedBranchUserRestrictionsResponseItem
+  >;
+  type ReposListPublicResponse = Array<ReposListPublicResponseItem>;
+  type ReposListPullRequestsAssociatedWithCommitResponse = Array<
+    ReposListPullRequestsAssociatedWithCommitResponseItem
+  >;
+  type ReposListReleasesResponse = Array<ReposListReleasesResponseItem>;
+  type ReposListStatusesForRefResponse = Array<
+    ReposListStatusesForRefResponseItem
+  >;
+  type ReposListTagsResponse = Array<ReposListTagsResponseItem>;
+  type ReposListTeamsResponse = Array<ReposListTeamsResponseItem>;
+  type ReposListTeamsWithAccessToProtectedBranchResponse = Array<
+    ReposListTeamsWithAccessToProtectedBranchResponseItem
+  >;
+  type ReposListUsersWithAccessToProtectedBranchResponse = Array<
+    ReposListUsersWithAccessToProtectedBranchResponseItem
+  >;
+  type ReposRemoveProtectedBranchAppRestrictionsResponse = Array<
+    ReposRemoveProtectedBranchAppRestrictionsResponseItem
+  >;
+  type ReposRemoveProtectedBranchRequiredStatusChecksContextsResponse = Array<
+    string
+  >;
+  type ReposRemoveProtectedBranchTeamRestrictionsResponse = Array<
+    ReposRemoveProtectedBranchTeamRestrictionsResponseItem
+  >;
+  type ReposRemoveProtectedBranchUserRestrictionsResponse = Array<
+    ReposRemoveProtectedBranchUserRestrictionsResponseItem
+  >;
+  type ReposReplaceProtectedBranchAppRestrictionsResponse = Array<
+    ReposReplaceProtectedBranchAppRestrictionsResponseItem
+  >;
+  type ReposReplaceProtectedBranchRequiredStatusChecksContextsResponse = Array<
+    string
+  >;
+  type ReposReplaceProtectedBranchTeamRestrictionsResponse = Array<
+    ReposReplaceProtectedBranchTeamRestrictionsResponseItem
+  >;
+  type ReposReplaceProtectedBranchUserRestrictionsResponse = Array<
+    ReposReplaceProtectedBranchUserRestrictionsResponseItem
+  >;
+  type TeamsListResponse = Array<TeamsListResponseItem>;
+  type TeamsListChildResponse = Array<TeamsListChildResponseItem>;
+  type TeamsListDiscussionCommentsResponse = Array<
+    TeamsListDiscussionCommentsResponseItem
+  >;
+  type TeamsListDiscussionsResponse = Array<TeamsListDiscussionsResponseItem>;
+  type TeamsListForAuthenticatedUserResponse = Array<
+    TeamsListForAuthenticatedUserResponseItem
+  >;
+  type TeamsListMembersResponse = Array<TeamsListMembersResponseItem>;
+  type TeamsListPendingInvitationsResponse = Array<
+    TeamsListPendingInvitationsResponseItem
+  >;
+  type TeamsListProjectsResponse = Array<TeamsListProjectsResponseItem>;
+  type TeamsListReposResponse = Array<TeamsListReposResponseItem>;
+  type UsersAddEmailsResponse = Array<UsersAddEmailsResponseItem>;
+  type UsersListResponse = Array<UsersListResponseItem>;
+  type UsersListBlockedResponse = Array<UsersListBlockedResponseItem>;
+  type UsersListEmailsResponse = Array<UsersListEmailsResponseItem>;
+  type UsersListFollowersForAuthenticatedUserResponse = Array<
+    UsersListFollowersForAuthenticatedUserResponseItem
+  >;
+  type UsersListFollowersForUserResponse = Array<
+    UsersListFollowersForUserResponseItem
+  >;
+  type UsersListFollowingForAuthenticatedUserResponse = Array<
+    UsersListFollowingForAuthenticatedUserResponseItem
+  >;
+  type UsersListFollowingForUserResponse = Array<
+    UsersListFollowingForUserResponseItem
+  >;
+  type UsersListGpgKeysResponse = Array<UsersListGpgKeysResponseItem>;
+  type UsersListGpgKeysForUserResponse = Array<
+    UsersListGpgKeysForUserResponseItem
+  >;
+  type UsersListPublicEmailsResponse = Array<UsersListPublicEmailsResponseItem>;
+  type UsersListPublicKeysResponse = Array<UsersListPublicKeysResponseItem>;
+  type UsersListPublicKeysForUserResponse = Array<
+    UsersListPublicKeysForUserResponseItem
+  >;
+  type UsersTogglePrimaryEmailVisibilityResponse = Array<
+    UsersTogglePrimaryEmailVisibilityResponseItem
+  >;
+
+  // param types
+  export type ActivityCheckStarringRepoParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ActivityDeleteRepoSubscriptionParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ActivityDeleteThreadSubscriptionParams = {
+    thread_id: number;
+  };
+  export type ActivityGetRepoSubscriptionParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ActivityGetThreadParams = {
+    thread_id: number;
+  };
+  export type ActivityGetThreadSubscriptionParams = {
+    thread_id: number;
+  };
+  export type ActivityListEventsForOrgParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type ActivityListEventsForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type ActivityListNotificationsParams = {
+    /**
+     * If `true`, show notifications marked as read.
+     */
+    all?: boolean;
+    /**
+     * Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    before?: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * If `true`, only shows notifications in which the user is directly participating or mentioned.
+     */
+    participating?: boolean;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+  };
+  export type ActivityListNotificationsForRepoParams = {
+    /**
+     * If `true`, show notifications marked as read.
+     */
+    all?: boolean;
+    /**
+     * Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    before?: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * If `true`, only shows notifications in which the user is directly participating or mentioned.
+     */
+    participating?: boolean;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+  };
+  export type ActivityListPublicEventsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type ActivityListPublicEventsForOrgParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type ActivityListPublicEventsForRepoNetworkParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ActivityListPublicEventsForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type ActivityListReceivedEventsForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type ActivityListReceivedPublicEventsForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type ActivityListRepoEventsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ActivityListReposStarredByAuthenticatedUserParams = {
+    /**
+     * One of `asc` (ascending) or `desc` (descending).
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * One of `created` (when the repository was starred) or `updated` (when it was last pushed to).
+     */
+    sort?: "created" | "updated";
+  };
+  export type ActivityListReposStarredByUserParams = {
+    /**
+     * One of `asc` (ascending) or `desc` (descending).
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * One of `created` (when the repository was starred) or `updated` (when it was last pushed to).
+     */
+    sort?: "created" | "updated";
+
+    username: string;
+  };
+  export type ActivityListReposWatchedByUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type ActivityListStargazersForRepoParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ActivityListWatchedReposForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type ActivityListWatchersForRepoParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ActivityMarkAsReadParams = {
+    /**
+     * Describes the last point that notifications were checked. Anything updated since this time will not be updated. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Default: The current timestamp.
+     */
+    last_read_at?: string;
+  };
+  export type ActivityMarkNotificationsAsReadForRepoParams = {
+    /**
+     * Describes the last point that notifications were checked. Anything updated since this time will not be updated. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Default: The current timestamp.
+     */
+    last_read_at?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ActivityMarkThreadAsReadParams = {
+    thread_id: number;
+  };
+  export type ActivitySetRepoSubscriptionParams = {
+    /**
+     * Determines if all notifications should be blocked from this repository.
+     */
+    ignored?: boolean;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * Determines if notifications should be received from this repository.
+     */
+    subscribed?: boolean;
+  };
+  export type ActivitySetThreadSubscriptionParams = {
+    /**
+     * Unsubscribes and subscribes you to a conversation. Set `ignored` to `true` to block all notifications from this thread.
+     */
+    ignored?: boolean;
+
+    thread_id: number;
+  };
+  export type ActivityStarRepoParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ActivityUnstarRepoParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type AppsAddRepoToInstallationParams = {
+    installation_id: number;
+
+    repository_id: number;
+  };
+  export type AppsCheckAccountIsAssociatedWithAnyParams = {
+    account_id: number;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsCheckAccountIsAssociatedWithAnyStubbedParams = {
+    account_id: number;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsCheckAuthorizationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type AppsCheckTokenParams = {
+    /**
+     * The OAuth access token used to authenticate to the GitHub API.
+     */
+    access_token?: string;
+
+    client_id: string;
+  };
+  export type AppsCreateContentAttachmentParams = {
+    /**
+     * The body text of the content attachment displayed in the body or comment of an issue or pull request. This parameter supports markdown.
+     */
+    body: string;
+
+    content_reference_id: number;
+    /**
+     * The title of the content attachment displayed in the body or comment of an issue or pull request.
+     */
+    title: string;
+  };
+  export type AppsCreateFromManifestParams = {
+    code: string;
+  };
+  export type AppsCreateInstallationTokenParams = {
+    installation_id: number;
+    /**
+     * The permissions granted to the access token. The permissions object includes the permission names and their access type. For a complete list of permissions and allowable values, see "[GitHub App permissions](https://developer.github.com/apps/building-github-apps/creating-github-apps-using-url-parameters/#github-app-permissions)."
+     */
+    permissions?: AppsCreateInstallationTokenParamsPermissions;
+    /**
+     * The `id`s of the repositories that the installation token can access. Providing repository `id`s restricts the access of an installation token to specific repositories. You can use the "[List repositories](https://developer.github.com/v3/apps/installations/#list-repositories)" endpoint to get the `id` of all repositories that an installation can access. For example, you can select specific repositories when creating an installation token to restrict the number of repositories that can be cloned using the token.
+     */
+    repository_ids?: number[];
+  };
+  export type AppsDeleteAuthorizationParams = {
+    /**
+     * The OAuth access token used to authenticate to the GitHub API.
+     */
+    access_token?: string;
+
+    client_id: string;
+  };
+  export type AppsDeleteInstallationParams = {
+    installation_id: number;
+  };
+  export type AppsDeleteTokenParams = {
+    /**
+     * The OAuth access token used to authenticate to the GitHub API.
+     */
+    access_token?: string;
+
+    client_id: string;
+  };
+  export type AppsFindOrgInstallationParams = {
+    org: string;
+  };
+  export type AppsFindRepoInstallationParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type AppsFindUserInstallationParams = {
+    username: string;
+  };
+  export type AppsGetBySlugParams = {
+    app_slug: string;
+  };
+  export type AppsGetInstallationParams = {
+    installation_id: number;
+  };
+  export type AppsGetOrgInstallationParams = {
+    org: string;
+  };
+  export type AppsGetRepoInstallationParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type AppsGetUserInstallationParams = {
+    username: string;
+  };
+  export type AppsListAccountsUserOrOrgOnPlanParams = {
+    /**
+     * To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    plan_id: number;
+    /**
+     * Sorts the GitHub accounts by the date they were created or last updated. Can be one of `created` or `updated`.
+     */
+    sort?: "created" | "updated";
+  };
+  export type AppsListAccountsUserOrOrgOnPlanStubbedParams = {
+    /**
+     * To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    plan_id: number;
+    /**
+     * Sorts the GitHub accounts by the date they were created or last updated. Can be one of `created` or `updated`.
+     */
+    sort?: "created" | "updated";
+  };
+  export type AppsListInstallationReposForAuthenticatedUserParams = {
+    installation_id: number;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsListInstallationsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsListInstallationsForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsListMarketplacePurchasesForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsListMarketplacePurchasesForAuthenticatedUserStubbedParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsListPlansParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsListPlansStubbedParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsListReposParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type AppsRemoveRepoFromInstallationParams = {
+    installation_id: number;
+
+    repository_id: number;
+  };
+  export type AppsResetAuthorizationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type AppsResetTokenParams = {
+    /**
+     * The OAuth access token used to authenticate to the GitHub API.
+     */
+    access_token?: string;
+
+    client_id: string;
+  };
+  export type AppsRevokeAuthorizationForApplicationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type AppsRevokeGrantForApplicationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type ChecksCreateParams = {
+    /**
+     * Displays a button on GitHub that can be clicked to alert your app to do additional tasks. For example, a code linting app can display a button that automatically fixes detected errors. The button created in this object is displayed after the check run completes. When a user clicks the button, GitHub sends the [`check_run.requested_action` webhook](https://developer.github.com/v3/activity/events/types/#checkrunevent) to your app. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://developer.github.com/v3/checks/runs/#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions)." To learn more about check runs and requested actions, see "[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions)."
+     */
+    actions?: ChecksCreateParamsActions[];
+    /**
+     * The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    completed_at?: string;
+    /**
+     * **Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `timed_out`, or `action_required`. When the conclusion is `action_required`, additional details should be provided on the site specified by `details_url`.
+     * **Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`.
+     */
+    conclusion?:
+      | "success"
+      | "failure"
+      | "neutral"
+      | "cancelled"
+      | "timed_out"
+      | "action_required";
+    /**
+     * The URL of the integrator's site that has the full details of the check.
+     */
+    details_url?: string;
+    /**
+     * A reference for the run on the integrator's system.
+     */
+    external_id?: string;
+    /**
+     * The SHA of the commit.
+     */
+    head_sha: string;
+    /**
+     * The name of the check. For example, "code-coverage".
+     */
+    name: string;
+    /**
+     * Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://developer.github.com/v3/checks/runs/#output-object) description.
+     */
+    output?: ChecksCreateParamsOutput;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The time that the check run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    started_at?: string;
+    /**
+     * The current status. Can be one of `queued`, `in_progress`, or `completed`.
+     */
+    status?: "queued" | "in_progress" | "completed";
+  };
+  export type ChecksCreateSuiteParams = {
+    /**
+     * The sha of the head commit.
+     */
+    head_sha: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ChecksGetParams = {
+    check_run_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ChecksGetSuiteParams = {
+    check_suite_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ChecksListAnnotationsParams = {
+    check_run_id: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ChecksListForRefParams = {
+    /**
+     * Returns check runs with the specified `name`.
+     */
+    check_name?: string;
+    /**
+     * Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`.
+     */
+    filter?: "latest" | "all";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    ref: string;
+
+    repo: string;
+    /**
+     * Returns check runs with the specified `status`. Can be one of `queued`, `in_progress`, or `completed`.
+     */
+    status?: "queued" | "in_progress" | "completed";
+  };
+  export type ChecksListForSuiteParams = {
+    /**
+     * Returns check runs with the specified `name`.
+     */
+    check_name?: string;
+
+    check_suite_id: number;
+    /**
+     * Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`.
+     */
+    filter?: "latest" | "all";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * Returns check runs with the specified `status`. Can be one of `queued`, `in_progress`, or `completed`.
+     */
+    status?: "queued" | "in_progress" | "completed";
+  };
+  export type ChecksListSuitesForRefParams = {
+    /**
+     * Filters check suites by GitHub App `id`.
+     */
+    app_id?: number;
+    /**
+     * Filters checks suites by the name of the [check run](https://developer.github.com/v3/checks/runs/).
+     */
+    check_name?: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type ChecksRerequestSuiteParams = {
+    check_suite_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ChecksSetSuitesPreferencesParams = {
+    /**
+     * Enables or disables automatic creation of CheckSuite events upon pushes to the repository. Enabled by default. See the [`auto_trigger_checks` object](https://developer.github.com/v3/checks/suites/#auto_trigger_checks-object) description for details.
+     */
+    auto_trigger_checks?: ChecksSetSuitesPreferencesParamsAutoTriggerChecks[];
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ChecksUpdateParams = {
+    /**
+     * Possible further actions the integrator can perform, which a user may trigger. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://developer.github.com/v3/checks/runs/#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions)."
+     */
+    actions?: ChecksUpdateParamsActions[];
+
+    check_run_id: number;
+    /**
+     * The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    completed_at?: string;
+    /**
+     * **Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `timed_out`, or `action_required`.
+     * **Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`.
+     */
+    conclusion?:
+      | "success"
+      | "failure"
+      | "neutral"
+      | "cancelled"
+      | "timed_out"
+      | "action_required";
+    /**
+     * The URL of the integrator's site that has the full details of the check.
+     */
+    details_url?: string;
+    /**
+     * A reference for the run on the integrator's system.
+     */
+    external_id?: string;
+    /**
+     * The name of the check. For example, "code-coverage".
+     */
+    name?: string;
+    /**
+     * Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://developer.github.com/v3/checks/runs/#output-object-1) description.
+     */
+    output?: ChecksUpdateParamsOutput;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    started_at?: string;
+    /**
+     * The current status. Can be one of `queued`, `in_progress`, or `completed`.
+     */
+    status?: "queued" | "in_progress" | "completed";
+  };
+  export type CodesOfConductGetConductCodeParams = {
+    key: string;
+  };
+  export type CodesOfConductGetForRepoParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type GistsCheckIsStarredParams = {
+    gist_id: string;
+  };
+  export type GistsCreateParams = {
+    /**
+     * A descriptive name for this gist.
+     */
+    description?: string;
+    /**
+     * The filenames and content of each file in the gist. The keys in the `files` object represent the filename and have the type `string`.
+     */
+    files: GistsCreateParamsFiles;
+    /**
+     * When `true`, the gist will be public and available for anyone to see.
+     */
+    public?: boolean;
+  };
+  export type GistsCreateCommentParams = {
+    /**
+     * The comment text.
+     */
+    body: string;
+
+    gist_id: string;
+  };
+  export type GistsDeleteParams = {
+    gist_id: string;
+  };
+  export type GistsDeleteCommentParams = {
+    comment_id: number;
+
+    gist_id: string;
+  };
+  export type GistsForkParams = {
+    gist_id: string;
+  };
+  export type GistsGetParams = {
+    gist_id: string;
+  };
+  export type GistsGetCommentParams = {
+    comment_id: number;
+
+    gist_id: string;
+  };
+  export type GistsGetRevisionParams = {
+    gist_id: string;
+
+    sha: string;
+  };
+  export type GistsListParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+     */
+    since?: string;
+  };
+  export type GistsListCommentsParams = {
+    gist_id: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type GistsListCommitsParams = {
+    gist_id: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type GistsListForksParams = {
+    gist_id: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type GistsListPublicParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+     */
+    since?: string;
+  };
+  export type GistsListPublicForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+     */
+    since?: string;
+
+    username: string;
+  };
+  export type GistsListStarredParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+     */
+    since?: string;
+  };
+  export type GistsStarParams = {
+    gist_id: string;
+  };
+  export type GistsUnstarParams = {
+    gist_id: string;
+  };
+  export type GistsUpdateParams = {
+    /**
+     * A descriptive name for this gist.
+     */
+    description?: string;
+    /**
+     * The filenames and content that make up this gist.
+     */
+    files?: GistsUpdateParamsFiles;
+
+    gist_id: string;
+  };
+  export type GistsUpdateCommentParams = {
+    /**
+     * The comment text.
+     */
+    body: string;
+
+    comment_id: number;
+
+    gist_id: string;
+  };
+  export type GitCreateBlobParams = {
+    /**
+     * The new blob's content.
+     */
+    content: string;
+    /**
+     * The encoding used for `content`. Currently, `"utf-8"` and `"base64"` are supported.
+     */
+    encoding?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type GitCreateCommitParams = {
+    /**
+     * Information about the author of the commit. By default, the `author` will be the authenticated user and the current date. See the `author` and `committer` object below for details.
+     */
+    author?: GitCreateCommitParamsAuthor;
+    /**
+     * Information about the person who is making the commit. By default, `committer` will use the information set in `author`. See the `author` and `committer` object below for details.
+     */
+    committer?: GitCreateCommitParamsCommitter;
+    /**
+     * The commit message
+     */
+    message: string;
+
+    owner: string;
+    /**
+     * The SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided; for a merge commit, an array of more than one should be provided.
+     */
+    parents: string[];
+
+    repo: string;
+    /**
+     * The [PGP signature](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) of the commit. GitHub adds the signature to the `gpgsig` header of the created commit. For a commit signature to be verifiable by Git or GitHub, it must be an ASCII-armored detached PGP signature over the string commit as it would be written to the object database. To pass a `signature` parameter, you need to first manually create a valid PGP signature, which can be complicated. You may find it easier to [use the command line](https://git-scm.com/book/id/v2/Git-Tools-Signing-Your-Work) to create signed commits.
+     */
+    signature?: string;
+    /**
+     * The SHA of the tree object this commit points to
+     */
+    tree: string;
+  };
+  export type GitCreateRefParams = {
+    owner: string;
+    /**
+     * The name of the fully qualified reference (ie: `refs/heads/master`). If it doesn't start with 'refs' and have at least two slashes, it will be rejected.
+     */
+    ref: string;
+
+    repo: string;
+    /**
+     * The SHA1 value for this reference.
+     */
+    sha: string;
+  };
+  export type GitCreateTagParams = {
+    /**
+     * The tag message.
+     */
+    message: string;
+    /**
+     * The SHA of the git object this is tagging.
+     */
+    object: string;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The tag's name. This is typically a version (e.g., "v0.0.1").
+     */
+    tag: string;
+    /**
+     * An object with information about the individual creating the tag.
+     */
+    tagger?: GitCreateTagParamsTagger;
+    /**
+     * The type of the object we're tagging. Normally this is a `commit` but it can also be a `tree` or a `blob`.
+     */
+    type: "commit" | "tree" | "blob";
+  };
+  export type GitCreateTreeParams = {
+    /**
+     * The SHA1 of the tree you want to update with new data. If you don't set this, the commit will be created on top of everything; however, it will only contain your change, the rest of your files will show up as deleted.
+     */
+    base_tree?: string;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * Objects (of `path`, `mode`, `type`, and `sha`) specifying a tree structure.
+     */
+    tree: GitCreateTreeParamsTree[];
+  };
+  export type GitDeleteRefParams = {
+    owner: string;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type GitGetBlobParams = {
+    file_sha: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type GitGetCommitParams = {
+    commit_sha: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type GitGetRefParams = {
+    owner: string;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type GitGetTagParams = {
+    owner: string;
+
+    repo: string;
+
+    tag_sha: string;
+  };
+  export type GitGetTreeParams = {
+    owner: string;
+
+    recursive?: "1";
+
+    repo: string;
+
+    tree_sha: string;
+  };
+  export type GitListMatchingRefsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type GitListRefsParams = {
+    /**
+     * Filter by sub-namespace (reference prefix). Most commen examples would be `'heads/'` and `'tags/'` to retrieve branches or tags
+     */
+    namespace?: string;
+
+    owner: string;
+
+    page?: number;
+
+    per_page?: number;
+
+    repo: string;
+  };
+  export type GitUpdateRefParams = {
+    /**
+     * Indicates whether to force the update or to make sure the update is a fast-forward update. Leaving this out or setting it to `false` will make sure you're not overwriting work.
+     */
+    force?: boolean;
+
+    owner: string;
+
+    ref: string;
+
+    repo: string;
+    /**
+     * The SHA1 value to set this reference to
+     */
+    sha: string;
+  };
+  export type GitignoreGetTemplateParams = {
+    name: string;
+  };
+  export type InteractionsAddOrUpdateRestrictionsForOrgParams = {
+    /**
+     * Specifies the group of GitHub users who can comment, open issues, or create pull requests in public repositories for the given organization. Must be one of: `existing_users`, `contributors_only`, or `collaborators_only`.
+     */
+    limit: "existing_users" | "contributors_only" | "collaborators_only";
+
+    org: string;
+  };
+  export type InteractionsAddOrUpdateRestrictionsForRepoParams = {
+    /**
+     * Specifies the group of GitHub users who can comment, open issues, or create pull requests for the given repository. Must be one of: `existing_users`, `contributors_only`, or `collaborators_only`.
+     */
+    limit: "existing_users" | "contributors_only" | "collaborators_only";
+
+    owner: string;
+
+    repo: string;
+  };
+  export type InteractionsGetRestrictionsForOrgParams = {
+    org: string;
+  };
+  export type InteractionsGetRestrictionsForRepoParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type InteractionsRemoveRestrictionsForOrgParams = {
+    org: string;
+  };
+  export type InteractionsRemoveRestrictionsForRepoParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesAddAssigneesParamsDeprecatedNumber = {
+    /**
+     * Usernames of people to assign this issue to. _NOTE: Only users with push access can add assignees to an issue. Assignees are silently ignored otherwise._
+     */
+    assignees?: string[];
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesAddAssigneesParams = {
+    /**
+     * Usernames of people to assign this issue to. _NOTE: Only users with push access can add assignees to an issue. Assignees are silently ignored otherwise._
+     */
+    assignees?: string[];
+
+    issue_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesAddLabelsParamsDeprecatedNumber = {
+    /**
+     * The name of the label to add to the issue. Must contain at least one label. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.
+     */
+    labels: string[];
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesAddLabelsParams = {
+    issue_number: number;
+    /**
+     * The name of the label to add to the issue. Must contain at least one label. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.
+     */
+    labels: string[];
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesCheckAssigneeParams = {
+    assignee: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesCreateParamsDeprecatedAssignee = {
+    /**
+     * Login for the user that this issue should be assigned to. _NOTE: Only users with push access can set the assignee for new issues. The assignee is silently dropped otherwise. **This field is deprecated.**_
+     * @deprecated "assignee" parameter has been deprecated and will be removed in future
+     */
+    assignee?: string;
+    /**
+     * Logins for Users to assign to this issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._
+     */
+    assignees?: string[];
+    /**
+     * The contents of the issue.
+     */
+    body?: string;
+    /**
+     * Labels to associate with this issue. _NOTE: Only users with push access can set labels for new issues. Labels are silently dropped otherwise._
+     */
+    labels?: string[];
+    /**
+     * The `number` of the milestone to associate this issue with. _NOTE: Only users with push access can set the milestone for new issues. The milestone is silently dropped otherwise._
+     */
+    milestone?: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The title of the issue.
+     */
+    title: string;
+  };
+  export type IssuesCreateParams = {
+    /**
+     * Logins for Users to assign to this issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._
+     */
+    assignees?: string[];
+    /**
+     * The contents of the issue.
+     */
+    body?: string;
+    /**
+     * Labels to associate with this issue. _NOTE: Only users with push access can set labels for new issues. Labels are silently dropped otherwise._
+     */
+    labels?: string[];
+    /**
+     * The `number` of the milestone to associate this issue with. _NOTE: Only users with push access can set the milestone for new issues. The milestone is silently dropped otherwise._
+     */
+    milestone?: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The title of the issue.
+     */
+    title: string;
+  };
+  export type IssuesCreateCommentParamsDeprecatedNumber = {
+    /**
+     * The contents of the comment.
+     */
+    body: string;
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesCreateCommentParams = {
+    /**
+     * The contents of the comment.
+     */
+    body: string;
+
+    issue_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesCreateLabelParams = {
+    /**
+     * The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading `#`.
+     */
+    color: string;
+    /**
+     * A short description of the label.
+     */
+    description?: string;
+    /**
+     * The name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing `:strawberry:` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png ":strawberry:"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/).
+     */
+    name: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesCreateMilestoneParams = {
+    /**
+     * A description of the milestone.
+     */
+    description?: string;
+    /**
+     * The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    due_on?: string;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The state of the milestone. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the milestone.
+     */
+    title: string;
+  };
+  export type IssuesDeleteCommentParams = {
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesDeleteLabelParams = {
+    name: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesDeleteMilestoneParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "milestone_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesDeleteMilestoneParams = {
+    milestone_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesGetParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesGetParams = {
+    issue_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesGetCommentParams = {
+    comment_id: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesGetEventParams = {
+    event_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesGetLabelParams = {
+    name: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesGetMilestoneParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "milestone_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesGetMilestoneParams = {
+    milestone_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesListParams = {
+    /**
+     * The direction of the sort. Can be either `asc` or `desc`.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Indicates which sorts of issues to return. Can be one of:
+     * \* `assigned`: Issues assigned to you
+     * \* `created`: Issues created by you
+     * \* `mentioned`: Issues mentioning you
+     * \* `subscribed`: Issues you're subscribed to updates for
+     * \* `all`: All issues the authenticated user can see, regardless of participation or creation
+     */
+    filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all";
+    /**
+     * A list of comma separated label names. Example: `bug,ui,@high`
+     */
+    labels?: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+    /**
+     * What to sort results by. Can be either `created`, `updated`, `comments`.
+     */
+    sort?: "created" | "updated" | "comments";
+    /**
+     * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type IssuesListAssigneesParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListCommentsParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * Only comments updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+  };
+  export type IssuesListCommentsParams = {
+    issue_number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * Only comments updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+  };
+  export type IssuesListCommentsForRepoParams = {
+    /**
+     * Either `asc` or `desc`. Ignored without the `sort` parameter.
+     */
+    direction?: "asc" | "desc";
+
+    owner: string;
+
+    repo: string;
+    /**
+     * Only comments updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+    /**
+     * Either `created` or `updated`.
+     */
+    sort?: "created" | "updated";
+  };
+  export type IssuesListEventsParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListEventsParams = {
+    issue_number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListEventsForRepoParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListEventsForTimelineParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListEventsForTimelineParams = {
+    issue_number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListForAuthenticatedUserParams = {
+    /**
+     * The direction of the sort. Can be either `asc` or `desc`.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Indicates which sorts of issues to return. Can be one of:
+     * \* `assigned`: Issues assigned to you
+     * \* `created`: Issues created by you
+     * \* `mentioned`: Issues mentioning you
+     * \* `subscribed`: Issues you're subscribed to updates for
+     * \* `all`: All issues the authenticated user can see, regardless of participation or creation
+     */
+    filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all";
+    /**
+     * A list of comma separated label names. Example: `bug,ui,@high`
+     */
+    labels?: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+    /**
+     * What to sort results by. Can be either `created`, `updated`, `comments`.
+     */
+    sort?: "created" | "updated" | "comments";
+    /**
+     * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type IssuesListForOrgParams = {
+    /**
+     * The direction of the sort. Can be either `asc` or `desc`.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Indicates which sorts of issues to return. Can be one of:
+     * \* `assigned`: Issues assigned to you
+     * \* `created`: Issues created by you
+     * \* `mentioned`: Issues mentioning you
+     * \* `subscribed`: Issues you're subscribed to updates for
+     * \* `all`: All issues the authenticated user can see, regardless of participation or creation
+     */
+    filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all";
+    /**
+     * A list of comma separated label names. Example: `bug,ui,@high`
+     */
+    labels?: string;
+
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+    /**
+     * What to sort results by. Can be either `created`, `updated`, `comments`.
+     */
+    sort?: "created" | "updated" | "comments";
+    /**
+     * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type IssuesListForRepoParams = {
+    /**
+     * Can be the name of a user. Pass in `none` for issues with no assigned user, and `*` for issues assigned to any user.
+     */
+    assignee?: string;
+    /**
+     * The user that created the issue.
+     */
+    creator?: string;
+    /**
+     * The direction of the sort. Can be either `asc` or `desc`.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * A list of comma separated label names. Example: `bug,ui,@high`
+     */
+    labels?: string;
+    /**
+     * A user that's mentioned in the issue.
+     */
+    mentioned?: string;
+    /**
+     * If an `integer` is passed, it should refer to a milestone by its `number` field. If the string `*` is passed, issues with any milestone are accepted. If the string `none` is passed, issues without milestones are returned.
+     */
+    milestone?: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+    /**
+     * What to sort results by. Can be either `created`, `updated`, `comments`.
+     */
+    sort?: "created" | "updated" | "comments";
+    /**
+     * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type IssuesListLabelsForMilestoneParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "milestone_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListLabelsForMilestoneParams = {
+    milestone_number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListLabelsForRepoParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListLabelsOnIssueParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListLabelsOnIssueParams = {
+    issue_number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type IssuesListMilestonesForRepoParams = {
+    /**
+     * The direction of the sort. Either `asc` or `desc`.
+     */
+    direction?: "asc" | "desc";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * What to sort results by. Either `due_on` or `completeness`.
+     */
+    sort?: "due_on" | "completeness";
+    /**
+     * The state of the milestone. Either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type IssuesLockParamsDeprecatedNumber = {
+    /**
+     * The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons:
+     * \* `off-topic`
+     * \* `too heated`
+     * \* `resolved`
+     * \* `spam`
+     */
+    lock_reason?: "off-topic" | "too heated" | "resolved" | "spam";
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesLockParams = {
+    issue_number: number;
+    /**
+     * The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons:
+     * \* `off-topic`
+     * \* `too heated`
+     * \* `resolved`
+     * \* `spam`
+     */
+    lock_reason?: "off-topic" | "too heated" | "resolved" | "spam";
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesRemoveAssigneesParamsDeprecatedNumber = {
+    /**
+     * Usernames of assignees to remove from an issue. _NOTE: Only users with push access can remove assignees from an issue. Assignees are silently ignored otherwise._
+     */
+    assignees?: string[];
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesRemoveAssigneesParams = {
+    /**
+     * Usernames of assignees to remove from an issue. _NOTE: Only users with push access can remove assignees from an issue. Assignees are silently ignored otherwise._
+     */
+    assignees?: string[];
+
+    issue_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesRemoveLabelParamsDeprecatedNumber = {
+    name: string;
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesRemoveLabelParams = {
+    issue_number: number;
+
+    name: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesRemoveLabelsParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesRemoveLabelsParams = {
+    issue_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesReplaceLabelsParamsDeprecatedNumber = {
+    /**
+     * The names of the labels to add to the issue. You can pass an empty array to remove all labels. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.
+     */
+    labels?: string[];
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesReplaceLabelsParams = {
+    issue_number: number;
+    /**
+     * The names of the labels to add to the issue. You can pass an empty array to remove all labels. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.
+     */
+    labels?: string[];
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesUnlockParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesUnlockParams = {
+    issue_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesUpdateParamsDeprecatedNumber = {
+    /**
+     * Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (`[]`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._
+     */
+    assignees?: string[];
+    /**
+     * The contents of the issue.
+     */
+    body?: string;
+    /**
+     * Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (`[]`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._
+     */
+    labels?: string[];
+    /**
+     * The `number` of the milestone to associate this issue with or `null` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._
+     */
+    milestone?: number | null;
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * State of the issue. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the issue.
+     */
+    title?: string;
+  };
+  export type IssuesUpdateParamsDeprecatedAssignee = {
+    /**
+     * Login for the user that this issue should be assigned to. **This field is deprecated.**
+     * @deprecated "assignee" parameter has been deprecated and will be removed in future
+     */
+    assignee?: string;
+    /**
+     * Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (`[]`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._
+     */
+    assignees?: string[];
+    /**
+     * The contents of the issue.
+     */
+    body?: string;
+
+    issue_number: number;
+    /**
+     * Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (`[]`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._
+     */
+    labels?: string[];
+    /**
+     * The `number` of the milestone to associate this issue with or `null` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._
+     */
+    milestone?: number | null;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * State of the issue. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the issue.
+     */
+    title?: string;
+  };
+  export type IssuesUpdateParams = {
+    /**
+     * Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (`[]`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._
+     */
+    assignees?: string[];
+    /**
+     * The contents of the issue.
+     */
+    body?: string;
+
+    issue_number: number;
+    /**
+     * Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (`[]`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._
+     */
+    labels?: string[];
+    /**
+     * The `number` of the milestone to associate this issue with or `null` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._
+     */
+    milestone?: number | null;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * State of the issue. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the issue.
+     */
+    title?: string;
+  };
+  export type IssuesUpdateCommentParams = {
+    /**
+     * The contents of the comment.
+     */
+    body: string;
+
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesUpdateLabelParams = {
+    /**
+     * The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading `#`.
+     */
+    color?: string;
+
+    current_name: string;
+    /**
+     * A short description of the label.
+     */
+    description?: string;
+    /**
+     * The new name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing `:strawberry:` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png ":strawberry:"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/).
+     */
+    name?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type IssuesUpdateMilestoneParamsDeprecatedNumber = {
+    /**
+     * A description of the milestone.
+     */
+    description?: string;
+    /**
+     * The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    due_on?: string;
+    /**
+     * @deprecated "number" parameter renamed to "milestone_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The state of the milestone. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the milestone.
+     */
+    title?: string;
+  };
+  export type IssuesUpdateMilestoneParams = {
+    /**
+     * A description of the milestone.
+     */
+    description?: string;
+    /**
+     * The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    due_on?: string;
+
+    milestone_number: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The state of the milestone. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the milestone.
+     */
+    title?: string;
+  };
+  export type LicensesGetParams = {
+    license: string;
+  };
+  export type LicensesGetForRepoParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type MarkdownRenderParams = {
+    /**
+     * The repository context to use when creating references in `gfm` mode. Omit this parameter when using `markdown` mode.
+     */
+    context?: string;
+    /**
+     * The rendering mode. Can be either:
+     * \* `markdown` to render a document in plain Markdown, just like README.md files are rendered.
+     * \* `gfm` to render a document in [GitHub Flavored Markdown](https://github.github.com/gfm/), which creates links for user mentions as well as references to SHA-1 hashes, issues, and pull requests.
+     */
+    mode?: "markdown" | "gfm";
+    /**
+     * The Markdown text to render in HTML. Markdown content must be 400 KB or less.
+     */
+    text: string;
+  };
+  export type MarkdownRenderRawParams = {
+    data: string;
+  };
+  export type MigrationsCancelImportParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type MigrationsDeleteArchiveForAuthenticatedUserParams = {
+    migration_id: number;
+  };
+  export type MigrationsDeleteArchiveForOrgParams = {
+    migration_id: number;
+
+    org: string;
+  };
+  export type MigrationsGetArchiveForAuthenticatedUserParams = {
+    migration_id: number;
+  };
+  export type MigrationsGetArchiveForOrgParams = {
+    migration_id: number;
+
+    org: string;
+  };
+  export type MigrationsGetCommitAuthorsParams = {
+    owner: string;
+
+    repo: string;
+    /**
+     * Only authors found after this id are returned. Provide the highest author ID you've seen so far. New authors may be added to the list at any point while the importer is performing the `raw` step.
+     */
+    since?: string;
+  };
+  export type MigrationsGetImportProgressParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type MigrationsGetLargeFilesParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type MigrationsGetStatusForAuthenticatedUserParams = {
+    migration_id: number;
+  };
+  export type MigrationsGetStatusForOrgParams = {
+    migration_id: number;
+
+    org: string;
+  };
+  export type MigrationsListForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type MigrationsListForOrgParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type MigrationsMapCommitAuthorParams = {
+    author_id: number;
+    /**
+     * The new Git author email.
+     */
+    email?: string;
+    /**
+     * The new Git author name.
+     */
+    name?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type MigrationsSetLfsPreferenceParams = {
+    owner: string;
+
+    repo: string;
+    /**
+     * Can be one of `opt_in` (large files will be stored using Git LFS) or `opt_out` (large files will be removed during the import).
+     */
+    use_lfs: "opt_in" | "opt_out";
+  };
+  export type MigrationsStartForAuthenticatedUserParams = {
+    /**
+     * Does not include attachments uploaded to GitHub.com in the migration data when set to `true`. Excluding attachments will reduce the migration archive file size.
+     */
+    exclude_attachments?: boolean;
+    /**
+     * Locks the `repositories` to prevent changes during the migration when set to `true`.
+     */
+    lock_repositories?: boolean;
+    /**
+     * An array of repositories to include in the migration.
+     */
+    repositories: string[];
+  };
+  export type MigrationsStartForOrgParams = {
+    /**
+     * Indicates whether attachments should be excluded from the migration (to reduce migration archive file size).
+     */
+    exclude_attachments?: boolean;
+    /**
+     * Indicates whether repositories should be locked (to prevent manipulation) while migrating data.
+     */
+    lock_repositories?: boolean;
+
+    org: string;
+    /**
+     * A list of arrays indicating which repositories should be migrated.
+     */
+    repositories: string[];
+  };
+  export type MigrationsStartImportParams = {
+    owner: string;
+
+    repo: string;
+    /**
+     * For a tfvc import, the name of the project that is being imported.
+     */
+    tfvc_project?: string;
+    /**
+     * The originating VCS type. Can be one of `subversion`, `git`, `mercurial`, or `tfvc`. Please be aware that without this parameter, the import job will take additional time to detect the VCS type before beginning the import. This detection step will be reflected in the response.
+     */
+    vcs?: "subversion" | "git" | "mercurial" | "tfvc";
+    /**
+     * If authentication is required, the password to provide to `vcs_url`.
+     */
+    vcs_password?: string;
+    /**
+     * The URL of the originating repository.
+     */
+    vcs_url: string;
+    /**
+     * If authentication is required, the username to provide to `vcs_url`.
+     */
+    vcs_username?: string;
+  };
+  export type MigrationsUnlockRepoForAuthenticatedUserParams = {
+    migration_id: number;
+
+    repo_name: string;
+  };
+  export type MigrationsUnlockRepoForOrgParams = {
+    migration_id: number;
+
+    org: string;
+
+    repo_name: string;
+  };
+  export type MigrationsUpdateImportParams = {
+    owner: string;
+
+    repo: string;
+    /**
+     * The password to provide to the originating repository.
+     */
+    vcs_password?: string;
+    /**
+     * The username to provide to the originating repository.
+     */
+    vcs_username?: string;
+  };
+  export type OauthAuthorizationsCheckAuthorizationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type OauthAuthorizationsCreateAuthorizationParams = {
+    /**
+     * The 20 character OAuth app client key for which to create the token.
+     */
+    client_id?: string;
+    /**
+     * The 40 character OAuth app client secret for which to create the token.
+     */
+    client_secret?: string;
+    /**
+     * A unique string to distinguish an authorization from others created for the same client ID and user.
+     */
+    fingerprint?: string;
+    /**
+     * A note to remind you what the OAuth token is for. Tokens not associated with a specific OAuth application (i.e. personal access tokens) must have a unique note.
+     */
+    note: string;
+    /**
+     * A URL to remind you what app the OAuth token is for.
+     */
+    note_url?: string;
+    /**
+     * A list of scopes that this authorization is in.
+     */
+    scopes?: string[];
+  };
+  export type OauthAuthorizationsDeleteAuthorizationParams = {
+    authorization_id: number;
+  };
+  export type OauthAuthorizationsDeleteGrantParams = {
+    grant_id: number;
+  };
+  export type OauthAuthorizationsGetAuthorizationParams = {
+    authorization_id: number;
+  };
+  export type OauthAuthorizationsGetGrantParams = {
+    grant_id: number;
+  };
+  export type OauthAuthorizationsGetOrCreateAuthorizationForAppParams = {
+    client_id: string;
+    /**
+     * The 40 character OAuth app client secret associated with the client ID specified in the URL.
+     */
+    client_secret: string;
+    /**
+     * A unique string to distinguish an authorization from others created for the same client and user. If provided, this API is functionally equivalent to [Get-or-create an authorization for a specific app and fingerprint](https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint).
+     */
+    fingerprint?: string;
+    /**
+     * A note to remind you what the OAuth token is for.
+     */
+    note?: string;
+    /**
+     * A URL to remind you what app the OAuth token is for.
+     */
+    note_url?: string;
+    /**
+     * A list of scopes that this authorization is in.
+     */
+    scopes?: string[];
+  };
+  export type OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintParams = {
+    client_id: string;
+    /**
+     * The 40 character OAuth app client secret associated with the client ID specified in the URL.
+     */
+    client_secret: string;
+
+    fingerprint: string;
+    /**
+     * A note to remind you what the OAuth token is for.
+     */
+    note?: string;
+    /**
+     * A URL to remind you what app the OAuth token is for.
+     */
+    note_url?: string;
+    /**
+     * A list of scopes that this authorization is in.
+     */
+    scopes?: string[];
+  };
+  export type OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintParams = {
+    client_id: string;
+    /**
+     * The 40 character OAuth app client secret associated with the client ID specified in the URL.
+     */
+    client_secret: string;
+
+    fingerprint: string;
+    /**
+     * A note to remind you what the OAuth token is for.
+     */
+    note?: string;
+    /**
+     * A URL to remind you what app the OAuth token is for.
+     */
+    note_url?: string;
+    /**
+     * A list of scopes that this authorization is in.
+     */
+    scopes?: string[];
+  };
+  export type OauthAuthorizationsListAuthorizationsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OauthAuthorizationsListGrantsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OauthAuthorizationsResetAuthorizationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type OauthAuthorizationsRevokeAuthorizationForApplicationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type OauthAuthorizationsRevokeGrantForApplicationParams = {
+    access_token: string;
+
+    client_id: string;
+  };
+  export type OauthAuthorizationsUpdateAuthorizationParams = {
+    /**
+     * A list of scopes to add to this authorization.
+     */
+    add_scopes?: string[];
+
+    authorization_id: number;
+    /**
+     * A unique string to distinguish an authorization from others created for the same client ID and user.
+     */
+    fingerprint?: string;
+    /**
+     * A note to remind you what the OAuth token is for. Tokens not associated with a specific OAuth application (i.e. personal access tokens) must have a unique note.
+     */
+    note?: string;
+    /**
+     * A URL to remind you what app the OAuth token is for.
+     */
+    note_url?: string;
+    /**
+     * A list of scopes to remove from this authorization.
+     */
+    remove_scopes?: string[];
+    /**
+     * Replaces the authorization scopes with these.
+     */
+    scopes?: string[];
+  };
+  export type OrgsAddOrUpdateMembershipParams = {
+    org: string;
+    /**
+     * The role to give the user in the organization. Can be one of:
+     * \* `admin` - The user will become an owner of the organization.
+     * \* `member` - The user will become a non-owner member of the organization.
+     */
+    role?: "admin" | "member";
+
+    username: string;
+  };
+  export type OrgsBlockUserParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsCheckBlockedUserParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsCheckMembershipParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsCheckPublicMembershipParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsConcealMembershipParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsConvertMemberToOutsideCollaboratorParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsCreateHookParams = {
+    /**
+     * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+     */
+    active?: boolean;
+    /**
+     * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/orgs/hooks/#create-hook-config-params).
+     */
+    config: OrgsCreateHookParamsConfig;
+    /**
+     * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.
+     */
+    events?: string[];
+    /**
+     * Must be passed as "web".
+     */
+    name: string;
+
+    org: string;
+  };
+  export type OrgsCreateInvitationParams = {
+    /**
+     * **Required unless you provide `invitee_id`**. Email address of the person you are inviting, which can be an existing GitHub user.
+     */
+    email?: string;
+    /**
+     * **Required unless you provide `email`**. GitHub user ID for the person you are inviting.
+     */
+    invitee_id?: number;
+
+    org: string;
+    /**
+     * Specify role for new member. Can be one of:
+     * \* `admin` - Organization owners with full administrative rights to the organization and complete access to all repositories and teams.
+     * \* `direct_member` - Non-owner organization members with ability to see other members and join teams by invitation.
+     * \* `billing_manager` - Non-owner organization members with ability to manage the billing settings of your organization.
+     */
+    role?: "admin" | "direct_member" | "billing_manager";
+    /**
+     * Specify IDs for the teams you want to invite new members to.
+     */
+    team_ids?: number[];
+  };
+  export type OrgsDeleteHookParams = {
+    hook_id: number;
+
+    org: string;
+  };
+  export type OrgsGetParams = {
+    org: string;
+  };
+  export type OrgsGetHookParams = {
+    hook_id: number;
+
+    org: string;
+  };
+  export type OrgsGetMembershipParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsGetMembershipForAuthenticatedUserParams = {
+    org: string;
+  };
+  export type OrgsListParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The integer ID of the last Organization that you've seen.
+     */
+    since?: string;
+  };
+  export type OrgsListBlockedUsersParams = {
+    org: string;
+  };
+  export type OrgsListForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OrgsListForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type OrgsListHooksParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OrgsListInstallationsParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OrgsListInvitationTeamsParams = {
+    invitation_id: number;
+
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OrgsListMembersParams = {
+    /**
+     * Filter members returned in the list. Can be one of:
+     * \* `2fa_disabled` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners.
+     * \* `all` - All members the authenticated user can see.
+     */
+    filter?: "2fa_disabled" | "all";
+
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Filter members returned by their role. Can be one of:
+     * \* `all` - All members of the organization, regardless of role.
+     * \* `admin` - Organization owners.
+     * \* `member` - Non-owner organization members.
+     */
+    role?: "all" | "admin" | "member";
+  };
+  export type OrgsListMembershipsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Indicates the state of the memberships to return. Can be either `active` or `pending`. If not specified, the API returns both active and pending memberships.
+     */
+    state?: "active" | "pending";
+  };
+  export type OrgsListOutsideCollaboratorsParams = {
+    /**
+     * Filter the list of outside collaborators. Can be one of:
+     * \* `2fa_disabled`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled.
+     * \* `all`: All outside collaborators.
+     */
+    filter?: "2fa_disabled" | "all";
+
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OrgsListPendingInvitationsParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OrgsListPublicMembersParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type OrgsPingHookParams = {
+    hook_id: number;
+
+    org: string;
+  };
+  export type OrgsPublicizeMembershipParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsRemoveMemberParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsRemoveMembershipParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsRemoveOutsideCollaboratorParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsUnblockUserParams = {
+    org: string;
+
+    username: string;
+  };
+  export type OrgsUpdateParams = {
+    /**
+     * Billing email address. This address is not publicized.
+     */
+    billing_email?: string;
+    /**
+     * The company name.
+     */
+    company?: string;
+    /**
+     * Default permission level members have for organization repositories:
+     * \* `read` - can pull, but not push to or administer this repository.
+     * \* `write` - can pull and push, but not administer this repository.
+     * \* `admin` - can pull, push, and administer this repository.
+     * \* `none` - no permissions granted by default.
+     */
+    default_repository_permission?: "read" | "write" | "admin" | "none";
+    /**
+     * The description of the company.
+     */
+    description?: string;
+    /**
+     * The publicly visible email address.
+     */
+    email?: string;
+    /**
+     * Toggles whether organization projects are enabled for the organization.
+     */
+    has_organization_projects?: boolean;
+    /**
+     * Toggles whether repository projects are enabled for repositories that belong to the organization.
+     */
+    has_repository_projects?: boolean;
+    /**
+     * The location.
+     */
+    location?: string;
+    /**
+     * Specifies which types of repositories non-admin organization members can create. Can be one of:
+     * \* `all` - all organization members can create public and private repositories.
+     * \* `private` - members can create private repositories. This option is only available to repositories that are part of an organization on [GitHub Business Cloud](https://github.com/pricing/business-cloud).
+     * \* `none` - only admin members can create repositories.
+     * **Note:** Using this parameter will override values set in `members_can_create_repositories`. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details.
+     */
+    members_allowed_repository_creation_type?: "all" | "private" | "none";
+    /**
+     * Toggles the ability of non-admin organization members to create repositories. Can be one of:
+     * \* `true` - all organization members can create repositories.
+     * \* `false` - only admin members can create repositories.
+     * Default: `true`
+     * **Note:** Another parameter can override the this parameter. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details. **Note:** Another parameter can override the this parameter. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details.
+     */
+    members_can_create_repositories?: boolean;
+    /**
+     * The shorthand name of the company.
+     */
+    name?: string;
+
+    org: string;
+  };
+  export type OrgsUpdateHookParams = {
+    /**
+     * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+     */
+    active?: boolean;
+    /**
+     * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/orgs/hooks/#update-hook-config-params).
+     */
+    config?: OrgsUpdateHookParamsConfig;
+    /**
+     * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.
+     */
+    events?: string[];
+
+    hook_id: number;
+
+    org: string;
+  };
+  export type OrgsUpdateMembershipParams = {
+    org: string;
+    /**
+     * The state that the membership should be in. Only `"active"` will be accepted.
+     */
+    state: "active";
+  };
+  export type ProjectsAddCollaboratorParams = {
+    /**
+     * The permission to grant the collaborator. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)." Can be one of:
+     * \* `read` - can read, but not write to or administer this project.
+     * \* `write` - can read and write, but not administer this project.
+     * \* `admin` - can read, write and administer this project.
+     */
+    permission?: "read" | "write" | "admin";
+
+    project_id: number;
+
+    username: string;
+  };
+  export type ProjectsCreateCardParams = {
+    column_id: number;
+    /**
+     * The issue or pull request id you want to associate with this card. You can use the [List issues for a repository](https://developer.github.com/v3/issues/#list-issues-for-a-repository) and [List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests) endpoints to find this id.
+     * **Note:** Depending on whether you use the issue id or pull request id, you will need to specify `Issue` or `PullRequest` as the `content_type`.
+     */
+    content_id?: number;
+    /**
+     * **Required if you provide `content_id`**. The type of content you want to associate with this card. Use `Issue` when `content_id` is an issue id and use `PullRequest` when `content_id` is a pull request id.
+     */
+    content_type?: string;
+    /**
+     * The card's note content. Only valid for cards without another type of content, so you must omit when specifying `content_id` and `content_type`.
+     */
+    note?: string;
+  };
+  export type ProjectsCreateColumnParams = {
+    /**
+     * The name of the column.
+     */
+    name: string;
+
+    project_id: number;
+  };
+  export type ProjectsCreateForAuthenticatedUserParams = {
+    /**
+     * The description of the project.
+     */
+    body?: string;
+    /**
+     * The name of the project.
+     */
+    name: string;
+  };
+  export type ProjectsCreateForOrgParams = {
+    /**
+     * The description of the project.
+     */
+    body?: string;
+    /**
+     * The name of the project.
+     */
+    name: string;
+
+    org: string;
+  };
+  export type ProjectsCreateForRepoParams = {
+    /**
+     * The description of the project.
+     */
+    body?: string;
+    /**
+     * The name of the project.
+     */
+    name: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ProjectsDeleteParams = {
+    project_id: number;
+  };
+  export type ProjectsDeleteCardParams = {
+    card_id: number;
+  };
+  export type ProjectsDeleteColumnParams = {
+    column_id: number;
+  };
+  export type ProjectsGetParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    project_id: number;
+  };
+  export type ProjectsGetCardParams = {
+    card_id: number;
+  };
+  export type ProjectsGetColumnParams = {
+    column_id: number;
+  };
+  export type ProjectsListCardsParams = {
+    /**
+     * Filters the project cards that are returned by the card's state. Can be one of `all`,`archived`, or `not_archived`.
+     */
+    archived_state?: "all" | "archived" | "not_archived";
+
+    column_id: number;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type ProjectsListCollaboratorsParams = {
+    /**
+     * Filters the collaborators by their affiliation. Can be one of:
+     * \* `outside`: Outside collaborators of a project that are not a member of the project's organization.
+     * \* `direct`: Collaborators with permissions to a project, regardless of organization membership status.
+     * \* `all`: All collaborators the authenticated user can see.
+     */
+    affiliation?: "outside" | "direct" | "all";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    project_id: number;
+  };
+  export type ProjectsListColumnsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    project_id: number;
+  };
+  export type ProjectsListForOrgParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type ProjectsListForRepoParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type ProjectsListForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.
+     */
+    state?: "open" | "closed" | "all";
+
+    username: string;
+  };
+  export type ProjectsMoveCardParams = {
+    card_id: number;
+    /**
+     * The `id` value of a column in the same project.
+     */
+    column_id?: number;
+    /**
+     * Can be one of `top`, `bottom`, or `after:<card_id>`, where `<card_id>` is the `id` value of a card in the same column, or in the new column specified by `column_id`.
+     */
+    position: string;
+  };
+  export type ProjectsMoveColumnParams = {
+    column_id: number;
+    /**
+     * Can be one of `first`, `last`, or `after:<column_id>`, where `<column_id>` is the `id` value of a column in the same project.
+     */
+    position: string;
+  };
+  export type ProjectsRemoveCollaboratorParams = {
+    project_id: number;
+
+    username: string;
+  };
+  export type ProjectsReviewUserPermissionLevelParams = {
+    project_id: number;
+
+    username: string;
+  };
+  export type ProjectsUpdateParams = {
+    /**
+     * The description of the project.
+     */
+    body?: string;
+    /**
+     * The name of the project.
+     */
+    name?: string;
+    /**
+     * The permission level that determines whether all members of the project's organization can see and/or make changes to the project. Setting `organization_permission` is only available for organization projects. If an organization member belongs to a team with a higher level of access or is a collaborator with a higher level of access, their permission level is not lowered by `organization_permission`. For information on changing access for a team or collaborator, see [Add or update team project](https://developer.github.com/v3/teams/#add-or-update-team-project) or [Add user as a collaborator](https://developer.github.com/v3/projects/collaborators/#add-user-as-a-collaborator).
+     *
+     * **Note:** Updating a project's `organization_permission` requires `admin` access to the project.
+     *
+     * Can be one of:
+     * \* `read` - Organization members can read, but not write to or administer this project.
+     * \* `write` - Organization members can read and write, but not administer this project.
+     * \* `admin` - Organization members can read, write and administer this project.
+     * \* `none` - Organization members can only see this project if it is public.
+     */
+    organization_permission?: string;
+    /**
+     * Sets the visibility of a project board. Setting `private` is only available for organization and user projects. **Note:** Updating a project's visibility requires `admin` access to the project.
+     *
+     * Can be one of:
+     * \* `false` - Anyone can see the project.
+     * \* `true` - Only the user can view a project board created on a user account. Organization members with the appropriate `organization_permission` can see project boards in an organization account.
+     */
+    private?: boolean;
+
+    project_id: number;
+    /**
+     * State of the project. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+  };
+  export type ProjectsUpdateCardParams = {
+    /**
+     * Use `true` to archive a project card. Specify `false` if you need to restore a previously archived project card.
+     */
+    archived?: boolean;
+
+    card_id: number;
+    /**
+     * The card's note content. Only valid for cards without another type of content, so this cannot be specified if the card already has a `content_id` and `content_type`.
+     */
+    note?: string;
+  };
+  export type ProjectsUpdateColumnParams = {
+    column_id: number;
+    /**
+     * The new name of the column.
+     */
+    name: string;
+  };
+  export type PullsCheckIfMergedParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type PullsCheckIfMergedParams = {
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsCreateParams = {
+    /**
+     * The name of the branch you want the changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repository that requests a merge to a base of another repository.
+     */
+    base: string;
+    /**
+     * The contents of the pull request.
+     */
+    body?: string;
+    /**
+     * Indicates whether the pull request is a draft. See "[Draft Pull Requests](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests)" in the GitHub Help documentation to learn more.
+     */
+    draft?: boolean;
+    /**
+     * The name of the branch where your changes are implemented. For cross-repository pull requests in the same network, namespace `head` with a user like this: `username:branch`.
+     */
+    head: string;
+    /**
+     * Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request.
+     */
+    maintainer_can_modify?: boolean;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The title of the new pull request.
+     */
+    title: string;
+  };
+  export type PullsCreateCommentParamsDeprecatedNumber = {
+    /**
+     * The text of the review comment.
+     */
+    body: string;
+    /**
+     * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+     */
+    commit_id: string;
+    /**
+     * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+     */
+    line?: number;
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * The relative path to the file that necessitates a comment.
+     */
+    path: string;
+    /**
+     * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+     */
+    position?: number;
+
+    repo: string;
+    /**
+     * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+     */
+    side?: "LEFT" | "RIGHT";
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+     */
+    start_line?: number;
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+     */
+    start_side?: "LEFT" | "RIGHT" | "side";
+  };
+  export type PullsCreateCommentParamsDeprecatedInReplyTo = {
+    /**
+     * The text of the review comment.
+     */
+    body: string;
+    /**
+     * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+     */
+    commit_id: string;
+    /**
+     * The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.
+     * @deprecated "in_reply_to" parameter has been deprecated and will be removed in future
+     */
+    in_reply_to?: number;
+    /**
+     * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+     */
+    line?: number;
+
+    owner: string;
+    /**
+     * The relative path to the file that necessitates a comment.
+     */
+    path: string;
+    /**
+     * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+     */
+    position?: number;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+     */
+    side?: "LEFT" | "RIGHT";
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+     */
+    start_line?: number;
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+     */
+    start_side?: "LEFT" | "RIGHT" | "side";
+  };
+  export type PullsCreateCommentParams = {
+    /**
+     * The text of the review comment.
+     */
+    body: string;
+    /**
+     * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+     */
+    commit_id: string;
+    /**
+     * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+     */
+    line?: number;
+
+    owner: string;
+    /**
+     * The relative path to the file that necessitates a comment.
+     */
+    path: string;
+    /**
+     * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+     */
+    position?: number;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+     */
+    side?: "LEFT" | "RIGHT";
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+     */
+    start_line?: number;
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+     */
+    start_side?: "LEFT" | "RIGHT" | "side";
+  };
+  export type PullsCreateCommentReplyParamsDeprecatedNumber = {
+    /**
+     * The text of the review comment.
+     */
+    body: string;
+    /**
+     * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+     */
+    commit_id: string;
+    /**
+     * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+     */
+    line?: number;
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * The relative path to the file that necessitates a comment.
+     */
+    path: string;
+    /**
+     * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+     */
+    position?: number;
+
+    repo: string;
+    /**
+     * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+     */
+    side?: "LEFT" | "RIGHT";
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+     */
+    start_line?: number;
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+     */
+    start_side?: "LEFT" | "RIGHT" | "side";
+  };
+  export type PullsCreateCommentReplyParamsDeprecatedInReplyTo = {
+    /**
+     * The text of the review comment.
+     */
+    body: string;
+    /**
+     * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+     */
+    commit_id: string;
+    /**
+     * The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.
+     * @deprecated "in_reply_to" parameter has been deprecated and will be removed in future
+     */
+    in_reply_to?: number;
+    /**
+     * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+     */
+    line?: number;
+
+    owner: string;
+    /**
+     * The relative path to the file that necessitates a comment.
+     */
+    path: string;
+    /**
+     * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+     */
+    position?: number;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+     */
+    side?: "LEFT" | "RIGHT";
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+     */
+    start_line?: number;
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+     */
+    start_side?: "LEFT" | "RIGHT" | "side";
+  };
+  export type PullsCreateCommentReplyParams = {
+    /**
+     * The text of the review comment.
+     */
+    body: string;
+    /**
+     * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+     */
+    commit_id: string;
+    /**
+     * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+     */
+    line?: number;
+
+    owner: string;
+    /**
+     * The relative path to the file that necessitates a comment.
+     */
+    path: string;
+    /**
+     * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+     */
+    position?: number;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+     */
+    side?: "LEFT" | "RIGHT";
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+     */
+    start_line?: number;
+    /**
+     * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+     */
+    start_side?: "LEFT" | "RIGHT" | "side";
+  };
+  export type PullsCreateFromIssueParams = {
+    base: string;
+
+    draft?: boolean;
+
+    head: string;
+
+    issue: number;
+
+    maintainer_can_modify?: boolean;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type PullsCreateReviewParamsDeprecatedNumber = {
+    /**
+     * **Required** when using `REQUEST_CHANGES` or `COMMENT` for the `event` parameter. The body text of the pull request review.
+     */
+    body?: string;
+    /**
+     * Use the following table to specify the location, destination, and contents of the draft review comment.
+     */
+    comments?: PullsCreateReviewParamsComments[];
+    /**
+     * The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment outdated if a subsequent commit modifies the line you specify as the `position`. Defaults to the most recent commit in the pull request when you do not specify a value.
+     */
+    commit_id?: string;
+    /**
+     * The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. By leaving this blank, you set the review action state to `PENDING`, which means you will need to [submit the pull request review](https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review) when you are ready.
+     */
+    event?: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type PullsCreateReviewParams = {
+    /**
+     * **Required** when using `REQUEST_CHANGES` or `COMMENT` for the `event` parameter. The body text of the pull request review.
+     */
+    body?: string;
+    /**
+     * Use the following table to specify the location, destination, and contents of the draft review comment.
+     */
+    comments?: PullsCreateReviewParamsComments[];
+    /**
+     * The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment outdated if a subsequent commit modifies the line you specify as the `position`. Defaults to the most recent commit in the pull request when you do not specify a value.
+     */
+    commit_id?: string;
+    /**
+     * The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. By leaving this blank, you set the review action state to `PENDING`, which means you will need to [submit the pull request review](https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review) when you are ready.
+     */
+    event?: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsCreateReviewCommentReplyParams = {
+    /**
+     * The text of the review comment.
+     */
+    body: string;
+
+    comment_id: number;
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsCreateReviewRequestParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * An array of user `login`s that will be requested.
+     */
+    reviewers?: string[];
+    /**
+     * An array of team `slug`s that will be requested.
+     */
+    team_reviewers?: string[];
+  };
+  export type PullsCreateReviewRequestParams = {
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * An array of user `login`s that will be requested.
+     */
+    reviewers?: string[];
+    /**
+     * An array of team `slug`s that will be requested.
+     */
+    team_reviewers?: string[];
+  };
+  export type PullsDeleteCommentParams = {
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type PullsDeletePendingReviewParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsDeletePendingReviewParams = {
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsDeleteReviewRequestParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * An array of user `login`s that will be removed.
+     */
+    reviewers?: string[];
+    /**
+     * An array of team `slug`s that will be removed.
+     */
+    team_reviewers?: string[];
+  };
+  export type PullsDeleteReviewRequestParams = {
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * An array of user `login`s that will be removed.
+     */
+    reviewers?: string[];
+    /**
+     * An array of team `slug`s that will be removed.
+     */
+    team_reviewers?: string[];
+  };
+  export type PullsDismissReviewParamsDeprecatedNumber = {
+    /**
+     * The message for the pull request review dismissal
+     */
+    message: string;
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsDismissReviewParams = {
+    /**
+     * The message for the pull request review dismissal
+     */
+    message: string;
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsGetParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type PullsGetParams = {
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsGetCommentParams = {
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type PullsGetCommentsForReviewParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsGetCommentsForReviewParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    pull_number: number;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsGetReviewParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsGetReviewParams = {
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsListParams = {
+    /**
+     * Filter pulls by base branch name. Example: `gh-pages`.
+     */
+    base?: string;
+    /**
+     * The direction of the sort. Can be either `asc` or `desc`. Default: `desc` when sort is `created` or sort is not specified, otherwise `asc`.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Filter pulls by head user or head organization and branch name in the format of `user:ref-name` or `organization:ref-name`. For example: `github:new-script-format` or `octocat:test-branch`.
+     */
+    head?: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * What to sort results by. Can be either `created`, `updated`, `popularity` (comment count) or `long-running` (age, filtering by pulls updated in the last month).
+     */
+    sort?: "created" | "updated" | "popularity" | "long-running";
+    /**
+     * Either `open`, `closed`, or `all` to filter by state.
+     */
+    state?: "open" | "closed" | "all";
+  };
+  export type PullsListCommentsParamsDeprecatedNumber = {
+    /**
+     * Can be either `asc` or `desc`. Ignored without `sort` parameter.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only returns comments `updated` at or after this time.
+     */
+    since?: string;
+    /**
+     * Can be either `created` or `updated` comments.
+     */
+    sort?: "created" | "updated";
+  };
+  export type PullsListCommentsParams = {
+    /**
+     * Can be either `asc` or `desc`. Ignored without `sort` parameter.
+     */
+    direction?: "asc" | "desc";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only returns comments `updated` at or after this time.
+     */
+    since?: string;
+    /**
+     * Can be either `created` or `updated` comments.
+     */
+    sort?: "created" | "updated";
+  };
+  export type PullsListCommentsForRepoParams = {
+    /**
+     * Can be either `asc` or `desc`. Ignored without `sort` parameter.
+     */
+    direction?: "asc" | "desc";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only returns comments `updated` at or after this time.
+     */
+    since?: string;
+    /**
+     * Can be either `created` or `updated` comments.
+     */
+    sort?: "created" | "updated";
+  };
+  export type PullsListCommitsParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type PullsListCommitsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsListFilesParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type PullsListFilesParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsListReviewRequestsParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type PullsListReviewRequestsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsListReviewsParamsDeprecatedNumber = {
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type PullsListReviewsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsMergeParamsDeprecatedNumber = {
+    /**
+     * Extra detail to append to automatic commit message.
+     */
+    commit_message?: string;
+    /**
+     * Title for the automatic commit message.
+     */
+    commit_title?: string;
+    /**
+     * Merge method to use. Possible values are `merge`, `squash` or `rebase`. Default is `merge`.
+     */
+    merge_method?: "merge" | "squash" | "rebase";
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * SHA that pull request head must match to allow merge.
+     */
+    sha?: string;
+  };
+  export type PullsMergeParams = {
+    /**
+     * Extra detail to append to automatic commit message.
+     */
+    commit_message?: string;
+    /**
+     * Title for the automatic commit message.
+     */
+    commit_title?: string;
+    /**
+     * Merge method to use. Possible values are `merge`, `squash` or `rebase`. Default is `merge`.
+     */
+    merge_method?: "merge" | "squash" | "rebase";
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * SHA that pull request head must match to allow merge.
+     */
+    sha?: string;
+  };
+  export type PullsSubmitReviewParamsDeprecatedNumber = {
+    /**
+     * The body text of the pull request review
+     */
+    body?: string;
+    /**
+     * The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to `PENDING`, which means you will need to re-submit the pull request review using a review action.
+     */
+    event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsSubmitReviewParams = {
+    /**
+     * The body text of the pull request review
+     */
+    body?: string;
+    /**
+     * The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to `PENDING`, which means you will need to re-submit the pull request review using a review action.
+     */
+    event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsUpdateParamsDeprecatedNumber = {
+    /**
+     * The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository.
+     */
+    base?: string;
+    /**
+     * The contents of the pull request.
+     */
+    body?: string;
+    /**
+     * Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request.
+     */
+    maintainer_can_modify?: boolean;
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * State of this Pull Request. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the pull request.
+     */
+    title?: string;
+  };
+  export type PullsUpdateParams = {
+    /**
+     * The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository.
+     */
+    base?: string;
+    /**
+     * The contents of the pull request.
+     */
+    body?: string;
+    /**
+     * Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request.
+     */
+    maintainer_can_modify?: boolean;
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+    /**
+     * State of this Pull Request. Either `open` or `closed`.
+     */
+    state?: "open" | "closed";
+    /**
+     * The title of the pull request.
+     */
+    title?: string;
+  };
+  export type PullsUpdateBranchParams = {
+    /**
+     * The expected SHA of the pull request's HEAD ref. This is the most recent commit on the pull request's branch. If the expected SHA does not match the pull request's HEAD, you will receive a `422 Unprocessable Entity` status. You can use the "[List commits on a repository](https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository)" endpoint to find the most recent commit SHA. Default: SHA of the pull request's current HEAD ref.
+     */
+    expected_head_sha?: string;
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+  };
+  export type PullsUpdateCommentParams = {
+    /**
+     * The text of the reply to the review comment.
+     */
+    body: string;
+
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type PullsUpdateReviewParamsDeprecatedNumber = {
+    /**
+     * The body text of the pull request review.
+     */
+    body: string;
+    /**
+     * @deprecated "number" parameter renamed to "pull_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type PullsUpdateReviewParams = {
+    /**
+     * The body text of the pull request review.
+     */
+    body: string;
+
+    owner: string;
+
+    pull_number: number;
+
+    repo: string;
+
+    review_id: number;
+  };
+  export type ReactionsCreateForCommitCommentParams = {
+    comment_id: number;
+    /**
+     * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the commit comment.
+     */
+    content:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReactionsCreateForIssueParamsDeprecatedNumber = {
+    /**
+     * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the issue.
+     */
+    content:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReactionsCreateForIssueParams = {
+    /**
+     * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the issue.
+     */
+    content:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    issue_number: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReactionsCreateForIssueCommentParams = {
+    comment_id: number;
+    /**
+     * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the issue comment.
+     */
+    content:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReactionsCreateForPullRequestReviewCommentParams = {
+    comment_id: number;
+    /**
+     * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the pull request review comment.
+     */
+    content:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReactionsCreateForTeamDiscussionParams = {
+    /**
+     * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the team discussion.
+     */
+    content:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type ReactionsCreateForTeamDiscussionCommentParams = {
+    comment_number: number;
+    /**
+     * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the team discussion comment.
+     */
+    content:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type ReactionsDeleteParams = {
+    reaction_id: number;
+  };
+  export type ReactionsListForCommitCommentParams = {
+    comment_id: number;
+    /**
+     * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a commit comment.
+     */
+    content?:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReactionsListForIssueParamsDeprecatedNumber = {
+    /**
+     * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to an issue.
+     */
+    content?:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+    /**
+     * @deprecated "number" parameter renamed to "issue_number"
+     */
+    number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReactionsListForIssueParams = {
+    /**
+     * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to an issue.
+     */
+    content?:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    issue_number: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReactionsListForIssueCommentParams = {
+    comment_id: number;
+    /**
+     * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to an issue comment.
+     */
+    content?:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReactionsListForPullRequestReviewCommentParams = {
+    comment_id: number;
+    /**
+     * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a pull request review comment.
+     */
+    content?:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReactionsListForTeamDiscussionParams = {
+    /**
+     * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a team discussion.
+     */
+    content?:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    discussion_number: number;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type ReactionsListForTeamDiscussionCommentParams = {
+    comment_number: number;
+    /**
+     * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a team discussion comment.
+     */
+    content?:
+      | "+1"
+      | "-1"
+      | "laugh"
+      | "confused"
+      | "heart"
+      | "hooray"
+      | "rocket"
+      | "eyes";
+
+    discussion_number: number;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type ReposAcceptInvitationParams = {
+    invitation_id: number;
+  };
+  export type ReposAddCollaboratorParams = {
+    owner: string;
+    /**
+     * The permission to grant the collaborator. **Only valid on organization-owned repositories.** Can be one of:
+     * \* `pull` - can pull, but not push to or administer this repository.
+     * \* `push` - can pull and push, but not administer this repository.
+     * \* `admin` - can pull, push and administer this repository.
+     */
+    permission?: "pull" | "push" | "admin";
+
+    repo: string;
+
+    username: string;
+  };
+  export type ReposAddDeployKeyParams = {
+    /**
+     * The contents of the key.
+     */
+    key: string;
+
+    owner: string;
+    /**
+     * If `true`, the key will only be able to read repository contents. Otherwise, the key will be able to read and write.
+     *
+     * Deploy keys with write access can perform the same actions as an organization member with admin access, or a collaborator on a personal repository. For more information, see "[Repository permission levels for an organization](https://help.github.com/articles/repository-permission-levels-for-an-organization/)" and "[Permission levels for a user account repository](https://help.github.com/articles/permission-levels-for-a-user-account-repository/)."
+     */
+    read_only?: boolean;
+
+    repo: string;
+    /**
+     * A name for the key.
+     */
+    title?: string;
+  };
+  export type ReposAddProtectedBranchAdminEnforcementParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposAddProtectedBranchAppRestrictionsParams = {
+    apps: string[];
+
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposAddProtectedBranchRequiredSignaturesParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposAddProtectedBranchRequiredStatusChecksContextsParams = {
+    branch: string;
+
+    contexts: string[];
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposAddProtectedBranchTeamRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+
+    teams: string[];
+  };
+  export type ReposAddProtectedBranchUserRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+
+    users: string[];
+  };
+  export type ReposCheckCollaboratorParams = {
+    owner: string;
+
+    repo: string;
+
+    username: string;
+  };
+  export type ReposCheckVulnerabilityAlertsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposCompareCommitsParams = {
+    base: string;
+
+    head: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposCreateCommitCommentParamsDeprecatedSha = {
+    /**
+     * The contents of the comment.
+     */
+    body: string;
+
+    owner: string;
+    /**
+     * Relative path of the file to comment on.
+     */
+    path?: string;
+    /**
+     * Line index in the diff to comment on.
+     */
+    position?: number;
+
+    repo: string;
+    /**
+     * @deprecated "sha" parameter renamed to "commit_sha"
+     */
+    sha: string;
+  };
+  export type ReposCreateCommitCommentParamsDeprecatedLine = {
+    /**
+     * The contents of the comment.
+     */
+    body: string;
+
+    commit_sha: string;
+    /**
+     * **Deprecated**. Use **position** parameter instead. Line number in the file to comment on.
+     * @deprecated "line" parameter has been deprecated and will be removed in future
+     */
+    line?: number;
+
+    owner: string;
+    /**
+     * Relative path of the file to comment on.
+     */
+    path?: string;
+    /**
+     * Line index in the diff to comment on.
+     */
+    position?: number;
+
+    repo: string;
+  };
+  export type ReposCreateCommitCommentParams = {
+    /**
+     * The contents of the comment.
+     */
+    body: string;
+
+    commit_sha: string;
+
+    owner: string;
+    /**
+     * Relative path of the file to comment on.
+     */
+    path?: string;
+    /**
+     * Line index in the diff to comment on.
+     */
+    position?: number;
+
+    repo: string;
+  };
+  export type ReposCreateDeploymentParams = {
+    /**
+     * Attempts to automatically merge the default branch into the requested ref, if it's behind the default branch.
+     */
+    auto_merge?: boolean;
+    /**
+     * Short description of the deployment.
+     */
+    description?: string;
+    /**
+     * Name for the target deployment environment (e.g., `production`, `staging`, `qa`).
+     */
+    environment?: string;
+
+    owner: string;
+    /**
+     * JSON payload with extra information about the deployment.
+     */
+    payload?: string;
+    /**
+     * Specifies if the given environment is one that end-users directly interact with. Default: `true` when `environment` is `production` and `false` otherwise.
+     * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+     */
+    production_environment?: boolean;
+    /**
+     * The ref to deploy. This can be a branch, tag, or SHA.
+     */
+    ref: string;
+
+    repo: string;
+    /**
+     * The [status](https://developer.github.com/v3/repos/statuses/) contexts to verify against commit status checks. If you omit this parameter, GitHub verifies all unique contexts before creating a deployment. To bypass checking entirely, pass an empty array. Defaults to all unique contexts.
+     */
+    required_contexts?: string[];
+    /**
+     * Specifies a task to execute (e.g., `deploy` or `deploy:migrations`).
+     */
+    task?: string;
+    /**
+     * Specifies if the given environment is specific to the deployment and will no longer exist at some point in the future. Default: `false`
+     * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+     */
+    transient_environment?: boolean;
+  };
+  export type ReposCreateDeploymentStatusParams = {
+    /**
+     * Adds a new `inactive` status to all prior non-transient, non-production environment deployments with the same repository and `environment` name as the created status's deployment. An `inactive` status is only added to deployments that had a `success` state. Default: `true`
+     * **Note:** To add an `inactive` status to `production` environments, you must use the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.
+     * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+     */
+    auto_inactive?: boolean;
+
+    deployment_id: number;
+    /**
+     * A short description of the status. The maximum description length is 140 characters.
+     */
+    description?: string;
+    /**
+     * Name for the target deployment environment, which can be changed when setting a deploy status. For example, `production`, `staging`, or `qa`. **Note:** This parameter requires you to use the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.
+     */
+    environment?: "production" | "staging" | "qa";
+    /**
+     * Sets the URL for accessing your environment. Default: `""`
+     * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+     */
+    environment_url?: string;
+    /**
+     * The full URL of the deployment's output. This parameter replaces `target_url`. We will continue to accept `target_url` to support legacy uses, but we recommend replacing `target_url` with `log_url`. Setting `log_url` will automatically set `target_url` to the same value. Default: `""`
+     * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+     */
+    log_url?: string;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * The state of the status. Can be one of `error`, `failure`, `inactive`, `in_progress`, `queued` `pending`, or `success`. **Note:** To use the `inactive` state, you must provide the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. To use the `in_progress` and `queued` states, you must provide the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.
+     */
+    state:
+      | "error"
+      | "failure"
+      | "inactive"
+      | "in_progress"
+      | "queued"
+      | "pending"
+      | "success";
+    /**
+     * The target URL to associate with this status. This URL should contain output to keep the user updated while the task is running or serve as historical information for what happened in the deployment. **Note:** It's recommended to use the `log_url` parameter, which replaces `target_url`.
+     */
+    target_url?: string;
+  };
+  export type ReposCreateDispatchEventParams = {
+    /**
+     * JSON payload with extra information about the webhook event that your action or worklow may use.
+     */
+    client_payload?: ReposCreateDispatchEventParamsClientPayload;
+    /**
+     * **Required:** A custom webhook event name.
+     */
+    event_type?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposCreateFileParams = {
+    /**
+     * The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.
+     */
+    author?: ReposCreateFileParamsAuthor;
+    /**
+     * The branch name. Default: the repository’s default branch (usually `master`)
+     */
+    branch?: string;
+    /**
+     * The person that committed the file. Default: the authenticated user.
+     */
+    committer?: ReposCreateFileParamsCommitter;
+    /**
+     * The new file content, using Base64 encoding.
+     */
+    content: string;
+    /**
+     * The commit message.
+     */
+    message: string;
+
+    owner: string;
+
+    path: string;
+
+    repo: string;
+    /**
+     * **Required if you are updating a file**. The blob SHA of the file being replaced.
+     */
+    sha?: string;
+  };
+  export type ReposCreateForAuthenticatedUserParams = {
+    /**
+     * Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.
+     */
+    allow_merge_commit?: boolean;
+    /**
+     * Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.
+     */
+    allow_rebase_merge?: boolean;
+    /**
+     * Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.
+     */
+    allow_squash_merge?: boolean;
+    /**
+     * Pass `true` to create an initial commit with empty README.
+     */
+    auto_init?: boolean;
+    /**
+     * A short description of the repository.
+     */
+    description?: string;
+    /**
+     * Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, "Haskell".
+     */
+    gitignore_template?: string;
+    /**
+     * Either `true` to enable issues for this repository or `false` to disable them.
+     */
+    has_issues?: boolean;
+    /**
+     * Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.
+     */
+    has_projects?: boolean;
+    /**
+     * Either `true` to enable the wiki for this repository or `false` to disable it.
+     */
+    has_wiki?: boolean;
+    /**
+     * A URL with more information about the repository.
+     */
+    homepage?: string;
+    /**
+     * Either `true` to make this repo available as a template repository or `false` to prevent it.
+     */
+    is_template?: boolean;
+    /**
+     * Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the `license_template` string. For example, "mit" or "mpl-2.0".
+     */
+    license_template?: string;
+    /**
+     * The name of the repository.
+     */
+    name: string;
+    /**
+     * Either `true` to create a private repository or `false` to create a public one. Creating private repositories requires a paid GitHub account.
+     */
+    private?: boolean;
+    /**
+     * The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization.
+     */
+    team_id?: number;
+  };
+  export type ReposCreateForkParams = {
+    /**
+     * Optional parameter to specify the organization name if forking into an organization.
+     */
+    organization?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposCreateHookParams = {
+    /**
+     * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+     */
+    active?: boolean;
+    /**
+     * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/repos/hooks/#create-hook-config-params).
+     */
+    config: ReposCreateHookParamsConfig;
+    /**
+     * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.
+     */
+    events?: string[];
+    /**
+     * Use `web` to create a webhook. Default: `web`. This parameter only accepts the value `web`.
+     */
+    name?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposCreateInOrgParams = {
+    /**
+     * Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.
+     */
+    allow_merge_commit?: boolean;
+    /**
+     * Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.
+     */
+    allow_rebase_merge?: boolean;
+    /**
+     * Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.
+     */
+    allow_squash_merge?: boolean;
+    /**
+     * Pass `true` to create an initial commit with empty README.
+     */
+    auto_init?: boolean;
+    /**
+     * A short description of the repository.
+     */
+    description?: string;
+    /**
+     * Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, "Haskell".
+     */
+    gitignore_template?: string;
+    /**
+     * Either `true` to enable issues for this repository or `false` to disable them.
+     */
+    has_issues?: boolean;
+    /**
+     * Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.
+     */
+    has_projects?: boolean;
+    /**
+     * Either `true` to enable the wiki for this repository or `false` to disable it.
+     */
+    has_wiki?: boolean;
+    /**
+     * A URL with more information about the repository.
+     */
+    homepage?: string;
+    /**
+     * Either `true` to make this repo available as a template repository or `false` to prevent it.
+     */
+    is_template?: boolean;
+    /**
+     * Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the `license_template` string. For example, "mit" or "mpl-2.0".
+     */
+    license_template?: string;
+    /**
+     * The name of the repository.
+     */
+    name: string;
+
+    org: string;
+    /**
+     * Either `true` to create a private repository or `false` to create a public one. Creating private repositories requires a paid GitHub account.
+     */
+    private?: boolean;
+    /**
+     * The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization.
+     */
+    team_id?: number;
+  };
+  export type ReposCreateOrUpdateFileParams = {
+    /**
+     * The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.
+     */
+    author?: ReposCreateOrUpdateFileParamsAuthor;
+    /**
+     * The branch name. Default: the repository’s default branch (usually `master`)
+     */
+    branch?: string;
+    /**
+     * The person that committed the file. Default: the authenticated user.
+     */
+    committer?: ReposCreateOrUpdateFileParamsCommitter;
+    /**
+     * The new file content, using Base64 encoding.
+     */
+    content: string;
+    /**
+     * The commit message.
+     */
+    message: string;
+
+    owner: string;
+
+    path: string;
+
+    repo: string;
+    /**
+     * **Required if you are updating a file**. The blob SHA of the file being replaced.
+     */
+    sha?: string;
+  };
+  export type ReposCreateReleaseParams = {
+    /**
+     * Text describing the contents of the tag.
+     */
+    body?: string;
+    /**
+     * `true` to create a draft (unpublished) release, `false` to create a published one.
+     */
+    draft?: boolean;
+    /**
+     * The name of the release.
+     */
+    name?: string;
+
+    owner: string;
+    /**
+     * `true` to identify the release as a prerelease. `false` to identify the release as a full release.
+     */
+    prerelease?: boolean;
+
+    repo: string;
+    /**
+     * The name of the tag.
+     */
+    tag_name: string;
+    /**
+     * Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`).
+     */
+    target_commitish?: string;
+  };
+  export type ReposCreateStatusParams = {
+    /**
+     * A string label to differentiate this status from the status of other systems.
+     */
+    context?: string;
+    /**
+     * A short description of the status.
+     */
+    description?: string;
+
+    owner: string;
+
+    repo: string;
+
+    sha: string;
+    /**
+     * The state of the status. Can be one of `error`, `failure`, `pending`, or `success`.
+     */
+    state: "error" | "failure" | "pending" | "success";
+    /**
+     * The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the source of the status.
+     * For example, if your continuous integration system is posting build status, you would want to provide the deep link for the build output for this specific SHA:
+     * `http://ci.example.com/user/repo/build/sha`
+     */
+    target_url?: string;
+  };
+  export type ReposCreateUsingTemplateParams = {
+    /**
+     * A short description of the new repository.
+     */
+    description?: string;
+    /**
+     * The name of the new repository.
+     */
+    name: string;
+    /**
+     * The organization or person who will own the new repository. To create a new repository in an organization, the authenticated user must be a member of the specified organization.
+     */
+    owner?: string;
+    /**
+     * Either `true` to create a new private repository or `false` to create a new public one.
+     */
+    private?: boolean;
+
+    template_owner: string;
+
+    template_repo: string;
+  };
+  export type ReposDeclineInvitationParams = {
+    invitation_id: number;
+  };
+  export type ReposDeleteParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDeleteCommitCommentParams = {
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDeleteDownloadParams = {
+    download_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDeleteFileParams = {
+    /**
+     * object containing information about the author.
+     */
+    author?: ReposDeleteFileParamsAuthor;
+    /**
+     * The branch name. Default: the repository’s default branch (usually `master`)
+     */
+    branch?: string;
+    /**
+     * object containing information about the committer.
+     */
+    committer?: ReposDeleteFileParamsCommitter;
+    /**
+     * The commit message.
+     */
+    message: string;
+
+    owner: string;
+
+    path: string;
+
+    repo: string;
+    /**
+     * The blob SHA of the file being replaced.
+     */
+    sha: string;
+  };
+  export type ReposDeleteHookParams = {
+    hook_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDeleteInvitationParams = {
+    invitation_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDeleteReleaseParams = {
+    owner: string;
+
+    release_id: number;
+
+    repo: string;
+  };
+  export type ReposDeleteReleaseAssetParams = {
+    asset_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDisableAutomatedSecurityFixesParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDisablePagesSiteParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposDisableVulnerabilityAlertsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposEnableAutomatedSecurityFixesParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposEnablePagesSiteParams = {
+    owner: string;
+
+    repo: string;
+
+    source?: ReposEnablePagesSiteParamsSource;
+  };
+  export type ReposEnableVulnerabilityAlertsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetAppsWithAccessToProtectedBranchParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetArchiveLinkParams = {
+    archive_format: string;
+
+    owner: string;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type ReposGetBranchParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetBranchProtectionParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetClonesParams = {
+    owner: string;
+    /**
+     * Must be one of: `day`, `week`.
+     */
+    per?: "day" | "week";
+
+    repo: string;
+  };
+  export type ReposGetCodeFrequencyStatsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetCollaboratorPermissionLevelParams = {
+    owner: string;
+
+    repo: string;
+
+    username: string;
+  };
+  export type ReposGetCombinedStatusForRefParams = {
+    owner: string;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type ReposGetCommitParamsDeprecatedSha = {
+    owner: string;
+
+    repo: string;
+    /**
+     * @deprecated "sha" parameter renamed to "ref"
+     */
+    sha: string;
+  };
+  export type ReposGetCommitParamsDeprecatedCommitSha = {
+    /**
+     * @deprecated "commit_sha" parameter renamed to "ref"
+     */
+    commit_sha: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetCommitParams = {
+    owner: string;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type ReposGetCommitActivityStatsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetCommitCommentParams = {
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetCommitRefShaParams = {
+    owner: string;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type ReposGetContentsParams = {
+    owner: string;
+
+    path: string;
+    /**
+     * The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`)
+     */
+    ref?: string;
+
+    repo: string;
+  };
+  export type ReposGetContributorsStatsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetDeployKeyParams = {
+    key_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetDeploymentParams = {
+    deployment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetDeploymentStatusParams = {
+    deployment_id: number;
+
+    owner: string;
+
+    repo: string;
+
+    status_id: number;
+  };
+  export type ReposGetDownloadParams = {
+    download_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetHookParams = {
+    hook_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetLatestPagesBuildParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetLatestReleaseParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetPagesParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetPagesBuildParams = {
+    build_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetParticipationStatsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetProtectedBranchAdminEnforcementParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetProtectedBranchPullRequestReviewEnforcementParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetProtectedBranchRequiredSignaturesParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetProtectedBranchRequiredStatusChecksParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetProtectedBranchRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetPunchCardStatsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetReadmeParams = {
+    owner: string;
+    /**
+     * The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`)
+     */
+    ref?: string;
+
+    repo: string;
+  };
+  export type ReposGetReleaseParams = {
+    owner: string;
+
+    release_id: number;
+
+    repo: string;
+  };
+  export type ReposGetReleaseAssetParams = {
+    asset_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetReleaseByTagParams = {
+    owner: string;
+
+    repo: string;
+
+    tag: string;
+  };
+  export type ReposGetTeamsWithAccessToProtectedBranchParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetTopPathsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetTopReferrersParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetUsersWithAccessToProtectedBranchParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposGetViewsParams = {
+    owner: string;
+    /**
+     * Must be one of: `day`, `week`.
+     */
+    per?: "day" | "week";
+
+    repo: string;
+  };
+  export type ReposListParams = {
+    /**
+     * Comma-separated list of values. Can include:
+     * \* `owner`: Repositories that are owned by the authenticated user.
+     * \* `collaborator`: Repositories that the user has been added to as a collaborator.
+     * \* `organization_member`: Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on.
+     */
+    affiliation?: string;
+    /**
+     * Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc`
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Can be one of `created`, `updated`, `pushed`, `full_name`.
+     */
+    sort?: "created" | "updated" | "pushed" | "full_name";
+    /**
+     * Can be one of `all`, `owner`, `public`, `private`, `member`. Default: `all`
+     *
+     * Will cause a `422` error if used in the same request as **visibility** or **affiliation**. Will cause a `422` error if used in the same request as **visibility** or **affiliation**.
+     */
+    type?: "all" | "owner" | "public" | "private" | "member";
+    /**
+     * Can be one of `all`, `public`, or `private`.
+     */
+    visibility?: "all" | "public" | "private";
+  };
+  export type ReposListAppsWithAccessToProtectedBranchParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListAssetsForReleaseParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    release_id: number;
+
+    repo: string;
+  };
+  export type ReposListBranchesParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Setting to `true` returns only protected branches. When set to `false`, only unprotected branches are returned. Omitting this parameter returns all branches.
+     */
+    protected?: boolean;
+
+    repo: string;
+  };
+  export type ReposListBranchesForHeadCommitParams = {
+    commit_sha: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListCollaboratorsParams = {
+    /**
+     * Filter collaborators returned by their affiliation. Can be one of:
+     * \* `outside`: All outside collaborators of an organization-owned repository.
+     * \* `direct`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status.
+     * \* `all`: All collaborators the authenticated user can see.
+     */
+    affiliation?: "outside" | "direct" | "all";
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListCommentsForCommitParamsDeprecatedRef = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * @deprecated "ref" parameter renamed to "commit_sha"
+     */
+    ref: string;
+
+    repo: string;
+  };
+  export type ReposListCommentsForCommitParams = {
+    commit_sha: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListCommitCommentsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListCommitsParams = {
+    /**
+     * GitHub login or email address by which to filter by commit author.
+     */
+    author?: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Only commits containing this file path will be returned.
+     */
+    path?: string;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * SHA or branch to start listing commits from. Default: the repository’s default branch (usually `master`).
+     */
+    sha?: string;
+    /**
+     * Only commits after this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    since?: string;
+    /**
+     * Only commits before this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+     */
+    until?: string;
+  };
+  export type ReposListContributorsParams = {
+    /**
+     * Set to `1` or `true` to include anonymous contributors in results.
+     */
+    anon?: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListDeployKeysParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListDeploymentStatusesParams = {
+    deployment_id: number;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListDeploymentsParams = {
+    /**
+     * The name of the environment that was deployed to (e.g., `staging` or `production`).
+     */
+    environment?: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The name of the ref. This can be a branch, tag, or SHA.
+     */
+    ref?: string;
+
+    repo: string;
+    /**
+     * The SHA recorded at creation time.
+     */
+    sha?: string;
+    /**
+     * The name of the task for the deployment (e.g., `deploy` or `deploy:migrations`).
+     */
+    task?: string;
+  };
+  export type ReposListDownloadsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListForOrgParams = {
+    /**
+     * Can be one of `asc` or `desc`. Default: when using `full_name`: `asc`, otherwise `desc`
+     */
+    direction?: "asc" | "desc";
+
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Can be one of `created`, `updated`, `pushed`, `full_name`.
+     */
+    sort?: "created" | "updated" | "pushed" | "full_name";
+    /**
+     * Can be one of `all`, `public`, `private`, `forks`, `sources`, `member`.
+     */
+    type?: "all" | "public" | "private" | "forks" | "sources" | "member";
+  };
+  export type ReposListForUserParams = {
+    /**
+     * Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc`
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Can be one of `created`, `updated`, `pushed`, `full_name`.
+     */
+    sort?: "created" | "updated" | "pushed" | "full_name";
+    /**
+     * Can be one of `all`, `owner`, `member`.
+     */
+    type?: "all" | "owner" | "member";
+
+    username: string;
+  };
+  export type ReposListForksParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+    /**
+     * The sort order. Can be either `newest`, `oldest`, or `stargazers`.
+     */
+    sort?: "newest" | "oldest" | "stargazers";
+  };
+  export type ReposListHooksParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListInvitationsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListInvitationsForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type ReposListLanguagesParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListPagesBuildsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListProtectedBranchRequiredStatusChecksContextsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListProtectedBranchTeamRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListProtectedBranchUserRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListPublicParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The integer ID of the last Repository that you've seen.
+     */
+    since?: string;
+  };
+  export type ReposListPullRequestsAssociatedWithCommitParams = {
+    commit_sha: string;
+
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListReleasesParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListStatusesForRefParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    ref: string;
+
+    repo: string;
+  };
+  export type ReposListTagsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListTeamsParams = {
+    owner: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    repo: string;
+  };
+  export type ReposListTeamsWithAccessToProtectedBranchParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListTopicsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposListUsersWithAccessToProtectedBranchParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposMergeParams = {
+    /**
+     * The name of the base branch that the head will be merged into.
+     */
+    base: string;
+    /**
+     * Commit message to use for the merge commit. If omitted, a default message will be used.
+     */
+    commit_message?: string;
+    /**
+     * The head to merge. This can be a branch name or a commit SHA1.
+     */
+    head: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposPingHookParams = {
+    hook_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveBranchProtectionParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveCollaboratorParams = {
+    owner: string;
+
+    repo: string;
+
+    username: string;
+  };
+  export type ReposRemoveDeployKeyParams = {
+    key_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchAdminEnforcementParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchAppRestrictionsParams = {
+    apps: string[];
+
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchPullRequestReviewEnforcementParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchRequiredSignaturesParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchRequiredStatusChecksParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchRequiredStatusChecksContextsParams = {
+    branch: string;
+
+    contexts: string[];
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRemoveProtectedBranchTeamRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+
+    teams: string[];
+  };
+  export type ReposRemoveProtectedBranchUserRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+
+    users: string[];
+  };
+  export type ReposReplaceProtectedBranchAppRestrictionsParams = {
+    apps: string[];
+
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposReplaceProtectedBranchRequiredStatusChecksContextsParams = {
+    branch: string;
+
+    contexts: string[];
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposReplaceProtectedBranchTeamRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+
+    teams: string[];
+  };
+  export type ReposReplaceProtectedBranchUserRestrictionsParams = {
+    branch: string;
+
+    owner: string;
+
+    repo: string;
+
+    users: string[];
+  };
+  export type ReposReplaceTopicsParams = {
+    /**
+     * An array of topics to add to the repository. Pass one or more topics to _replace_ the set of existing topics. Send an empty array (`[]`) to clear all topics from the repository. **Note:** Topic `names` cannot contain uppercase letters.
+     */
+    names: string[];
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRequestPageBuildParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposRetrieveCommunityProfileMetricsParams = {
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposTestPushHookParams = {
+    hook_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposTransferParams = {
+    /**
+     * **Required:** The username or organization name the repository will be transferred to.
+     */
+    new_owner?: string;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.
+     */
+    team_ids?: number[];
+  };
+  export type ReposUpdateParams = {
+    /**
+     * Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.
+     */
+    allow_merge_commit?: boolean;
+    /**
+     * Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.
+     */
+    allow_rebase_merge?: boolean;
+    /**
+     * Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.
+     */
+    allow_squash_merge?: boolean;
+    /**
+     * `true` to archive this repository. **Note**: You cannot unarchive repositories through the API.
+     */
+    archived?: boolean;
+    /**
+     * Updates the default branch for this repository.
+     */
+    default_branch?: string;
+    /**
+     * A short description of the repository.
+     */
+    description?: string;
+    /**
+     * Either `true` to enable issues for this repository or `false` to disable them.
+     */
+    has_issues?: boolean;
+    /**
+     * Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.
+     */
+    has_projects?: boolean;
+    /**
+     * Either `true` to enable the wiki for this repository or `false` to disable it.
+     */
+    has_wiki?: boolean;
+    /**
+     * A URL with more information about the repository.
+     */
+    homepage?: string;
+    /**
+     * Either `true` to make this repo available as a template repository or `false` to prevent it.
+     */
+    is_template?: boolean;
+    /**
+     * The name of the repository.
+     */
+    name?: string;
+
+    owner: string;
+    /**
+     * Either `true` to make the repository private or `false` to make it public. Creating private repositories requires a paid GitHub account. Default: `false`.
+     * **Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. **Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private.
+     */
+    private?: boolean;
+
+    repo: string;
+  };
+  export type ReposUpdateBranchProtectionParams = {
+    branch: string;
+    /**
+     * Enforce all configured restrictions for administrators. Set to `true` to enforce required status checks for repository administrators. Set to `null` to disable.
+     */
+    enforce_admins: boolean | null;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * Require at least one approving review on a pull request, before merging. Set to `null` to disable.
+     */
+    required_pull_request_reviews: ReposUpdateBranchProtectionParamsRequiredPullRequestReviews | null;
+    /**
+     * Require status checks to pass before merging. Set to `null` to disable.
+     */
+    required_status_checks: ReposUpdateBranchProtectionParamsRequiredStatusChecks | null;
+    /**
+     * Restrict who can push to this branch. User, app, and team `restrictions` are only available for organization-owned repositories. Set to `null` to disable.
+     */
+    restrictions: ReposUpdateBranchProtectionParamsRestrictions | null;
+  };
+  export type ReposUpdateCommitCommentParams = {
+    /**
+     * The contents of the comment
+     */
+    body: string;
+
+    comment_id: number;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposUpdateFileParams = {
+    /**
+     * The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.
+     */
+    author?: ReposUpdateFileParamsAuthor;
+    /**
+     * The branch name. Default: the repository’s default branch (usually `master`)
+     */
+    branch?: string;
+    /**
+     * The person that committed the file. Default: the authenticated user.
+     */
+    committer?: ReposUpdateFileParamsCommitter;
+    /**
+     * The new file content, using Base64 encoding.
+     */
+    content: string;
+    /**
+     * The commit message.
+     */
+    message: string;
+
+    owner: string;
+
+    path: string;
+
+    repo: string;
+    /**
+     * **Required if you are updating a file**. The blob SHA of the file being replaced.
+     */
+    sha?: string;
+  };
+  export type ReposUpdateHookParams = {
+    /**
+     * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+     */
+    active?: boolean;
+    /**
+     * Determines a list of events to be added to the list of events that the Hook triggers for.
+     */
+    add_events?: string[];
+    /**
+     * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/repos/hooks/#create-hook-config-params).
+     */
+    config?: ReposUpdateHookParamsConfig;
+    /**
+     * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for. This replaces the entire array of events.
+     */
+    events?: string[];
+
+    hook_id: number;
+
+    owner: string;
+    /**
+     * Determines a list of events to be removed from the list of events that the Hook triggers for.
+     */
+    remove_events?: string[];
+
+    repo: string;
+  };
+  export type ReposUpdateInformationAboutPagesSiteParams = {
+    /**
+     * Specify a custom domain for the repository. Sending a `null` value will remove the custom domain. For more about custom domains, see "[Using a custom domain with GitHub Pages](https://help.github.com/articles/using-a-custom-domain-with-github-pages/)."
+     */
+    cname?: string;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * Update the source for the repository. Must include the branch name, and may optionally specify the subdirectory `/docs`. Possible values are `"gh-pages"`, `"master"`, and `"master /docs"`.
+     */
+    source?: '"gh-pages"' | '"master"' | '"master /docs"';
+  };
+  export type ReposUpdateInvitationParams = {
+    invitation_id: number;
+
+    owner: string;
+    /**
+     * The permissions that the associated user will have on the repository. Valid values are `read`, `write`, and `admin`.
+     */
+    permissions?: "read" | "write" | "admin";
+
+    repo: string;
+  };
+  export type ReposUpdateProtectedBranchPullRequestReviewEnforcementParams = {
+    branch: string;
+    /**
+     * Set to `true` if you want to automatically dismiss approving reviews when someone pushes a new commit.
+     */
+    dismiss_stale_reviews?: boolean;
+    /**
+     * Specify which users and teams can dismiss pull request reviews. Pass an empty `dismissal_restrictions` object to disable. User and team `dismissal_restrictions` are only available for organization-owned repositories. Omit this parameter for personal repositories.
+     */
+    dismissal_restrictions?: ReposUpdateProtectedBranchPullRequestReviewEnforcementParamsDismissalRestrictions;
+
+    owner: string;
+
+    repo: string;
+    /**
+     * Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) have reviewed.
+     */
+    require_code_owner_reviews?: boolean;
+    /**
+     * Specifies the number of reviewers required to approve pull requests. Use a number between 1 and 6.
+     */
+    required_approving_review_count?: number;
+  };
+  export type ReposUpdateProtectedBranchRequiredStatusChecksParams = {
+    branch: string;
+    /**
+     * The list of status checks to require in order to merge into this branch
+     */
+    contexts?: string[];
+
+    owner: string;
+
+    repo: string;
+    /**
+     * Require branches to be up to date before merging.
+     */
+    strict?: boolean;
+  };
+  export type ReposUpdateReleaseParams = {
+    /**
+     * Text describing the contents of the tag.
+     */
+    body?: string;
+    /**
+     * `true` makes the release a draft, and `false` publishes the release.
+     */
+    draft?: boolean;
+    /**
+     * The name of the release.
+     */
+    name?: string;
+
+    owner: string;
+    /**
+     * `true` to identify the release as a prerelease, `false` to identify the release as a full release.
+     */
+    prerelease?: boolean;
+
+    release_id: number;
+
+    repo: string;
+    /**
+     * The name of the tag.
+     */
+    tag_name?: string;
+    /**
+     * Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`).
+     */
+    target_commitish?: string;
+  };
+  export type ReposUpdateReleaseAssetParams = {
+    asset_id: number;
+    /**
+     * An alternate short description of the asset. Used in place of the filename.
+     */
+    label?: string;
+    /**
+     * The file name of the asset.
+     */
+    name?: string;
+
+    owner: string;
+
+    repo: string;
+  };
+  export type ReposUploadReleaseAssetParams = {
+    file: string | object;
+
+    headers: ReposUploadReleaseAssetParamsHeaders;
+    /**
+     * An alternate short description of the asset. Used in place of the filename. This should be set in a URI query parameter.
+     */
+    label?: string;
+    /**
+     * The file name of the asset. This should be set in a URI query parameter.
+     */
+    name: string;
+    /**
+     * The `upload_url` key returned from creating or getting a release
+     */
+    url: string;
+  };
+  export type SearchCodeParams = {
+    /**
+     * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+     */
+    order?: "desc" | "asc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching code](https://help.github.com/articles/searching-code/)" for a detailed list of qualifiers.
+     */
+    q: string;
+    /**
+     * Sorts the results of your query. Can only be `indexed`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+     */
+    sort?: "indexed";
+  };
+  export type SearchCommitsParams = {
+    /**
+     * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+     */
+    order?: "desc" | "asc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching commits](https://help.github.com/articles/searching-commits/)" for a detailed list of qualifiers.
+     */
+    q: string;
+    /**
+     * Sorts the results of your query by `author-date` or `committer-date`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+     */
+    sort?: "author-date" | "committer-date";
+  };
+  export type SearchIssuesParams = {
+    /**
+     * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+     */
+    order?: "desc" | "asc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)" for a detailed list of qualifiers.
+     */
+    q: string;
+    /**
+     * Sorts the results of your query by the number of `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, or `interactions`. You can also sort results by how recently the items were `created` or `updated`, Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+     */
+    sort?:
+      | "comments"
+      | "reactions"
+      | "reactions-+1"
+      | "reactions--1"
+      | "reactions-smile"
+      | "reactions-thinking_face"
+      | "reactions-heart"
+      | "reactions-tada"
+      | "interactions"
+      | "created"
+      | "updated";
+  };
+  export type SearchIssuesAndPullRequestsParams = {
+    /**
+     * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+     */
+    order?: "desc" | "asc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)" for a detailed list of qualifiers.
+     */
+    q: string;
+    /**
+     * Sorts the results of your query by the number of `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, or `interactions`. You can also sort results by how recently the items were `created` or `updated`, Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+     */
+    sort?:
+      | "comments"
+      | "reactions"
+      | "reactions-+1"
+      | "reactions--1"
+      | "reactions-smile"
+      | "reactions-thinking_face"
+      | "reactions-heart"
+      | "reactions-tada"
+      | "interactions"
+      | "created"
+      | "updated";
+  };
+  export type SearchLabelsParams = {
+    /**
+     * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+     */
+    order?: "desc" | "asc";
+    /**
+     * The search keywords. This endpoint does not accept qualifiers in the query. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query).
+     */
+    q: string;
+    /**
+     * The id of the repository.
+     */
+    repository_id: number;
+    /**
+     * Sorts the results of your query by when the label was `created` or `updated`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+     */
+    sort?: "created" | "updated";
+  };
+  export type SearchReposParams = {
+    /**
+     * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+     */
+    order?: "desc" | "asc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching for repositories](https://help.github.com/articles/searching-for-repositories/)" for a detailed list of qualifiers.
+     */
+    q: string;
+    /**
+     * Sorts the results of your query by number of `stars`, `forks`, or `help-wanted-issues` or how recently the items were `updated`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+     */
+    sort?: "stars" | "forks" | "help-wanted-issues" | "updated";
+  };
+  export type SearchTopicsParams = {
+    /**
+     * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query).
+     */
+    q: string;
+  };
+  export type SearchUsersParams = {
+    /**
+     * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+     */
+    order?: "desc" | "asc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching users](https://help.github.com/articles/searching-users/)" for a detailed list of qualifiers.
+     */
+    q: string;
+    /**
+     * Sorts the results of your query by number of `followers` or `repositories`, or when the person `joined` GitHub. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+     */
+    sort?: "followers" | "repositories" | "joined";
+  };
+  export type TeamsAddMemberParams = {
+    team_id: number;
+
+    username: string;
+  };
+  export type TeamsAddOrUpdateMembershipParams = {
+    /**
+     * The role that this user should have in the team. Can be one of:
+     * \* `member` - a normal member of the team.
+     * \* `maintainer` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description.
+     */
+    role?: "member" | "maintainer";
+
+    team_id: number;
+
+    username: string;
+  };
+  export type TeamsAddOrUpdateProjectParams = {
+    /**
+     * The permission to grant to the team for this project. Can be one of:
+     * \* `read` - team members can read, but not write to or administer this project.
+     * \* `write` - team members can read and write, but not administer this project.
+     * \* `admin` - team members can read, write and administer this project.
+     * Default: the team's `permission` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     * **Note**: If you pass the `hellcat-preview` media type, you can promote—but not demote—a `permission` attribute inherited from a parent team.
+     */
+    permission?: "read" | "write" | "admin";
+
+    project_id: number;
+
+    team_id: number;
+  };
+  export type TeamsAddOrUpdateRepoParams = {
+    owner: string;
+    /**
+     * The permission to grant the team on this repository. Can be one of:
+     * \* `pull` - team members can pull, but not push to or administer this repository.
+     * \* `push` - team members can pull and push, but not administer this repository.
+     * \* `admin` - team members can pull, push and administer this repository.
+     *
+     * If no permission is specified, the team's `permission` attribute will be used to determine what permission to grant the team on this repository.
+     * **Note**: If you pass the `hellcat-preview` media type, you can promote—but not demote—a `permission` attribute inherited through a parent team.
+     */
+    permission?: "pull" | "push" | "admin";
+
+    repo: string;
+
+    team_id: number;
+  };
+  export type TeamsCheckManagesRepoParams = {
+    owner: string;
+
+    repo: string;
+
+    team_id: number;
+  };
+  export type TeamsCreateParamsDeprecatedPermission = {
+    /**
+     * The description of the team.
+     */
+    description?: string;
+    /**
+     * The logins of organization members to add as maintainers of the team.
+     */
+    maintainers?: string[];
+    /**
+     * The name of the team.
+     */
+    name: string;
+
+    org: string;
+    /**
+     * The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.
+     */
+    parent_team_id?: number;
+    /**
+     * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of:
+     * \* `pull` - team members can pull, but not push to or administer newly-added repositories.
+     * \* `push` - team members can pull and push, but not administer newly-added repositories.
+     * \* `admin` - team members can pull, push and administer newly-added repositories.
+     * @deprecated "permission" parameter has been deprecated and will be removed in future
+     */
+    permission?: string;
+    /**
+     * The level of privacy this team should have. The options are:
+     * **For a non-nested team:**
+     * \* `secret` - only visible to organization owners and members of this team.
+     * \* `closed` - visible to all members of this organization.
+     * Default: `secret`
+     * **For a parent or child team:**
+     * \* `closed` - visible to all members of this organization.
+     * Default for child team: `closed`
+     * **Note**: You must pass the `hellcat-preview` media type to set privacy default to `closed` for child teams.
+     */
+    privacy?: "secret" | "closed";
+    /**
+     * The full name (e.g., "organization-name/repository-name") of repositories to add the team to.
+     */
+    repo_names?: string[];
+  };
+  export type TeamsCreateParams = {
+    /**
+     * The description of the team.
+     */
+    description?: string;
+    /**
+     * The logins of organization members to add as maintainers of the team.
+     */
+    maintainers?: string[];
+    /**
+     * The name of the team.
+     */
+    name: string;
+
+    org: string;
+    /**
+     * The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.
+     */
+    parent_team_id?: number;
+    /**
+     * The level of privacy this team should have. The options are:
+     * **For a non-nested team:**
+     * \* `secret` - only visible to organization owners and members of this team.
+     * \* `closed` - visible to all members of this organization.
+     * Default: `secret`
+     * **For a parent or child team:**
+     * \* `closed` - visible to all members of this organization.
+     * Default for child team: `closed`
+     * **Note**: You must pass the `hellcat-preview` media type to set privacy default to `closed` for child teams.
+     */
+    privacy?: "secret" | "closed";
+    /**
+     * The full name (e.g., "organization-name/repository-name") of repositories to add the team to.
+     */
+    repo_names?: string[];
+  };
+  export type TeamsCreateDiscussionParams = {
+    /**
+     * The discussion post's body text.
+     */
+    body: string;
+    /**
+     * Private posts are only visible to team members, organization owners, and team maintainers. Public posts are visible to all members of the organization. Set to `true` to create a private post.
+     */
+    private?: boolean;
+
+    team_id: number;
+    /**
+     * The discussion post's title.
+     */
+    title: string;
+  };
+  export type TeamsCreateDiscussionCommentParams = {
+    /**
+     * The discussion comment's body text.
+     */
+    body: string;
+
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type TeamsDeleteParams = {
+    team_id: number;
+  };
+  export type TeamsDeleteDiscussionParams = {
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type TeamsDeleteDiscussionCommentParams = {
+    comment_number: number;
+
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type TeamsGetParams = {
+    team_id: number;
+  };
+  export type TeamsGetByNameParams = {
+    org: string;
+
+    team_slug: string;
+  };
+  export type TeamsGetDiscussionParams = {
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type TeamsGetDiscussionCommentParams = {
+    comment_number: number;
+
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type TeamsGetMemberParams = {
+    team_id: number;
+
+    username: string;
+  };
+  export type TeamsGetMembershipParams = {
+    team_id: number;
+
+    username: string;
+  };
+  export type TeamsListParams = {
+    org: string;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type TeamsListChildParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type TeamsListDiscussionCommentsParams = {
+    /**
+     * Sorts the discussion comments by the date they were created. To return the oldest comments first, set to `asc`. Can be one of `asc` or `desc`.
+     */
+    direction?: "asc" | "desc";
+
+    discussion_number: number;
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type TeamsListDiscussionsParams = {
+    /**
+     * Sorts the discussion comments by the date they were created. To return the oldest comments first, set to `asc`. Can be one of `asc` or `desc`.
+     */
+    direction?: "asc" | "desc";
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type TeamsListForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type TeamsListMembersParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * Filters members returned by their role in the team. Can be one of:
+     * \* `member` - normal members of the team.
+     * \* `maintainer` - team maintainers.
+     * \* `all` - all members of the team.
+     */
+    role?: "member" | "maintainer" | "all";
+
+    team_id: number;
+  };
+  export type TeamsListPendingInvitationsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type TeamsListProjectsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type TeamsListReposParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    team_id: number;
+  };
+  export type TeamsRemoveMemberParams = {
+    team_id: number;
+
+    username: string;
+  };
+  export type TeamsRemoveMembershipParams = {
+    team_id: number;
+
+    username: string;
+  };
+  export type TeamsRemoveProjectParams = {
+    project_id: number;
+
+    team_id: number;
+  };
+  export type TeamsRemoveRepoParams = {
+    owner: string;
+
+    repo: string;
+
+    team_id: number;
+  };
+  export type TeamsReviewProjectParams = {
+    project_id: number;
+
+    team_id: number;
+  };
+  export type TeamsUpdateParamsDeprecatedPermission = {
+    /**
+     * The description of the team.
+     */
+    description?: string;
+    /**
+     * The name of the team.
+     */
+    name: string;
+    /**
+     * The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.
+     */
+    parent_team_id?: number;
+    /**
+     * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of:
+     * \* `pull` - team members can pull, but not push to or administer newly-added repositories.
+     * \* `push` - team members can pull and push, but not administer newly-added repositories.
+     * \* `admin` - team members can pull, push and administer newly-added repositories.
+     * @deprecated "permission" parameter has been deprecated and will be removed in future
+     */
+    permission?: string;
+    /**
+     * The level of privacy this team should have. Editing teams without specifying this parameter leaves `privacy` intact. The options are:
+     * **For a non-nested team:**
+     * \* `secret` - only visible to organization owners and members of this team.
+     * \* `closed` - visible to all members of this organization.
+     * **For a parent or child team:**
+     * \* `closed` - visible to all members of this organization.
+     */
+    privacy?: "secret" | "closed";
+
+    team_id: number;
+  };
+  export type TeamsUpdateParams = {
+    /**
+     * The description of the team.
+     */
+    description?: string;
+    /**
+     * The name of the team.
+     */
+    name: string;
+    /**
+     * The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.
+     */
+    parent_team_id?: number;
+    /**
+     * The level of privacy this team should have. Editing teams without specifying this parameter leaves `privacy` intact. The options are:
+     * **For a non-nested team:**
+     * \* `secret` - only visible to organization owners and members of this team.
+     * \* `closed` - visible to all members of this organization.
+     * **For a parent or child team:**
+     * \* `closed` - visible to all members of this organization.
+     */
+    privacy?: "secret" | "closed";
+
+    team_id: number;
+  };
+  export type TeamsUpdateDiscussionParams = {
+    /**
+     * The discussion post's body text.
+     */
+    body?: string;
+
+    discussion_number: number;
+
+    team_id: number;
+    /**
+     * The discussion post's title.
+     */
+    title?: string;
+  };
+  export type TeamsUpdateDiscussionCommentParams = {
+    /**
+     * The discussion comment's body text.
+     */
+    body: string;
+
+    comment_number: number;
+
+    discussion_number: number;
+
+    team_id: number;
+  };
+  export type UsersAddEmailsParams = {
+    /**
+     * Adds one or more email addresses to your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an `array` of emails addresses directly, but we recommend that you pass an object using the `emails` key.
+     */
+    emails: string[];
+  };
+  export type UsersBlockParams = {
+    username: string;
+  };
+  export type UsersCheckBlockedParams = {
+    username: string;
+  };
+  export type UsersCheckFollowingParams = {
+    username: string;
+  };
+  export type UsersCheckFollowingForUserParams = {
+    target_user: string;
+
+    username: string;
+  };
+  export type UsersCreateGpgKeyParams = {
+    /**
+     * Your GPG key, generated in ASCII-armored format. See "[Generating a new GPG key](https://help.github.com/articles/generating-a-new-gpg-key/)" for help creating a GPG key.
+     */
+    armored_public_key?: string;
+  };
+  export type UsersCreatePublicKeyParams = {
+    /**
+     * The public SSH key to add to your GitHub account. See "[Generating a new SSH key](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)" for guidance on how to create a public SSH key.
+     */
+    key?: string;
+    /**
+     * A descriptive name for the new key. Use a name that will help you recognize this key in your GitHub account. For example, if you're using a personal Mac, you might call this key "Personal MacBook Air".
+     */
+    title?: string;
+  };
+  export type UsersDeleteEmailsParams = {
+    /**
+     * Deletes one or more email addresses from your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an `array` of emails addresses directly, but we recommend that you pass an object using the `emails` key.
+     */
+    emails: string[];
+  };
+  export type UsersDeleteGpgKeyParams = {
+    gpg_key_id: number;
+  };
+  export type UsersDeletePublicKeyParams = {
+    key_id: number;
+  };
+  export type UsersFollowParams = {
+    username: string;
+  };
+  export type UsersGetByUsernameParams = {
+    username: string;
+  };
+  export type UsersGetContextForUserParams = {
+    /**
+     * Uses the ID for the `subject_type` you specified. **Required** when using `subject_type`.
+     */
+    subject_id?: string;
+    /**
+     * Identifies which additional information you'd like to receive about the person's hovercard. Can be `organization`, `repository`, `issue`, `pull_request`. **Required** when using `subject_id`.
+     */
+    subject_type?: "organization" | "repository" | "issue" | "pull_request";
+
+    username: string;
+  };
+  export type UsersGetGpgKeyParams = {
+    gpg_key_id: number;
+  };
+  export type UsersGetPublicKeyParams = {
+    key_id: number;
+  };
+  export type UsersListParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+    /**
+     * The integer ID of the last User that you've seen.
+     */
+    since?: string;
+  };
+  export type UsersListEmailsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type UsersListFollowersForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type UsersListFollowersForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type UsersListFollowingForAuthenticatedUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type UsersListFollowingForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type UsersListGpgKeysParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type UsersListGpgKeysForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type UsersListPublicEmailsParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type UsersListPublicKeysParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+  };
+  export type UsersListPublicKeysForUserParams = {
+    /**
+     * Page number of the results to fetch.
+     */
+    page?: number;
+    /**
+     * Results per page (max 100)
+     */
+    per_page?: number;
+
+    username: string;
+  };
+  export type UsersTogglePrimaryEmailVisibilityParams = {
+    /**
+     * Specify the _primary_ email address that needs a visibility change.
+     */
+    email: string;
+    /**
+     * Use `public` to enable an authenticated user to view the specified email address, or use `private` so this primary email address cannot be seen publicly.
+     */
+    visibility: string;
+  };
+  export type UsersUnblockParams = {
+    username: string;
+  };
+  export type UsersUnfollowParams = {
+    username: string;
+  };
+  export type UsersUpdateAuthenticatedParams = {
+    /**
+     * The new short biography of the user.
+     */
+    bio?: string;
+    /**
+     * The new blog URL of the user.
+     */
+    blog?: string;
+    /**
+     * The new company of the user.
+     */
+    company?: string;
+    /**
+     * The publicly visible email address of the user.
+     */
+    email?: string;
+    /**
+     * The new hiring availability of the user.
+     */
+    hireable?: boolean;
+    /**
+     * The new location of the user.
+     */
+    location?: string;
+    /**
+     * The new name of the user.
+     */
+    name?: string;
+  };
+
+  // child param types
+  export type AppsCreateInstallationTokenParamsPermissions = {};
+  export type ChecksCreateParamsActions = {
+    description: string;
+    identifier: string;
+    label: string;
+  };
+  export type ChecksCreateParamsOutput = {
+    annotations?: ChecksCreateParamsOutputAnnotations[];
+    images?: ChecksCreateParamsOutputImages[];
+    summary: string;
+    text?: string;
+    title: string;
+  };
+  export type ChecksCreateParamsOutputAnnotations = {
+    annotation_level: "notice" | "warning" | "failure";
+    end_column?: number;
+    end_line: number;
+    message: string;
+    path: string;
+    raw_details?: string;
+    start_column?: number;
+    start_line: number;
+    title?: string;
+  };
+  export type ChecksCreateParamsOutputImages = {
+    alt: string;
+    caption?: string;
+    image_url: string;
+  };
+  export type ChecksSetSuitesPreferencesParamsAutoTriggerChecks = {
+    app_id: number;
+    setting: boolean;
+  };
+  export type ChecksUpdateParamsActions = {
+    description: string;
+    identifier: string;
+    label: string;
+  };
+  export type ChecksUpdateParamsOutput = {
+    annotations?: ChecksUpdateParamsOutputAnnotations[];
+    images?: ChecksUpdateParamsOutputImages[];
+    summary: string;
+    text?: string;
+    title?: string;
+  };
+  export type ChecksUpdateParamsOutputAnnotations = {
+    annotation_level: "notice" | "warning" | "failure";
+    end_column?: number;
+    end_line: number;
+    message: string;
+    path: string;
+    raw_details?: string;
+    start_column?: number;
+    start_line: number;
+    title?: string;
+  };
+  export type ChecksUpdateParamsOutputImages = {
+    alt: string;
+    caption?: string;
+    image_url: string;
+  };
+  export type GistsCreateParamsFiles = {
+    content?: string;
+  };
+  export type GistsUpdateParamsFiles = {
+    content?: string;
+    filename?: string;
+  };
+  export type GitCreateCommitParamsAuthor = {
+    date?: string;
+    email?: string;
+    name?: string;
+  };
+  export type GitCreateCommitParamsCommitter = {
+    date?: string;
+    email?: string;
+    name?: string;
+  };
+  export type GitCreateTagParamsTagger = {
+    date?: string;
+    email?: string;
+    name?: string;
+  };
+  export type GitCreateTreeParamsTree = {
+    content?: string;
+    mode?: "100644" | "100755" | "040000" | "160000" | "120000";
+    path?: string;
+    sha?: string;
+    type?: "blob" | "tree" | "commit";
+  };
+  export type OrgsCreateHookParamsConfig = {
+    content_type?: string;
+    insecure_ssl?: string;
+    secret?: string;
+    url: string;
+  };
+  export type OrgsUpdateHookParamsConfig = {
+    content_type?: string;
+    insecure_ssl?: string;
+    secret?: string;
+    url: string;
+  };
+  export type PullsCreateReviewParamsComments = {
+    body: string;
+    path: string;
+    position: number;
+  };
+  export type ReposCreateDispatchEventParamsClientPayload = {};
+  export type ReposCreateFileParamsAuthor = {
+    email: string;
+    name: string;
+  };
+  export type ReposCreateFileParamsCommitter = {
+    email: string;
+    name: string;
+  };
+  export type ReposCreateHookParamsConfig = {
+    content_type?: string;
+    insecure_ssl?: string;
+    secret?: string;
+    url: string;
+  };
+  export type ReposCreateOrUpdateFileParamsAuthor = {
+    email: string;
+    name: string;
+  };
+  export type ReposCreateOrUpdateFileParamsCommitter = {
+    email: string;
+    name: string;
+  };
+  export type ReposDeleteFileParamsAuthor = {
+    email?: string;
+    name?: string;
+  };
+  export type ReposDeleteFileParamsCommitter = {
+    email?: string;
+    name?: string;
+  };
+  export type ReposEnablePagesSiteParamsSource = {
+    branch?: "master" | "gh-pages";
+    path?: string;
+  };
+  export type ReposUpdateBranchProtectionParamsRequiredPullRequestReviews = {
+    dismiss_stale_reviews?: boolean;
+    dismissal_restrictions?: ReposUpdateBranchProtectionParamsRequiredPullRequestReviewsDismissalRestrictions;
+    require_code_owner_reviews?: boolean;
+    required_approving_review_count?: number;
+  };
+  export type ReposUpdateBranchProtectionParamsRequiredPullRequestReviewsDismissalRestrictions = {
+    teams?: string[];
+    users?: string[];
+  };
+  export type ReposUpdateBranchProtectionParamsRequiredStatusChecks = {
+    contexts: string[];
+    strict: boolean;
+  };
+  export type ReposUpdateBranchProtectionParamsRestrictions = {
+    apps?: string[];
+    teams: string[];
+    users: string[];
+  };
+  export type ReposUpdateFileParamsAuthor = {
+    email: string;
+    name: string;
+  };
+  export type ReposUpdateFileParamsCommitter = {
+    email: string;
+    name: string;
+  };
+  export type ReposUpdateHookParamsConfig = {
+    content_type?: string;
+    insecure_ssl?: string;
+    secret?: string;
+    url: string;
+  };
+  export type ReposUpdateProtectedBranchPullRequestReviewEnforcementParamsDismissalRestrictions = {
+    teams?: string[];
+    users?: string[];
+  };
+  export type ReposUploadReleaseAssetParamsHeaders = {
+    "content-length": number;
+    "content-type": string;
+  };
+}
+
+declare class Octokit {
+  constructor(options?: Octokit.Options);
+  authenticate(auth: Octokit.AuthBasic): void;
+  authenticate(auth: Octokit.AuthOAuthToken): void;
+  authenticate(auth: Octokit.AuthOAuthSecret): void;
+  authenticate(auth: Octokit.AuthUserToken): void;
+  authenticate(auth: Octokit.AuthJWT): void;
+
+  hook: {
+    before(
+      name: string,
+      callback: (options: Octokit.HookOptions) => void
+    ): void;
+    after(
+      name: string,
+      callback: (
+        response: Octokit.Response<any>,
+        options: Octokit.HookOptions
+      ) => void
+    ): void;
+    error(
+      name: string,
+      callback: (error: Octokit.HookError, options: Octokit.HookOptions) => void
+    ): void;
+    wrap(
+      name: string,
+      callback: (
+        request: (
+          options: Octokit.HookOptions
+        ) => Promise<Octokit.Response<any>>,
+        options: Octokit.HookOptions
+      ) => void
+    ): void;
+  };
+
+  static plugin(plugin: Octokit.Plugin | Octokit.Plugin[]): Octokit.Static;
+
+  registerEndpoints(endpoints: {
+    [scope: string]: Octokit.EndpointOptions;
+  }): void;
+
+  request: Octokit.Request;
+
+  paginate: Octokit.Paginate;
+
+  log: Octokit.Log;
+
+  activity: {
+    /**
+     * Requires for the user to be authenticated.
+     */
+    checkStarringRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityCheckStarringRepoParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint should only be used to stop watching a repository. To control whether or not you wish to receive notifications from a repository, [set the repository's subscription manually](https://developer.github.com/v3/activity/watching/#set-a-repository-subscription).
+     */
+    deleteRepoSubscription: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityDeleteRepoSubscriptionParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Mutes all future notifications for a conversation until you comment on the thread or get **@mention**ed.
+     */
+    deleteThreadSubscription: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityDeleteThreadSubscriptionParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getRepoSubscription: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityGetRepoSubscriptionParams
+      ): Promise<Octokit.Response<Octokit.ActivityGetRepoSubscriptionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getThread: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityGetThreadParams
+      ): Promise<Octokit.Response<Octokit.ActivityGetThreadResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This checks to see if the current user is subscribed to a thread. You can also [get a repository subscription](https://developer.github.com/v3/activity/watching/#get-a-repository-subscription).
+     *
+     * Note that subscriptions are only generated if a user is participating in a conversation--for example, they've replied to the thread, were **@mentioned**, or manually subscribe to a thread.
+     */
+    getThreadSubscription: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityGetThreadSubscriptionParams
+      ): Promise<
+        Octokit.Response<Octokit.ActivityGetThreadSubscriptionResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This is the user's organization dashboard. You must be authenticated as the user to view this.
+     */
+    listEventsForOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityListEventsForOrgParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events.
+     */
+    listEventsForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListEventsForUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * GitHub provides several timeline resources in [Atom](http://en.wikipedia.org/wiki/Atom_(standard)) format. The Feeds API lists all the feeds available to the authenticated user:
+     *
+     * *   **Timeline**: The GitHub global public timeline
+     * *   **User**: The public timeline for any user, using [URI template](https://developer.github.com/v3/#hypermedia)
+     * *   **Current user public**: The public timeline for the authenticated user
+     * *   **Current user**: The private timeline for the authenticated user
+     * *   **Current user actor**: The private timeline for activity created by the authenticated user
+     * *   **Current user organizations**: The private timeline for the organizations the authenticated user is a member of.
+     * *   **Security advisories**: A collection of public announcements that provide information about security-related vulnerabilities in software on GitHub.
+     *
+     * **Note**: Private feeds are only returned when [authenticating via Basic Auth](https://developer.github.com/v3/#basic-authentication) since current feed URIs use the older, non revocable auth tokens.
+     */
+    listFeeds: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.ActivityListFeedsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all notifications for the current user, sorted by most recently updated.
+     *
+     * The following example uses the `since` parameter to list notifications that have been updated after the specified time.
+     */
+    listNotifications: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListNotificationsParams
+      ): Promise<Octokit.Response<Octokit.ActivityListNotificationsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all notifications for the current user.
+     */
+    listNotificationsForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListNotificationsForRepoParams
+      ): Promise<
+        Octokit.Response<Octokit.ActivityListNotificationsForRepoResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * We delay the public events feed by five minutes, which means the most recent event returned by the public events API actually occurred at least five minutes ago.
+     */
+    listPublicEvents: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityListPublicEventsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listPublicEventsForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListPublicEventsForOrgParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listPublicEventsForRepoNetwork: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListPublicEventsForRepoNetworkParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listPublicEventsForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListPublicEventsForUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * These are events that you've received by watching repos and following users. If you are authenticated as the given user, you will see private events. Otherwise, you'll only see public events.
+     */
+    listReceivedEventsForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListReceivedEventsForUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listReceivedPublicEventsForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListReceivedPublicEventsForUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listRepoEvents: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityListRepoEventsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You can also find out _when_ stars were created by passing the following custom [media type](https://developer.github.com/v3/media/) via the `Accept` header:
+     */
+    listReposStarredByAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListReposStarredByAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ActivityListReposStarredByAuthenticatedUserResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You can also find out _when_ stars were created by passing the following custom [media type](https://developer.github.com/v3/media/) via the `Accept` header:
+     */
+    listReposStarredByUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListReposStarredByUserParams
+      ): Promise<
+        Octokit.Response<Octokit.ActivityListReposStarredByUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listReposWatchedByUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListReposWatchedByUserParams
+      ): Promise<
+        Octokit.Response<Octokit.ActivityListReposWatchedByUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You can also find out _when_ stars were created by passing the following custom [media type](https://developer.github.com/v3/media/) via the `Accept` header:
+     */
+    listStargazersForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListStargazersForRepoParams
+      ): Promise<
+        Octokit.Response<Octokit.ActivityListStargazersForRepoResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listWatchedReposForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListWatchedReposForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ActivityListWatchedReposForAuthenticatedUserResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listWatchersForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityListWatchersForRepoParams
+      ): Promise<Octokit.Response<Octokit.ActivityListWatchersForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Marks a notification as "read" removes it from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a `202 Accepted` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List your notifications](https://developer.github.com/v3/activity/notifications/#list-your-notifications) endpoint and pass the query parameter `all=false`.
+     */
+    markAsRead: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityMarkAsReadParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Marks all notifications in a repository as "read" removes them from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a `202 Accepted` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List your notifications in a repository](https://developer.github.com/v3/activity/notifications/#list-your-notifications-in-a-repository) endpoint and pass the query parameter `all=false`.
+     */
+    markNotificationsAsReadForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivityMarkNotificationsAsReadForRepoParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    markThreadAsRead: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityMarkThreadAsReadParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If you would like to watch a repository, set `subscribed` to `true`. If you would like to ignore notifications made within a repository, set `ignored` to `true`. If you would like to stop watching a repository, [delete the repository's subscription](https://developer.github.com/v3/activity/watching/#delete-a-repository-subscription) completely.
+     */
+    setRepoSubscription: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivitySetRepoSubscriptionParams
+      ): Promise<Octokit.Response<Octokit.ActivitySetRepoSubscriptionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This lets you subscribe or unsubscribe from a conversation.
+     */
+    setThreadSubscription: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ActivitySetThreadSubscriptionParams
+      ): Promise<
+        Octokit.Response<Octokit.ActivitySetThreadSubscriptionResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Requires for the user to be authenticated.
+     *
+     * Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     */
+    starRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityStarRepoParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Requires for the user to be authenticated.
+     */
+    unstarRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ActivityUnstarRepoParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  apps: {
+    /**
+     * Add a single repository to an installation. The authenticated user must have admin access to the repository.
+     *
+     * You must use a personal access token (which you can create via the [command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) or the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization)) or [Basic Authentication](https://developer.github.com/v3/auth/#basic-authentication) to access this endpoint.
+     */
+    addRepoToInstallation: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsAddRepoToInstallationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change.
+     *
+     * GitHub Apps must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://developer.github.com/v3/auth/#basic-authentication) with their client ID and client secret to access this endpoint.
+     */
+    checkAccountIsAssociatedWithAny: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsCheckAccountIsAssociatedWithAnyParams
+      ): Promise<
+        Octokit.Response<Octokit.AppsCheckAccountIsAssociatedWithAnyResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change.
+     *
+     * GitHub Apps must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://developer.github.com/v3/auth/#basic-authentication) with their client ID and client secret to access this endpoint.
+     */
+    checkAccountIsAssociatedWithAnyStubbed: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsCheckAccountIsAssociatedWithAnyStubbedParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.AppsCheckAccountIsAssociatedWithAnyStubbedResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`.
+     * @deprecated octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization
+     */
+    checkAuthorization: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsCheckAuthorizationParams
+      ): Promise<Octokit.Response<Octokit.AppsCheckAuthorizationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) to use this endpoint, where the username is the OAuth application `client_id` and the password is its `client_secret`. Invalid tokens will return `404 NOT FOUND`.
+     */
+    checkToken: {
+      (params?: Octokit.RequestOptions & Octokit.AppsCheckTokenParams): Promise<
+        Octokit.Response<Octokit.AppsCheckTokenResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates an attachment under a content reference URL in the body or comment of an issue or pull request. Use the `id` of the content reference from the [`content_reference` event](https://developer.github.com/v3/activity/events/types/#contentreferenceevent) to create an attachment.
+     *
+     * The app must create a content attachment within six hours of the content reference URL being posted. See "[Using content attachments](https://developer.github.com/apps/using-content-attachments/)" for details about content attachments.
+     *
+     * You must use an [installation access token](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint.
+     *
+     * This example creates a content attachment for the domain `https://errors.ai/`.
+     */
+    createContentAttachment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsCreateContentAttachmentParams
+      ): Promise<Octokit.Response<Octokit.AppsCreateContentAttachmentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Use this endpoint to complete the handshake necessary when implementing the [GitHub App Manifest flow](https://developer.github.com/apps/building-github-apps/creating-github-apps-from-a-manifest/). When you create a GitHub App with the manifest flow, you receive a temporary `code` used to retrieve the GitHub App's `id`, `pem` (private key), and `webhook_secret`.
+     */
+    createFromManifest: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsCreateFromManifestParams
+      ): Promise<Octokit.Response<Octokit.AppsCreateFromManifestResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates an installation access token that enables a GitHub App to make authenticated API requests for the app's installation on an organization or individual account. Installation tokens expire one hour from the time you create them. Using an expired token produces a status code of `401 - Unauthorized`, and requires creating a new installation token.
+     *
+     * By default the installation token has access to all repositories that the installation can access. To restrict the access to specific repositories, you can provide the `repository_ids` when creating the token. When you omit `repository_ids`, the response does not contain the `repositories` key.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     *
+     * This example grants the token "Read and write" permission to `issues` and "Read" permission to `contents`, and restricts the token's access to the repository with an `id` of 1296269.
+     */
+    createInstallationToken: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsCreateInstallationTokenParams
+      ): Promise<Octokit.Response<Octokit.AppsCreateInstallationTokenResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. You must also provide a valid OAuth `access_token` as an input parameter and the grant for the token's owner will be deleted.
+     *
+     * Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized).
+     */
+    deleteAuthorization: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsDeleteAuthorizationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Uninstalls a GitHub App on a user, organization, or business account.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     */
+    deleteInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsDeleteInstallationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password.
+     */
+    deleteToken: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsDeleteTokenParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables an authenticated GitHub App to find the organization's installation information.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     * @deprecated octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)
+     */
+    findOrgInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsFindOrgInstallationParams
+      ): Promise<Octokit.Response<Octokit.AppsFindOrgInstallationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables an authenticated GitHub App to find the repository's installation information. The installation's account type will be either an organization or a user account, depending which account the repository belongs to.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     * @deprecated octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)
+     */
+    findRepoInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsFindRepoInstallationParams
+      ): Promise<Octokit.Response<Octokit.AppsFindRepoInstallationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables an authenticated GitHub App to find the user’s installation information.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     * @deprecated octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)
+     */
+    findUserInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsFindUserInstallationParams
+      ): Promise<Octokit.Response<Octokit.AppsFindUserInstallationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns the GitHub App associated with the authentication credentials used. To see how many app installations are associated with this GitHub App, see the `installations_count` in the response. For more details about your app's installations, see the "[List installations](https://developer.github.com/v3/apps/#list-installations)" endpoint.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     */
+    getAuthenticated: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.AppsGetAuthenticatedResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: The `:app_slug` is just the URL-friendly name of your GitHub App. You can find this on the settings page for your GitHub App (e.g., `https://github.com/settings/apps/:app_slug`).
+     *
+     * If the GitHub App you specify is public, you can access this endpoint without authenticating. If the GitHub App you specify is private, you must authenticate with a [personal access token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) or an [installation access token](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint.
+     */
+    getBySlug: {
+      (params?: Octokit.RequestOptions & Octokit.AppsGetBySlugParams): Promise<
+        Octokit.Response<Octokit.AppsGetBySlugResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     */
+    getInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsGetInstallationParams
+      ): Promise<Octokit.Response<Octokit.AppsGetInstallationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables an authenticated GitHub App to find the organization's installation information.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     */
+    getOrgInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsGetOrgInstallationParams
+      ): Promise<Octokit.Response<Octokit.AppsGetOrgInstallationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables an authenticated GitHub App to find the repository's installation information. The installation's account type will be either an organization or a user account, depending which account the repository belongs to.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     */
+    getRepoInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsGetRepoInstallationParams
+      ): Promise<Octokit.Response<Octokit.AppsGetRepoInstallationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables an authenticated GitHub App to find the user’s installation information.
+     *
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     */
+    getUserInstallation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsGetUserInstallationParams
+      ): Promise<Octokit.Response<Octokit.AppsGetUserInstallationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns any accounts associated with a plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change.
+     *
+     * GitHub Apps must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://developer.github.com/v3/auth/#basic-authentication) with their client ID and client secret to access this endpoint.
+     */
+    listAccountsUserOrOrgOnPlan: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsListAccountsUserOrOrgOnPlanParams
+      ): Promise<
+        Octokit.Response<Octokit.AppsListAccountsUserOrOrgOnPlanResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns any accounts associated with a plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change.
+     *
+     * GitHub Apps must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://developer.github.com/v3/auth/#basic-authentication) with their client ID and client secret to access this endpoint.
+     */
+    listAccountsUserOrOrgOnPlanStubbed: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsListAccountsUserOrOrgOnPlanStubbedParams
+      ): Promise<
+        Octokit.Response<Octokit.AppsListAccountsUserOrOrgOnPlanStubbedResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List repositories that the authenticated user has explicit permission (`:read`, `:write`, or `:admin`) to access for an installation.
+     *
+     * The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership.
+     *
+     * You must use a [user-to-server OAuth access token](https://developer.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint.
+     *
+     * The access the user has to each repository is included in the hash under the `permissions` key.
+     */
+    listInstallationReposForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsListInstallationReposForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.AppsListInstallationReposForAuthenticatedUserResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.
+     *
+     * The permissions the installation has are included under the `permissions` key.
+     */
+    listInstallations: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsListInstallationsParams
+      ): Promise<Octokit.Response<Octokit.AppsListInstallationsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists installations of your GitHub App that the authenticated user has explicit permission (`:read`, `:write`, or `:admin`) to access.
+     *
+     * You must use a [user-to-server OAuth access token](https://developer.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint.
+     *
+     * The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership.
+     *
+     * You can find the permissions for the installation under the `permissions` key.
+     */
+    listInstallationsForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsListInstallationsForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.AppsListInstallationsForAuthenticatedUserResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns only active subscriptions. You must use a [user-to-server OAuth access token](https://developer.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/).
+     */
+    listMarketplacePurchasesForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsListMarketplacePurchasesForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.AppsListMarketplacePurchasesForAuthenticatedUserResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns only active subscriptions. You must use a [user-to-server OAuth access token](https://developer.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/).
+     */
+    listMarketplacePurchasesForAuthenticatedUserStubbed: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsListMarketplacePurchasesForAuthenticatedUserStubbedParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.AppsListMarketplacePurchasesForAuthenticatedUserStubbedResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * GitHub Apps must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://developer.github.com/v3/auth/#basic-authentication) with their client ID and client secret to access this endpoint.
+     */
+    listPlans: {
+      (params?: Octokit.RequestOptions & Octokit.AppsListPlansParams): Promise<
+        Octokit.Response<Octokit.AppsListPlansResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * GitHub Apps must use a [JWT](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://developer.github.com/v3/auth/#basic-authentication) with their client ID and client secret to access this endpoint.
+     */
+    listPlansStubbed: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsListPlansStubbedParams
+      ): Promise<Octokit.Response<Octokit.AppsListPlansStubbedResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List repositories that an installation can access.
+     *
+     * You must use an [installation access token](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint.
+     */
+    listRepos: {
+      (params?: Octokit.RequestOptions & Octokit.AppsListReposParams): Promise<
+        Octokit.Response<Octokit.AppsListReposResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Remove a single repository from an installation. The authenticated user must have admin access to the repository.
+     *
+     * You must use a personal access token (which you can create via the [command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) or the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization)) or [Basic Authentication](https://developer.github.com/v3/auth/#basic-authentication) to access this endpoint.
+     */
+    removeRepoFromInstallation: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsRemoveRepoFromInstallationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`.
+     * @deprecated octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization
+     */
+    resetAuthorization: {
+      (
+        params?: Octokit.RequestOptions & Octokit.AppsResetAuthorizationParams
+      ): Promise<Octokit.Response<Octokit.AppsResetAuthorizationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`.
+     */
+    resetToken: {
+      (params?: Octokit.RequestOptions & Octokit.AppsResetTokenParams): Promise<
+        Octokit.Response<Octokit.AppsResetTokenResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password.
+     * @deprecated octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application
+     */
+    revokeAuthorizationForApplication: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsRevokeAuthorizationForApplicationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. You must also provide a valid token as `:access_token` and the grant for the token's owner will be deleted.
+     *
+     * Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the Applications settings page under "Authorized OAuth Apps" on GitHub](https://github.com/settings/applications#authorized).
+     * @deprecated octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application
+     */
+    revokeGrantForApplication: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.AppsRevokeGrantForApplicationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  checks: {
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array.
+     *
+     * Creates a new check run for a specific commit in a repository. Your GitHub App must have the `checks:write` permission to create check runs.
+     */
+    create: {
+      (params?: Octokit.RequestOptions & Octokit.ChecksCreateParams): Promise<
+        Octokit.Response<Octokit.ChecksCreateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array and a `null` value for `head_branch`.
+     *
+     * By default, check suites are automatically created when you create a [check run](https://developer.github.com/v3/checks/runs/). You only need to use this endpoint for manually creating check suites when you've disabled automatic creation using "[Set preferences for check suites on a repository](https://developer.github.com/v3/checks/suites/#set-preferences-for-check-suites-on-a-repository)". Your GitHub App must have the `checks:write` permission to create check suites.
+     */
+    createSuite: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ChecksCreateSuiteParams
+      ): Promise<Octokit.Response<Octokit.ChecksCreateSuiteResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array.
+     *
+     * Gets a single check run using its `id`. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the `repo` scope to get check runs in a private repository.
+     */
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.ChecksGetParams): Promise<
+        Octokit.Response<Octokit.ChecksGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array and a `null` value for `head_branch`.
+     *
+     * Gets a single check suite using its `id`. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get check suites. OAuth Apps and authenticated users must have the `repo` scope to get check suites in a private repository.
+     */
+    getSuite: {
+      (params?: Octokit.RequestOptions & Octokit.ChecksGetSuiteParams): Promise<
+        Octokit.Response<Octokit.ChecksGetSuiteResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists annotations for a check run using the annotation `id`. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get annotations for a check run. OAuth Apps and authenticated users must have the `repo` scope to get annotations for a check run in a private repository.
+     */
+    listAnnotations: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ChecksListAnnotationsParams
+      ): Promise<Octokit.Response<Octokit.ChecksListAnnotationsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array.
+     *
+     * Lists check runs for a commit ref. The `ref` can be a SHA, branch name, or a tag name. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the `repo` scope to get check runs in a private repository.
+     */
+    listForRef: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ChecksListForRefParams
+      ): Promise<Octokit.Response<Octokit.ChecksListForRefResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array.
+     *
+     * Lists check runs for a check suite using its `id`. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the `repo` scope to get check runs in a private repository.
+     */
+    listForSuite: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ChecksListForSuiteParams
+      ): Promise<Octokit.Response<Octokit.ChecksListForSuiteResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array and a `null` value for `head_branch`.
+     *
+     * Lists check suites for a commit `ref`. The `ref` can be a SHA, branch name, or a tag name. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to list check suites. OAuth Apps and authenticated users must have the `repo` scope to get check suites in a private repository.
+     */
+    listSuitesForRef: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ChecksListSuitesForRefParams
+      ): Promise<Octokit.Response<Octokit.ChecksListSuitesForRefResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Triggers GitHub to rerequest an existing check suite, without pushing new code to a repository. This endpoint will trigger the [`check_suite` webhook](https://developer.github.com/v3/activity/events/types/#checksuiteevent) event with the action `rerequested`. When a check suite is `rerequested`, its `status` is reset to `queued` and the `conclusion` is cleared.
+     *
+     * To rerequest a check suite, your GitHub App must have the `checks:read` permission on a private repository or pull access to a public repository.
+     */
+    rerequestSuite: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ChecksRerequestSuiteParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Changes the default automatic flow when creating check suites. By default, the CheckSuiteEvent is automatically created each time code is pushed to a repository. When you disable the automatic creation of check suites, you can manually [Create a check suite](https://developer.github.com/v3/checks/suites/#create-a-check-suite). You must have admin permissions in the repository to set preferences for check suites.
+     */
+    setSuitesPreferences: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ChecksSetSuitesPreferencesParams
+      ): Promise<Octokit.Response<Octokit.ChecksSetSuitesPreferencesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array.
+     *
+     * Updates a check run for a specific commit in a repository. Your GitHub App must have the `checks:write` permission to edit check runs.
+     */
+    update: {
+      (params?: Octokit.RequestOptions & Octokit.ChecksUpdateParams): Promise<
+        Octokit.Response<Octokit.ChecksUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  codesOfConduct: {
+    getConductCode: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.CodesOfConductGetConductCodeParams
+      ): Promise<
+        Octokit.Response<Octokit.CodesOfConductGetConductCodeResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This method returns the contents of the repository's code of conduct file, if one is detected.
+     */
+    getForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.CodesOfConductGetForRepoParams
+      ): Promise<Octokit.Response<Octokit.CodesOfConductGetForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listConductCodes: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.CodesOfConductListConductCodesResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  emojis: {
+    /**
+     * Lists all the emojis available to use on GitHub.
+     */
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  gists: {
+    checkIsStarred: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsCheckIsStarredParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Allows you to add a new gist with one or more files.
+     *
+     * **Note:** Don't name your files "gistfile" with a numerical suffix. This is the format of the automatic naming scheme that Gist uses internally.
+     */
+    create: {
+      (params?: Octokit.RequestOptions & Octokit.GistsCreateParams): Promise<
+        Octokit.Response<Octokit.GistsCreateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    createComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsCreateCommentParams
+      ): Promise<Octokit.Response<Octokit.GistsCreateCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    delete: {
+      (params?: Octokit.RequestOptions & Octokit.GistsDeleteParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsDeleteCommentParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: This was previously `/gists/:gist_id/fork`.
+     */
+    fork: {
+      (params?: Octokit.RequestOptions & Octokit.GistsForkParams): Promise<
+        Octokit.Response<Octokit.GistsForkResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.GistsGetParams): Promise<
+        Octokit.Response<Octokit.GistsGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsGetCommentParams
+      ): Promise<Octokit.Response<Octokit.GistsGetCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getRevision: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsGetRevisionParams
+      ): Promise<Octokit.Response<Octokit.GistsGetRevisionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.GistsListParams): Promise<
+        Octokit.Response<Octokit.GistsListResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listComments: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsListCommentsParams
+      ): Promise<Octokit.Response<Octokit.GistsListCommentsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listCommits: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsListCommitsParams
+      ): Promise<Octokit.Response<Octokit.GistsListCommitsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listForks: {
+      (params?: Octokit.RequestOptions & Octokit.GistsListForksParams): Promise<
+        Octokit.Response<Octokit.GistsListForksResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all public gists sorted by most recently updated to least recently updated.
+     *
+     * Note: With [pagination](https://developer.github.com/v3/#pagination), you can fetch up to 3000 gists. For example, you can fetch 100 pages with 30 gists per page or 30 pages with 100 gists per page.
+     */
+    listPublic: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsListPublicParams
+      ): Promise<Octokit.Response<Octokit.GistsListPublicResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listPublicForUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsListPublicForUserParams
+      ): Promise<Octokit.Response<Octokit.GistsListPublicForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the authenticated user's starred gists:
+     */
+    listStarred: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsListStarredParams
+      ): Promise<Octokit.Response<Octokit.GistsListStarredResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     */
+    star: {
+      (params?: Octokit.RequestOptions & Octokit.GistsStarParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    unstar: {
+      (params?: Octokit.RequestOptions & Octokit.GistsUnstarParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Allows you to update or delete a gist file and rename gist files. Files from the previous version of the gist that aren't explicitly changed during an edit are unchanged.
+     */
+    update: {
+      (params?: Octokit.RequestOptions & Octokit.GistsUpdateParams): Promise<
+        Octokit.Response<Octokit.GistsUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GistsUpdateCommentParams
+      ): Promise<Octokit.Response<Octokit.GistsUpdateCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  git: {
+    createBlob: {
+      (params?: Octokit.RequestOptions & Octokit.GitCreateBlobParams): Promise<
+        Octokit.Response<Octokit.GitCreateBlobResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects).
+     *
+     * In this example, the payload of the signature would be:
+     *
+     *
+     *
+     * **Signature verification object**
+     *
+     * The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:
+     *
+     * These are the possible values for `reason` in the `verification` object:
+     *
+     * | Value                    | Description                                                                                                                       |
+     * | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
+     * | `expired_key`            | The key that made the signature is expired.                                                                                       |
+     * | `not_signing_key`        | The "signing" flag is not among the usage flags in the GPG key that made the signature.                                           |
+     * | `gpgverify_error`        | There was an error communicating with the signature verification service.                                                         |
+     * | `gpgverify_unavailable`  | The signature verification service is currently unavailable.                                                                      |
+     * | `unsigned`               | The object does not include a signature.                                                                                          |
+     * | `unknown_signature_type` | A non-PGP signature was found in the commit.                                                                                      |
+     * | `no_user`                | No user was associated with the `committer` email address in the commit.                                                          |
+     * | `unverified_email`       | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
+     * | `bad_email`              | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature.             |
+     * | `unknown_key`            | The key that made the signature has not been registered with any user's account.                                                  |
+     * | `malformed_signature`    | There was an error parsing the signature.                                                                                         |
+     * | `invalid`                | The signature could not be cryptographically verified using the key whose key-id was found in the signature.                      |
+     * | `valid`                  | None of the above errors applied, so the signature is considered to be verified.                                                  |
+     */
+    createCommit: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GitCreateCommitParams
+      ): Promise<Octokit.Response<Octokit.GitCreateCommitResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a reference for your repository. You are unable to create new references for empty repositories, even if the commit SHA-1 hash used exists. Empty repositories are repositories without branches.
+     */
+    createRef: {
+      (params?: Octokit.RequestOptions & Octokit.GitCreateRefParams): Promise<
+        Octokit.Response<Octokit.GitCreateRefResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then [create](https://developer.github.com/v3/git/refs/#create-a-reference) the `refs/tags/[tag]` reference. If you want to create a lightweight tag, you only have to [create](https://developer.github.com/v3/git/refs/#create-a-reference) the tag reference - this call would be unnecessary.
+     *
+     * **Signature verification object**
+     *
+     * The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:
+     *
+     * These are the possible values for `reason` in the `verification` object:
+     *
+     * | Value                    | Description                                                                                                                       |
+     * | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
+     * | `expired_key`            | The key that made the signature is expired.                                                                                       |
+     * | `not_signing_key`        | The "signing" flag is not among the usage flags in the GPG key that made the signature.                                           |
+     * | `gpgverify_error`        | There was an error communicating with the signature verification service.                                                         |
+     * | `gpgverify_unavailable`  | The signature verification service is currently unavailable.                                                                      |
+     * | `unsigned`               | The object does not include a signature.                                                                                          |
+     * | `unknown_signature_type` | A non-PGP signature was found in the commit.                                                                                      |
+     * | `no_user`                | No user was associated with the `committer` email address in the commit.                                                          |
+     * | `unverified_email`       | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
+     * | `bad_email`              | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature.             |
+     * | `unknown_key`            | The key that made the signature has not been registered with any user's account.                                                  |
+     * | `malformed_signature`    | There was an error parsing the signature.                                                                                         |
+     * | `invalid`                | The signature could not be cryptographically verified using the key whose key-id was found in the signature.                      |
+     * | `valid`                  | None of the above errors applied, so the signature is considered to be verified.                                                  |
+     */
+    createTag: {
+      (params?: Octokit.RequestOptions & Octokit.GitCreateTagParams): Promise<
+        Octokit.Response<Octokit.GitCreateTagResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The tree creation API accepts nested entries. If you specify both a tree and a nested path modifying that tree, this endpoint will overwrite the contents of the tree with the new path contents, and create a new tree structure.
+     *
+     * If you use this endpoint to add, delete, or modify the file contents in a tree, you will need to commit the tree and then update a branch to point to the commit. For more information see "[Create a commit](https://developer.github.com/v3/git/commits/#create-a-commit)" and "[Update a reference](https://developer.github.com/v3/git/refs/#update-a-reference)."
+     */
+    createTree: {
+      (params?: Octokit.RequestOptions & Octokit.GitCreateTreeParams): Promise<
+        Octokit.Response<Octokit.GitCreateTreeResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * ```
+     * DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a
+     * ```
+     *
+     * ```
+     * DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0
+     * ```
+     */
+    deleteRef: {
+      (params?: Octokit.RequestOptions & Octokit.GitDeleteRefParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The `content` in the response will always be Base64 encoded.
+     *
+     * _Note_: This API supports blobs up to 100 megabytes in size.
+     */
+    getBlob: {
+      (params?: Octokit.RequestOptions & Octokit.GitGetBlobParams): Promise<
+        Octokit.Response<Octokit.GitGetBlobResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Gets a Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects).
+     *
+     * **Signature verification object**
+     *
+     * The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:
+     *
+     * These are the possible values for `reason` in the `verification` object:
+     *
+     * | Value                    | Description                                                                                                                       |
+     * | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
+     * | `expired_key`            | The key that made the signature is expired.                                                                                       |
+     * | `not_signing_key`        | The "signing" flag is not among the usage flags in the GPG key that made the signature.                                           |
+     * | `gpgverify_error`        | There was an error communicating with the signature verification service.                                                         |
+     * | `gpgverify_unavailable`  | The signature verification service is currently unavailable.                                                                      |
+     * | `unsigned`               | The object does not include a signature.                                                                                          |
+     * | `unknown_signature_type` | A non-PGP signature was found in the commit.                                                                                      |
+     * | `no_user`                | No user was associated with the `committer` email address in the commit.                                                          |
+     * | `unverified_email`       | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
+     * | `bad_email`              | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature.             |
+     * | `unknown_key`            | The key that made the signature has not been registered with any user's account.                                                  |
+     * | `malformed_signature`    | There was an error parsing the signature.                                                                                         |
+     * | `invalid`                | The signature could not be cryptographically verified using the key whose key-id was found in the signature.                      |
+     * | `valid`                  | None of the above errors applied, so the signature is considered to be verified.                                                  |
+     */
+    getCommit: {
+      (params?: Octokit.RequestOptions & Octokit.GitGetCommitParams): Promise<
+        Octokit.Response<Octokit.GitGetCommitResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns a single reference from your Git database. The `:ref` in the URL must be formatted as `heads/<branch name>` for branches and `tags/<tag name>` for tags. If the `:ref` doesn't match an existing ref, a `404` is returned.
+     *
+     * **Note:** You need to explicitly [request a pull request](https://developer.github.com/v3/pulls/#get-a-single-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://developer.github.com/v3/git/#checking-mergeability-of-pull-requests)".
+     *
+     * To get the reference for a branch named `skunkworkz/featureA`, the endpoint route is:
+     */
+    getRef: {
+      (params?: Octokit.RequestOptions & Octokit.GitGetRefParams): Promise<
+        Octokit.Response<Octokit.GitGetRefResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Signature verification object**
+     *
+     * The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:
+     *
+     * These are the possible values for `reason` in the `verification` object:
+     *
+     * | Value                    | Description                                                                                                                       |
+     * | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
+     * | `expired_key`            | The key that made the signature is expired.                                                                                       |
+     * | `not_signing_key`        | The "signing" flag is not among the usage flags in the GPG key that made the signature.                                           |
+     * | `gpgverify_error`        | There was an error communicating with the signature verification service.                                                         |
+     * | `gpgverify_unavailable`  | The signature verification service is currently unavailable.                                                                      |
+     * | `unsigned`               | The object does not include a signature.                                                                                          |
+     * | `unknown_signature_type` | A non-PGP signature was found in the commit.                                                                                      |
+     * | `no_user`                | No user was associated with the `committer` email address in the commit.                                                          |
+     * | `unverified_email`       | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
+     * | `bad_email`              | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature.             |
+     * | `unknown_key`            | The key that made the signature has not been registered with any user's account.                                                  |
+     * | `malformed_signature`    | There was an error parsing the signature.                                                                                         |
+     * | `invalid`                | The signature could not be cryptographically verified using the key whose key-id was found in the signature.                      |
+     * | `valid`                  | None of the above errors applied, so the signature is considered to be verified.                                                  |
+     */
+    getTag: {
+      (params?: Octokit.RequestOptions & Octokit.GitGetTagParams): Promise<
+        Octokit.Response<Octokit.GitGetTagResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If `truncated` is `true`, the number of items in the `tree` array exceeded our maximum limit. If you need to fetch more items, you can clone the repository and iterate over the Git data locally.
+     */
+    getTree: {
+      (params?: Octokit.RequestOptions & Octokit.GitGetTreeParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns an array of references from your Git database that match the supplied name. The `:ref` in the URL must be formatted as `heads/<branch name>` for branches and `tags/<tag name>` for tags. If the `:ref` doesn't exist in the repository, but existing refs start with `:ref`, they will be returned as an array.
+     *
+     * When you use this endpoint without providing a `:ref`, it will return an array of all the references from your Git database, including notes and stashes if they exist on the server. Anything in the namespace is returned, not just `heads` and `tags`.
+     *
+     * **Note:** You need to explicitly [request a pull request](https://developer.github.com/v3/pulls/#get-a-single-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://developer.github.com/v3/git/#checking-mergeability-of-pull-requests)".
+     *
+     * If you request matching references for a branch named `feature` but the branch `feature` doesn't exist, the response can still include other matching head refs that start with the word `feature`, such as `featureA` and `featureB`.
+     */
+    listMatchingRefs: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GitListMatchingRefsParams
+      ): Promise<Octokit.Response<Octokit.GitListMatchingRefsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns an array of all the references from your Git database, including notes and stashes if they exist on the server. Anything in the namespace is returned, not just `heads` and `tags`. If there are no references to list, a `404` is returned.
+     */
+    listRefs: {
+      (params?: Octokit.RequestOptions & Octokit.GitListRefsParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateRef: {
+      (params?: Octokit.RequestOptions & Octokit.GitUpdateRefParams): Promise<
+        Octokit.Response<Octokit.GitUpdateRefResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  gitignore: {
+    /**
+     * The API also allows fetching the source of a single template.
+     *
+     * Use the raw [media type](https://developer.github.com/v3/media/) to get the raw contents.
+     */
+    getTemplate: {
+      (
+        params?: Octokit.RequestOptions & Octokit.GitignoreGetTemplateParams
+      ): Promise<Octokit.Response<Octokit.GitignoreGetTemplateResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all templates available to pass as an option when [creating a repository](https://developer.github.com/v3/repos/#create).
+     */
+    listTemplates: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.GitignoreListTemplatesResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  interactions: {
+    /**
+     * Temporarily restricts interactions to certain GitHub users in any public repository in the given organization. You must be an organization owner to set these restrictions.
+     */
+    addOrUpdateRestrictionsForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.InteractionsAddOrUpdateRestrictionsForOrgParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.InteractionsAddOrUpdateRestrictionsForOrgResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Temporarily restricts interactions to certain GitHub users within the given repository. You must have owner or admin access to set restrictions.
+     */
+    addOrUpdateRestrictionsForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.InteractionsAddOrUpdateRestrictionsForRepoParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.InteractionsAddOrUpdateRestrictionsForRepoResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Shows which group of GitHub users can interact with this organization and when the restriction expires. If there are no restrictions, you will see an empty response.
+     */
+    getRestrictionsForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.InteractionsGetRestrictionsForOrgParams
+      ): Promise<
+        Octokit.Response<Octokit.InteractionsGetRestrictionsForOrgResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Shows which group of GitHub users can interact with this repository and when the restriction expires. If there are no restrictions, you will see an empty response.
+     */
+    getRestrictionsForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.InteractionsGetRestrictionsForRepoParams
+      ): Promise<
+        Octokit.Response<Octokit.InteractionsGetRestrictionsForRepoResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes all interaction restrictions from public repositories in the given organization. You must be an organization owner to remove restrictions.
+     */
+    removeRestrictionsForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.InteractionsRemoveRestrictionsForOrgParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes all interaction restrictions from the given repository. You must have owner or admin access to remove restrictions.
+     */
+    removeRestrictionsForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.InteractionsRemoveRestrictionsForRepoParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  issues: {
+    /**
+     * Adds up to 10 assignees to an issue. Users already assigned to an issue are not replaced.
+     *
+     * This example adds two assignees to the existing `octocat` assignee.
+     */
+    addAssignees: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesAddAssigneesParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesAddAssigneesResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesAddAssigneesParams
+      ): Promise<Octokit.Response<Octokit.IssuesAddAssigneesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    addLabels: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesAddLabelsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesAddLabelsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesAddLabelsParams
+      ): Promise<Octokit.Response<Octokit.IssuesAddLabelsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Checks if a user has permission to be assigned to an issue in this repository.
+     *
+     * If the `assignee` can be assigned to issues in the repository, a `204` header with no content is returned.
+     *
+     * Otherwise a `404` status code is returned.
+     */
+    checkAssignee: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesCheckAssigneeParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Any user with pull access to a repository can create an issue. If [issues are disabled in the repository](https://help.github.com/articles/disabling-issues/), the API returns a `410 Gone` status.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    create: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesCreateParamsDeprecatedAssignee
+      ): Promise<Octokit.Response<Octokit.IssuesCreateResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.IssuesCreateParams): Promise<
+        Octokit.Response<Octokit.IssuesCreateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesCreateCommentParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesCreateCommentResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesCreateCommentParams
+      ): Promise<Octokit.Response<Octokit.IssuesCreateCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    createLabel: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesCreateLabelParams
+      ): Promise<Octokit.Response<Octokit.IssuesCreateLabelResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    createMilestone: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesCreateMilestoneParams
+      ): Promise<Octokit.Response<Octokit.IssuesCreateMilestoneResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesDeleteCommentParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteLabel: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesDeleteLabelParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteMilestone: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesDeleteMilestoneParamsDeprecatedNumber
+      ): Promise<Octokit.AnyResponse>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesDeleteMilestoneParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The API returns a [`301 Moved Permanently` status](https://developer.github.com/v3/#http-redirects) if the issue was [transferred](https://help.github.com/articles/transferring-an-issue-to-another-repository/) to another repository. If the issue was transferred to or deleted from a repository where the authenticated user lacks read access, the API returns a `404 Not Found` status. If the issue was deleted from a repository where the authenticated user has read access, the API returns a `410 Gone` status. To receive webhook events for transferred and deleted issues, subscribe to the [`issues`](https://developer.github.com/v3/activity/events/types/#issuesevent) webhook.
+     *
+     * **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key.
+     *
+     * Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests)" endpoint.
+     */
+    get: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesGetParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesGetResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.IssuesGetParams): Promise<
+        Octokit.Response<Octokit.IssuesGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesGetCommentParams
+      ): Promise<Octokit.Response<Octokit.IssuesGetCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getEvent: {
+      (params?: Octokit.RequestOptions & Octokit.IssuesGetEventParams): Promise<
+        Octokit.Response<Octokit.IssuesGetEventResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getLabel: {
+      (params?: Octokit.RequestOptions & Octokit.IssuesGetLabelParams): Promise<
+        Octokit.Response<Octokit.IssuesGetLabelResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getMilestone: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesGetMilestoneParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesGetMilestoneResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesGetMilestoneParams
+      ): Promise<Octokit.Response<Octokit.IssuesGetMilestoneResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key.
+     *
+     * Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests)" endpoint.
+     */
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.IssuesListParams): Promise<
+        Octokit.Response<Octokit.IssuesListResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the [available assignees](https://help.github.com/articles/assigning-issues-and-pull-requests-to-other-github-users/) for issues in a repository.
+     */
+    listAssignees: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListAssigneesParams
+      ): Promise<Octokit.Response<Octokit.IssuesListAssigneesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Issue Comments are ordered by ascending ID.
+     */
+    listComments: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListCommentsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesListCommentsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListCommentsParams
+      ): Promise<Octokit.Response<Octokit.IssuesListCommentsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * By default, Issue Comments are ordered by ascending ID.
+     */
+    listCommentsForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListCommentsForRepoParams
+      ): Promise<Octokit.Response<Octokit.IssuesListCommentsForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listEvents: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListEventsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesListEventsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListEventsParams
+      ): Promise<Octokit.Response<Octokit.IssuesListEventsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listEventsForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListEventsForRepoParams
+      ): Promise<Octokit.Response<Octokit.IssuesListEventsForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listEventsForTimeline: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListEventsForTimelineParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesListEventsForTimelineResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListEventsForTimelineParams
+      ): Promise<Octokit.Response<Octokit.IssuesListEventsForTimelineResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key.
+     *
+     * Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests)" endpoint.
+     */
+    listForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.IssuesListForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key.
+     *
+     * Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests)" endpoint.
+     */
+    listForOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListForOrgParams
+      ): Promise<Octokit.Response<Octokit.IssuesListForOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key.
+     *
+     * Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests)" endpoint.
+     */
+    listForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListForRepoParams
+      ): Promise<Octokit.Response<Octokit.IssuesListForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listLabelsForMilestone: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListLabelsForMilestoneParamsDeprecatedNumber
+      ): Promise<
+        Octokit.Response<Octokit.IssuesListLabelsForMilestoneResponse>
+      >;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListLabelsForMilestoneParams
+      ): Promise<
+        Octokit.Response<Octokit.IssuesListLabelsForMilestoneResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listLabelsForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListLabelsForRepoParams
+      ): Promise<Octokit.Response<Octokit.IssuesListLabelsForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listLabelsOnIssue: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListLabelsOnIssueParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesListLabelsOnIssueResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesListLabelsOnIssueParams
+      ): Promise<Octokit.Response<Octokit.IssuesListLabelsOnIssueResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listMilestonesForRepo: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesListMilestonesForRepoParams
+      ): Promise<Octokit.Response<Octokit.IssuesListMilestonesForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with push access can lock an issue or pull request's conversation.
+     *
+     * Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     */
+    lock: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesLockParamsDeprecatedNumber
+      ): Promise<Octokit.AnyResponse>;
+      (params?: Octokit.RequestOptions & Octokit.IssuesLockParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes one or more assignees from an issue.
+     *
+     * This example removes two of three assignees, leaving the `octocat` assignee.
+     */
+    removeAssignees: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesRemoveAssigneesParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesRemoveAssigneesResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesRemoveAssigneesParams
+      ): Promise<Octokit.Response<Octokit.IssuesRemoveAssigneesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes the specified label from the issue, and returns the remaining labels on the issue. This endpoint returns a `404 Not Found` status if the label does not exist.
+     */
+    removeLabel: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesRemoveLabelParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesRemoveLabelResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesRemoveLabelParams
+      ): Promise<Octokit.Response<Octokit.IssuesRemoveLabelResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    removeLabels: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesRemoveLabelsParamsDeprecatedNumber
+      ): Promise<Octokit.AnyResponse>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesRemoveLabelsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    replaceLabels: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesReplaceLabelsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesReplaceLabelsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesReplaceLabelsParams
+      ): Promise<Octokit.Response<Octokit.IssuesReplaceLabelsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with push access can unlock an issue's conversation.
+     */
+    unlock: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesUnlockParamsDeprecatedNumber
+      ): Promise<Octokit.AnyResponse>;
+      (params?: Octokit.RequestOptions & Octokit.IssuesUnlockParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Issue owners and users with push access can edit an issue.
+     */
+    update: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesUpdateParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesUpdateResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesUpdateParamsDeprecatedAssignee
+      ): Promise<Octokit.Response<Octokit.IssuesUpdateResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.IssuesUpdateParams): Promise<
+        Octokit.Response<Octokit.IssuesUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesUpdateCommentParams
+      ): Promise<Octokit.Response<Octokit.IssuesUpdateCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateLabel: {
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesUpdateLabelParams
+      ): Promise<Octokit.Response<Octokit.IssuesUpdateLabelResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateMilestone: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.IssuesUpdateMilestoneParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.IssuesUpdateMilestoneResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.IssuesUpdateMilestoneParams
+      ): Promise<Octokit.Response<Octokit.IssuesUpdateMilestoneResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  licenses: {
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.LicensesGetParams): Promise<
+        Octokit.Response<Octokit.LicensesGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This method returns the contents of the repository's license file, if one is detected.
+     *
+     * Similar to [the repository contents API](https://developer.github.com/v3/repos/contents/#get-contents), this method also supports [custom media types](https://developer.github.com/v3/repos/contents/#custom-media-types) for retrieving the raw license content or rendered license HTML.
+     */
+    getForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.LicensesGetForRepoParams
+      ): Promise<Octokit.Response<Octokit.LicensesGetForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * @deprecated octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)
+     */
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.LicensesListResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listCommonlyUsed: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.LicensesListCommonlyUsedResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  markdown: {
+    render: {
+      (params?: Octokit.RequestOptions & Octokit.MarkdownRenderParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You must send Markdown as plain text (using a `Content-Type` header of `text/plain` or `text/x-markdown`) to this endpoint, rather than using JSON format. In raw mode, [GitHub Flavored Markdown](https://github.github.com/gfm/) is not supported and Markdown will be rendered in plain format like a README.md file. Markdown content must be 400 KB or less.
+     */
+    renderRaw: {
+      (
+        params?: Octokit.RequestOptions & Octokit.MarkdownRenderRawParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  meta: {
+    /**
+     * This endpoint provides a list of GitHub's IP addresses. For more information, see "[About GitHub's IP addresses](https://help.github.com/articles/about-github-s-ip-addresses/)."
+     */
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.MetaGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  migrations: {
+    /**
+     * Stop an import for a repository.
+     */
+    cancelImport: {
+      (
+        params?: Octokit.RequestOptions & Octokit.MigrationsCancelImportParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deletes a previous migration archive. Downloadable migration archives are automatically deleted after seven days. Migration metadata, which is returned in the [Get a list of user migrations](https://developer.github.com/v3/migrations/users/#get-a-list-of-user-migrations) and [Get the status of a user migration](https://developer.github.com/v3/migrations/users/#get-the-status-of-a-user-migration) endpoints, will continue to be available even after an archive is deleted.
+     */
+    deleteArchiveForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsDeleteArchiveForAuthenticatedUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deletes a previous migration archive. Migration archives are automatically deleted after seven days.
+     */
+    deleteArchiveForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsDeleteArchiveForOrgParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Fetches the URL to download the migration archive as a `tar.gz` file. Depending on the resources your repository uses, the migration archive can contain JSON files with data for these objects:
+     *
+     * *   attachments
+     * *   bases
+     * *   commit\_comments
+     * *   issue\_comments
+     * *   issue\_events
+     * *   issues
+     * *   milestones
+     * *   organizations
+     * *   projects
+     * *   protected\_branches
+     * *   pull\_request\_reviews
+     * *   pull\_requests
+     * *   releases
+     * *   repositories
+     * *   review\_comments
+     * *   schema
+     * *   users
+     *
+     * The archive will also contain an `attachments` directory that includes all attachment files uploaded to GitHub.com and a `repositories` directory that contains the repository's Git data.
+     */
+    getArchiveForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsGetArchiveForAuthenticatedUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Fetches the URL to a migration archive.
+     */
+    getArchiveForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsGetArchiveForOrgParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Each type of source control system represents authors in a different way. For example, a Git commit author has a display name and an email address, but a Subversion commit author just has a username. The GitHub Importer will make the author information valid, but the author might not be correct. For example, it will change the bare Subversion username `hubot` into something like `hubot <hubot@12341234-abab-fefe-8787-fedcba987654>`.
+     *
+     * This API method and the "Map a commit author" method allow you to provide correct Git author information.
+     */
+    getCommitAuthors: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsGetCommitAuthorsParams
+      ): Promise<Octokit.Response<Octokit.MigrationsGetCommitAuthorsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * View the progress of an import.
+     *
+     * **Import status**
+     *
+     * This section includes details about the possible values of the `status` field of the Import Progress response.
+     *
+     * An import that does not have errors will progress through these steps:
+     *
+     * *   `detecting` - the "detection" step of the import is in progress because the request did not include a `vcs` parameter. The import is identifying the type of source control present at the URL.
+     * *   `importing` - the "raw" step of the import is in progress. This is where commit data is fetched from the original repository. The import progress response will include `commit_count` (the total number of raw commits that will be imported) and `percent` (0 - 100, the current progress through the import).
+     * *   `mapping` - the "rewrite" step of the import is in progress. This is where SVN branches are converted to Git branches, and where author updates are applied. The import progress response does not include progress information.
+     * *   `pushing` - the "push" step of the import is in progress. This is where the importer updates the repository on GitHub. The import progress response will include `push_percent`, which is the percent value reported by `git push` when it is "Writing objects".
+     * *   `complete` - the import is complete, and the repository is ready on GitHub.
+     *
+     * If there are problems, you will see one of these in the `status` field:
+     *
+     * *   `auth_failed` - the import requires authentication in order to connect to the original repository. To update authentication for the import, please see the [Update Existing Import](https://developer.github.com/v3/migrations/source_imports/#update-existing-import) section.
+     * *   `error` - the import encountered an error. The import progress response will include the `failed_step` and an error message. Contact [GitHub Support](https://github.com/contact) for more information.
+     * *   `detection_needs_auth` - the importer requires authentication for the originating repository to continue detection. To update authentication for the import, please see the [Update Existing Import](https://developer.github.com/v3/migrations/source_imports/#update-existing-import) section.
+     * *   `detection_found_nothing` - the importer didn't recognize any source control at the URL. To resolve, [Cancel the import](https://developer.github.com/v3/migrations/source_imports/#cancel-an-import) and [retry](https://developer.github.com/v3/migrations/source_imports/#start-an-import) with the correct URL.
+     * *   `detection_found_multiple` - the importer found several projects or repositories at the provided URL. When this is the case, the Import Progress response will also include a `project_choices` field with the possible project choices as values. To update project choice, please see the [Update Existing Import](https://developer.github.com/v3/migrations/source_imports/#update-existing-import) section.
+     *
+     * **The project_choices field**
+     *
+     * When multiple projects are found at the provided URL, the response hash will include a `project_choices` field, the value of which is an array of hashes each representing a project choice. The exact key/value pairs of the project hashes will differ depending on the version control type.
+     *
+     * **Git LFS related fields**
+     *
+     * This section includes details about Git LFS related fields that may be present in the Import Progress response.
+     *
+     * *   `use_lfs` - describes whether the import has been opted in or out of using Git LFS. The value can be `opt_in`, `opt_out`, or `undecided` if no action has been taken.
+     * *   `has_large_files` - the boolean value describing whether files larger than 100MB were found during the `importing` step.
+     * *   `large_files_size` - the total size in gigabytes of files larger than 100MB found in the originating repository.
+     * *   `large_files_count` - the total number of files larger than 100MB found in the originating repository. To see a list of these files, make a "Get Large Files" request.
+     */
+    getImportProgress: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsGetImportProgressParams
+      ): Promise<Octokit.Response<Octokit.MigrationsGetImportProgressResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List files larger than 100MB found during the import
+     */
+    getLargeFiles: {
+      (
+        params?: Octokit.RequestOptions & Octokit.MigrationsGetLargeFilesParams
+      ): Promise<Octokit.Response<Octokit.MigrationsGetLargeFilesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Fetches a single user migration. The response includes the `state` of the migration, which can be one of the following values:
+     *
+     * *   `pending` - the migration hasn't started yet.
+     * *   `exporting` - the migration is in progress.
+     * *   `exported` - the migration finished successfully.
+     * *   `failed` - the migration failed.
+     *
+     * Once the migration has been `exported` you can [download the migration archive](https://developer.github.com/v3/migrations/users/#download-a-user-migration-archive).
+     */
+    getStatusForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsGetStatusForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.MigrationsGetStatusForAuthenticatedUserResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Fetches the status of a migration.
+     *
+     * The `state` of a migration can be one of the following values:
+     *
+     * *   `pending`, which means the migration hasn't started yet.
+     * *   `exporting`, which means the migration is in progress.
+     * *   `exported`, which means the migration finished successfully.
+     * *   `failed`, which means the migration failed.
+     */
+    getStatusForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsGetStatusForOrgParams
+      ): Promise<Octokit.Response<Octokit.MigrationsGetStatusForOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists all migrations a user has started.
+     */
+    listForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsListForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.MigrationsListForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the most recent migrations.
+     */
+    listForOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.MigrationsListForOrgParams
+      ): Promise<Octokit.Response<Octokit.MigrationsListForOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Update an author's identity for the import. Your application can continue updating authors any time before you push new commits to the repository.
+     */
+    mapCommitAuthor: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsMapCommitAuthorParams
+      ): Promise<Octokit.Response<Octokit.MigrationsMapCommitAuthorResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You can import repositories from Subversion, Mercurial, and TFS that include files larger than 100MB. This ability is powered by [Git LFS](https://git-lfs.github.com). You can learn more about our LFS feature and working with large files [on our help site](https://help.github.com/articles/versioning-large-files/).
+     */
+    setLfsPreference: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsSetLfsPreferenceParams
+      ): Promise<Octokit.Response<Octokit.MigrationsSetLfsPreferenceResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Initiates the generation of a user migration archive.
+     */
+    startForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsStartForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.MigrationsStartForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Initiates the generation of a migration archive.
+     */
+    startForOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.MigrationsStartForOrgParams
+      ): Promise<Octokit.Response<Octokit.MigrationsStartForOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Start a source import to a GitHub repository using GitHub Importer.
+     */
+    startImport: {
+      (
+        params?: Octokit.RequestOptions & Octokit.MigrationsStartImportParams
+      ): Promise<Octokit.Response<Octokit.MigrationsStartImportResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Unlocks a repository. You can lock repositories when you [start a user migration](https://developer.github.com/v3/migrations/users/#start-a-user-migration). Once the migration is complete you can unlock each repository to begin using it again or [delete the repository](https://developer.github.com/v3/repos/#delete-a-repository) if you no longer need the source data. Returns a status of `404 Not Found` if the repository is not locked.
+     */
+    unlockRepoForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsUnlockRepoForAuthenticatedUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Unlocks a repository that was locked for migration. You should unlock each migrated repository and [delete them](https://developer.github.com/v3/repos/#delete-a-repository) when the migration is complete and you no longer need the source data.
+     */
+    unlockRepoForOrg: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.MigrationsUnlockRepoForOrgParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * An import can be updated with credentials or a project choice by passing in the appropriate parameters in this API request. If no parameters are provided, the import will be restarted.
+     *
+     * Some servers (e.g. TFS servers) can have several projects at a single URL. In those cases the import progress will have the status `detection_found_multiple` and the Import Progress response will include a `project_choices` array. You can select the project to import by providing one of the objects in the `project_choices` array in the update request.
+     *
+     * The following example demonstrates the workflow for updating an import with "project1" as the project choice. Given a `project_choices` array like such:
+     *
+     * To restart an import, no parameters are provided in the update request.
+     */
+    updateImport: {
+      (
+        params?: Octokit.RequestOptions & Octokit.MigrationsUpdateImportParams
+      ): Promise<Octokit.Response<Octokit.MigrationsUpdateImportResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  oauthAuthorizations: {
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`.
+     * @deprecated octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization
+     */
+    checkAuthorization: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsCheckAuthorizationParams
+      ): Promise<
+        Octokit.Response<Octokit.OauthAuthorizationsCheckAuthorizationResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * **Warning:** Apps must use the [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * Creates OAuth tokens using [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://developer.github.com/v3/auth/#working-with-two-factor-authentication)."
+     *
+     * To create tokens for a particular OAuth application using this endpoint, you must authenticate as the user you want to create an authorization for and provide the app's client ID and secret, found on your OAuth application's settings page. If your OAuth application intends to create multiple tokens for one user, use `fingerprint` to differentiate between them.
+     *
+     * You can also create tokens on GitHub from the [personal access tokens settings](https://github.com/settings/tokens) page. Read more about these tokens in [the GitHub Help documentation](https://help.github.com/articles/creating-an-access-token-for-command-line-use).
+     *
+     * Organizations that enforce SAML SSO require personal access tokens to be whitelisted. Read more about whitelisting tokens in [the GitHub Help documentation](https://help.github.com/articles/about-identity-and-access-management-with-saml-single-sign-on).
+     * @deprecated octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization
+     */
+    createAuthorization: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsCreateAuthorizationParams
+      ): Promise<
+        Octokit.Response<Octokit.OauthAuthorizationsCreateAuthorizationResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     * @deprecated octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization
+     */
+    deleteAuthorization: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsDeleteAuthorizationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for your user. Once deleted, the application has no access to your account and is no longer listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized).
+     * @deprecated octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant
+     */
+    deleteGrant: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsDeleteGrantParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     * @deprecated octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization
+     */
+    getAuthorization: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsGetAuthorizationParams
+      ): Promise<
+        Octokit.Response<Octokit.OauthAuthorizationsGetAuthorizationResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     * @deprecated octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant
+     */
+    getGrant: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsGetGrantParams
+      ): Promise<Octokit.Response<Octokit.OauthAuthorizationsGetGrantResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * **Warning:** Apps must use the [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * Creates a new authorization for the specified OAuth application, only if an authorization for that application doesn't already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one.
+     *
+     * If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://developer.github.com/v3/auth/#working-with-two-factor-authentication)."
+     *
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     * @deprecated octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app
+     */
+    getOrCreateAuthorizationForApp: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsGetOrCreateAuthorizationForAppParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.OauthAuthorizationsGetOrCreateAuthorizationForAppResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * **Warning:** Apps must use the [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * This method will create a new authorization for the specified OAuth application, only if an authorization for that application and fingerprint do not already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. `fingerprint` is a unique string to distinguish an authorization from others created for the same client ID and user. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one.
+     *
+     * If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://developer.github.com/v3/auth/#working-with-two-factor-authentication)."
+     * @deprecated octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint
+     */
+    getOrCreateAuthorizationForAppAndFingerprint: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * **Warning:** Apps must use the [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * This method will create a new authorization for the specified OAuth application, only if an authorization for that application and fingerprint do not already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. `fingerprint` is a unique string to distinguish an authorization from others created for the same client ID and user. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one.
+     *
+     * If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://developer.github.com/v3/auth/#working-with-two-factor-authentication)."
+     * @deprecated octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint
+     */
+    getOrCreateAuthorizationForAppFingerprint: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     * @deprecated octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations
+     */
+    listAuthorizations: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsListAuthorizationsParams
+      ): Promise<
+        Octokit.Response<Octokit.OauthAuthorizationsListAuthorizationsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * You can use this API to list the set of OAuth applications that have been granted access to your account. Unlike the [list your authorizations](https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations) API, this API does not manage individual tokens. This API will return one entry for each OAuth application that has been granted access to your account, regardless of the number of tokens an application has generated for your user. The list of OAuth applications returned matches what is shown on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). The `scopes` returned are the union of scopes authorized for the application. For example, if an application has one token with `repo` scope and another token with `user` scope, the grant will return `["repo", "user"]`.
+     * @deprecated octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants
+     */
+    listGrants: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsListGrantsParams
+      ): Promise<
+        Octokit.Response<Octokit.OauthAuthorizationsListGrantsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`.
+     * @deprecated octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization
+     */
+    resetAuthorization: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsResetAuthorizationParams
+      ): Promise<
+        Octokit.Response<Octokit.OauthAuthorizationsResetAuthorizationResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password.
+     * @deprecated octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application
+     */
+    revokeAuthorizationForApplication: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsRevokeAuthorizationForApplicationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will replace and discontinue OAuth endpoints containing `access_token` in the path parameter. We are introducing new endpoints that allow you to securely manage tokens for OAuth Apps by using `access_token` as an input parameter. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://developer.github.com/v3/auth#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. You must also provide a valid token as `:access_token` and the grant for the token's owner will be deleted.
+     *
+     * Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the Applications settings page under "Authorized OAuth Apps" on GitHub](https://github.com/settings/applications#authorized).
+     * @deprecated octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application
+     */
+    revokeGrantForApplication: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsRevokeGrantForApplicationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://developer.github.com/v3/oauth_authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api).
+     *
+     * If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://developer.github.com/v3/auth/#working-with-two-factor-authentication)."
+     *
+     * You can only send one of these scope keys at a time.
+     * @deprecated octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization
+     */
+    updateAuthorization: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OauthAuthorizationsUpdateAuthorizationParams
+      ): Promise<
+        Octokit.Response<Octokit.OauthAuthorizationsUpdateAuthorizationResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  orgs: {
+    /**
+     * Only authenticated organization owners can add a member to the organization or update the member's role.
+     *
+     * *   If the authenticated user is _adding_ a member to the organization, the invited user will receive an email inviting them to the organization. The user's [membership status](https://developer.github.com/v3/orgs/members/#get-organization-membership) will be `pending` until they accept the invitation.
+     *
+     * *   Authenticated users can _update_ a user's membership by passing the `role` parameter. If the authenticated user changes a member's role to `admin`, the affected user will receive an email notifying them that they've been made an organization owner. If the authenticated user changes an owner's role to `member`, no email will be sent.
+     *
+     * **Rate limits**
+     *
+     * To prevent abuse, the authenticated user is limited to 50 organization invitations per 24 hour period. If the organization is more than one month old or on a paid plan, the limit is 500 invitations per 24 hour period.
+     */
+    addOrUpdateMembership: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsAddOrUpdateMembershipParams
+      ): Promise<Octokit.Response<Octokit.OrgsAddOrUpdateMembershipResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    blockUser: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsBlockUserParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If the user is blocked:
+     *
+     * If the user is not blocked:
+     */
+    checkBlockedUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsCheckBlockedUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Check if a user is, publicly or privately, a member of the organization.
+     */
+    checkMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsCheckMembershipParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    checkPublicMembership: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsCheckPublicMembershipParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    concealMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsConcealMembershipParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * When an organization member is converted to an outside collaborator, they'll only have access to the repositories that their current team membership allows. The user will no longer be a member of the organization. For more information, see "[Converting an organization member to an outside collaborator](https://help.github.com/articles/converting-an-organization-member-to-an-outside-collaborator/)".
+     */
+    convertMemberToOutsideCollaborator: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsConvertMemberToOutsideCollaboratorParams
+      ): Promise<
+        Octokit.Response<Octokit.OrgsConvertMemberToOutsideCollaboratorResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Here's how you can create a hook that posts payloads in JSON format:
+     */
+    createHook: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsCreateHookParams): Promise<
+        Octokit.Response<Octokit.OrgsCreateHookResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Invite people to an organization by using their GitHub user ID or their email address. In order to create invitations in an organization, the authenticated user must be an organization owner.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createInvitation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsCreateInvitationParams
+      ): Promise<Octokit.Response<Octokit.OrgsCreateInvitationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteHook: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsDeleteHookParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * To see many of the organization response values, you need to be an authenticated organization owner with the `admin:org` scope. When the value of `two_factor_requirement_enabled` is `true`, the organization requires all members, billing managers, and outside collaborators to enable [two-factor authentication](https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/).
+     *
+     * GitHub Apps with the `Organization plan` permission can use this endpoint to retrieve information about an organization's GitHub plan. See "[Authenticating with GitHub Apps](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/)" for details. For an example response, see "[Response with GitHub plan information](https://developer.github.com/v3/orgs/#response-with-github-plan-information)."
+     */
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsGetParams): Promise<
+        Octokit.Response<Octokit.OrgsGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getHook: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsGetHookParams): Promise<
+        Octokit.Response<Octokit.OrgsGetHookResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * In order to get a user's membership with an organization, the authenticated user must be an organization member.
+     */
+    getMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsGetMembershipParams
+      ): Promise<Octokit.Response<Octokit.OrgsGetMembershipResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getMembershipForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsGetMembershipForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.OrgsGetMembershipForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists all organizations, in the order that they were created on GitHub.
+     *
+     * **Note:** Pagination is powered exclusively by the `since` parameter. Use the [Link header](https://developer.github.com/v3/#link-header) to get the URL for the next page of organizations.
+     */
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsListParams): Promise<
+        Octokit.Response<Octokit.OrgsListResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the users blocked by an organization.
+     */
+    listBlockedUsers: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsListBlockedUsersParams
+      ): Promise<Octokit.Response<Octokit.OrgsListBlockedUsersResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List organizations for the authenticated user.
+     *
+     * **OAuth scope requirements**
+     *
+     * This only lists organizations that your authorization allows you to operate on in some way (e.g., you can list teams with `read:org` scope, you can publicize your organization membership with `user` scope, etc.). Therefore, this API requires at least `user` or `read:org` scope. OAuth requests with insufficient scope receive a `403 Forbidden` response.
+     */
+    listForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsListForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.OrgsListForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List [public organization memberships](https://help.github.com/articles/publicizing-or-concealing-organization-membership) for the specified user.
+     *
+     * This method only lists _public_ memberships, regardless of authentication. If you need to fetch all of the organization memberships (public and private) for the authenticated user, use the [List your organizations](https://developer.github.com/v3/orgs/#list-your-organizations) API instead.
+     */
+    listForUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsListForUserParams
+      ): Promise<Octokit.Response<Octokit.OrgsListForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listHooks: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsListHooksParams): Promise<
+        Octokit.Response<Octokit.OrgsListHooksResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists all GitHub Apps in an organization. The installation count includes all GitHub Apps installed on repositories in the organization. You must be an organization owner with `admin:read` scope to use this endpoint.
+     */
+    listInstallations: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsListInstallationsParams
+      ): Promise<Octokit.Response<Octokit.OrgsListInstallationsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all teams associated with an invitation. In order to see invitations in an organization, the authenticated user must be an organization owner.
+     */
+    listInvitationTeams: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsListInvitationTeamsParams
+      ): Promise<Octokit.Response<Octokit.OrgsListInvitationTeamsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all users who are members of an organization. If the authenticated user is also a member of this organization then both concealed and public members will be returned.
+     */
+    listMembers: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsListMembersParams
+      ): Promise<Octokit.Response<Octokit.OrgsListMembersResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listMemberships: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsListMembershipsParams
+      ): Promise<Octokit.Response<Octokit.OrgsListMembershipsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all users who are outside collaborators of an organization.
+     */
+    listOutsideCollaborators: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsListOutsideCollaboratorsParams
+      ): Promise<
+        Octokit.Response<Octokit.OrgsListOutsideCollaboratorsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The return hash contains a `role` field which refers to the Organization Invitation role and will be one of the following values: `direct_member`, `admin`, `billing_manager`, `hiring_manager`, or `reinstate`. If the invitee is not a GitHub member, the `login` field in the return hash will be `null`.
+     */
+    listPendingInvitations: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsListPendingInvitationsParams
+      ): Promise<Octokit.Response<Octokit.OrgsListPendingInvitationsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Members of an organization can choose to have their membership publicized or not.
+     */
+    listPublicMembers: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsListPublicMembersParams
+      ): Promise<Octokit.Response<Octokit.OrgsListPublicMembersResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This will trigger a [ping event](https://developer.github.com/webhooks/#ping-event) to be sent to the hook.
+     */
+    pingHook: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsPingHookParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The user can publicize their own membership. (A user cannot publicize the membership for another user.)
+     *
+     * Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     */
+    publicizeMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsPublicizeMembershipParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories.
+     */
+    removeMember: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsRemoveMemberParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * In order to remove a user's membership with an organization, the authenticated user must be an organization owner.
+     *
+     * If the specified user is an active member of the organization, this will remove them from the organization. If the specified user has been invited to the organization, this will cancel their invitation. The specified user will receive an email notification in both cases.
+     */
+    removeMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsRemoveMembershipParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removing a user from this list will remove them from all the organization's repositories.
+     */
+    removeOutsideCollaborator: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.OrgsRemoveOutsideCollaboratorParams
+      ): Promise<
+        Octokit.Response<Octokit.OrgsRemoveOutsideCollaboratorResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    unblockUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsUnblockUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The new `members_allowed_repository_creation_type` replaces the functionality of `members_can_create_repositories`.
+     *
+     * Setting `members_allowed_repository_creation_type` will override the value of `members_can_create_repositories` in the following ways:
+     *
+     * *   Setting `members_allowed_repository_creation_type` to `all` or `private` sets `members_can_create_repositories` to `true`.
+     * *   Setting `members_allowed_repository_creation_type` to `none` sets `members_can_create_repositories` to `false`.
+     * *   If you omit `members_allowed_repository_creation_type`, `members_can_create_repositories` is not modified.
+     */
+    update: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsUpdateParams): Promise<
+        Octokit.Response<Octokit.OrgsUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateHook: {
+      (params?: Octokit.RequestOptions & Octokit.OrgsUpdateHookParams): Promise<
+        Octokit.Response<Octokit.OrgsUpdateHookResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.OrgsUpdateMembershipParams
+      ): Promise<Octokit.Response<Octokit.OrgsUpdateMembershipResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  projects: {
+    /**
+     * Adds a collaborator to a an organization project and sets their permission level. You must be an organization owner or a project `admin` to add a collaborator.
+     */
+    addCollaborator: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsAddCollaboratorParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key.
+     *
+     * Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests)" endpoint.
+     */
+    createCard: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsCreateCardParams
+      ): Promise<Octokit.Response<Octokit.ProjectsCreateCardResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    createColumn: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsCreateColumnParams
+      ): Promise<Octokit.Response<Octokit.ProjectsCreateColumnResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    createForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ProjectsCreateForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.ProjectsCreateForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates an organization project board. Returns a `404 Not Found` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
+     */
+    createForOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsCreateForOrgParams
+      ): Promise<Octokit.Response<Octokit.ProjectsCreateForOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a repository project board. Returns a `404 Not Found` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
+     */
+    createForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsCreateForRepoParams
+      ): Promise<Octokit.Response<Octokit.ProjectsCreateForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deletes a project board. Returns a `404 Not Found` status if projects are disabled.
+     */
+    delete: {
+      (params?: Octokit.RequestOptions & Octokit.ProjectsDeleteParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteCard: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsDeleteCardParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteColumn: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsDeleteColumnParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Gets a project by its `id`. Returns a `404 Not Found` status if projects are disabled. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
+     */
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.ProjectsGetParams): Promise<
+        Octokit.Response<Octokit.ProjectsGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getCard: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsGetCardParams
+      ): Promise<Octokit.Response<Octokit.ProjectsGetCardResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getColumn: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsGetColumnParams
+      ): Promise<Octokit.Response<Octokit.ProjectsGetColumnResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listCards: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsListCardsParams
+      ): Promise<Octokit.Response<Octokit.ProjectsListCardsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the collaborators for an organization project. For a project, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. You must be an organization owner or a project `admin` to list collaborators.
+     */
+    listCollaborators: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ProjectsListCollaboratorsParams
+      ): Promise<Octokit.Response<Octokit.ProjectsListCollaboratorsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listColumns: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsListColumnsParams
+      ): Promise<Octokit.Response<Octokit.ProjectsListColumnsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the projects in an organization. Returns a `404 Not Found` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
+     *
+     * s
+     */
+    listForOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsListForOrgParams
+      ): Promise<Octokit.Response<Octokit.ProjectsListForOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the projects in a repository. Returns a `404 Not Found` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
+     */
+    listForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsListForRepoParams
+      ): Promise<Octokit.Response<Octokit.ProjectsListForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listForUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsListForUserParams
+      ): Promise<Octokit.Response<Octokit.ProjectsListForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    moveCard: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsMoveCardParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    moveColumn: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsMoveColumnParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes a collaborator from an organization project. You must be an organization owner or a project `admin` to remove a collaborator.
+     */
+    removeCollaborator: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ProjectsRemoveCollaboratorParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns the collaborator's permission level for an organization project. Possible values for the `permission` key: `admin`, `write`, `read`, `none`. You must be an organization owner or a project `admin` to review a user's permission level.
+     */
+    reviewUserPermissionLevel: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ProjectsReviewUserPermissionLevelParams
+      ): Promise<
+        Octokit.Response<Octokit.ProjectsReviewUserPermissionLevelResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Updates a project board's information. Returns a `404 Not Found` status if projects are disabled. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
+     */
+    update: {
+      (params?: Octokit.RequestOptions & Octokit.ProjectsUpdateParams): Promise<
+        Octokit.Response<Octokit.ProjectsUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateCard: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsUpdateCardParams
+      ): Promise<Octokit.Response<Octokit.ProjectsUpdateCardResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateColumn: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ProjectsUpdateColumnParams
+      ): Promise<Octokit.Response<Octokit.ProjectsUpdateColumnResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  pulls: {
+    checkIfMerged: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCheckIfMergedParamsDeprecatedNumber
+      ): Promise<Octokit.AnyResponse>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsCheckIfMergedParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Draft pull requests are available in public repositories with GitHub Free and GitHub Pro, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request.
+     *
+     * You can create a new pull request.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    create: {
+      (params?: Octokit.RequestOptions & Octokit.PullsCreateParams): Promise<
+        Octokit.Response<Octokit.PullsCreateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** Multi-line comments on pull requests are currently in public beta and subject to change.
+     *
+     * Creates a review comment in the pull request diff. To add a regular comment to a pull request timeline, see "[Comments](https://developer.github.com/v3/issues/comments/#create-a-comment)." We recommend creating a review comment using `line`, `side`, and optionally `start_line` and `start_side` if your comment applies to more than one line in the pull request diff.
+     *
+     * You can still create a review comment using the `position` parameter. When you use `position`, the `line`, `side`, `start_line`, and `start_side` parameters are not required. For more information, see [Multi-line comment summary](https://developer.github.com/v3/pulls/comments/#multi-line-comment-summary-3).
+     *
+     * **Note:** The position value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     *
+     * **Multi-line comment summary**
+     *
+     * **Note:** New parameters and response fields are available for developers to preview. During the preview period, these response fields may change without advance notice. Please see the [blog post](https://developer.github.com/changes/2019-10-03-multi-line-comments) for full details.
+     *
+     * Use the `comfort-fade` preview header and the `line` parameter to show multi-line comment-supported fields in the response.
+     *
+     * If you use the `comfort-fade` preview header, your response will show:
+     *
+     * *   For multi-line comments, values for `start_line`, `original_start_line`, `start_side`, `line`, `original_line`, and `side`.
+     * *   For single-line comments, values for `line`, `original_line`, and `side` and a `null` value for `start_line`, `original_start_line`, and `start_side`.
+     *
+     * If you don't use the `comfort-fade` preview header, multi-line and single-line comments will appear the same way in the response with a single `position` attribute. Your response will show:
+     *
+     * *   For multi-line comments, the last line of the comment range for the `position` attribute.
+     * *   For single-line comments, the diff-positioned way of referencing comments for the `position` attribute. For more information, see `position` in the [input parameters](https://developer.github.com/v3/pulls/comments/#parameters-2) table.
+     */
+    createComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCreateCommentParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsCreateCommentResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCreateCommentParamsDeprecatedInReplyTo
+      ): Promise<Octokit.Response<Octokit.PullsCreateCommentResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsCreateCommentParams
+      ): Promise<Octokit.Response<Octokit.PullsCreateCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** Multi-line comments on pull requests are currently in public beta and subject to change.
+     *
+     * Creates a review comment in the pull request diff. To add a regular comment to a pull request timeline, see "[Comments](https://developer.github.com/v3/issues/comments/#create-a-comment)." We recommend creating a review comment using `line`, `side`, and optionally `start_line` and `start_side` if your comment applies to more than one line in the pull request diff.
+     *
+     * You can still create a review comment using the `position` parameter. When you use `position`, the `line`, `side`, `start_line`, and `start_side` parameters are not required. For more information, see [Multi-line comment summary](https://developer.github.com/v3/pulls/comments/#multi-line-comment-summary-3).
+     *
+     * **Note:** The position value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     *
+     * **Multi-line comment summary**
+     *
+     * **Note:** New parameters and response fields are available for developers to preview. During the preview period, these response fields may change without advance notice. Please see the [blog post](https://developer.github.com/changes/2019-10-03-multi-line-comments) for full details.
+     *
+     * Use the `comfort-fade` preview header and the `line` parameter to show multi-line comment-supported fields in the response.
+     *
+     * If you use the `comfort-fade` preview header, your response will show:
+     *
+     * *   For multi-line comments, values for `start_line`, `original_start_line`, `start_side`, `line`, `original_line`, and `side`.
+     * *   For single-line comments, values for `line`, `original_line`, and `side` and a `null` value for `start_line`, `original_start_line`, and `start_side`.
+     *
+     * If you don't use the `comfort-fade` preview header, multi-line and single-line comments will appear the same way in the response with a single `position` attribute. Your response will show:
+     *
+     * *   For multi-line comments, the last line of the comment range for the `position` attribute.
+     * *   For single-line comments, the diff-positioned way of referencing comments for the `position` attribute. For more information, see `position` in the [input parameters](https://developer.github.com/v3/pulls/comments/#parameters-2) table.
+     * @deprecated octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)
+     */
+    createCommentReply: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCreateCommentReplyParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsCreateCommentReplyResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCreateCommentReplyParamsDeprecatedInReplyTo
+      ): Promise<Octokit.Response<Octokit.PullsCreateCommentReplyResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsCreateCommentReplyParams
+      ): Promise<Octokit.Response<Octokit.PullsCreateCommentReplyResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    createFromIssue: {
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsCreateFromIssueParams
+      ): Promise<Octokit.Response<Octokit.PullsCreateFromIssueResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     *
+     * **Note:** To comment on a specific line in a file, you need to first determine the _position_ of that line in the diff. The GitHub REST API v3 offers the `application/vnd.github.v3.diff` [media type](https://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests). To see a pull request diff, add this media type to the `Accept` header of a call to the [single pull request](https://developer.github.com/v3/pulls/#get-a-single-pull-request) endpoint.
+     *
+     * The `position` value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file.
+     */
+    createReview: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCreateReviewParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsCreateReviewResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsCreateReviewParams
+      ): Promise<Octokit.Response<Octokit.PullsCreateReviewResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a reply to a review comment for a pull request. For the `comment_id`, provide the ID of the review comment you are replying to. This must be the ID of a _top-level review comment_, not a reply to that comment. Replies to replies are not supported.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createReviewCommentReply: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCreateReviewCommentReplyParams
+      ): Promise<
+        Octokit.Response<Octokit.PullsCreateReviewCommentReplyResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createReviewRequest: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsCreateReviewRequestParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsCreateReviewRequestResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsCreateReviewRequestParams
+      ): Promise<Octokit.Response<Octokit.PullsCreateReviewRequestResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deletes a review comment.
+     */
+    deleteComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsDeleteCommentParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deletePendingReview: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsDeletePendingReviewParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsDeletePendingReviewResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsDeletePendingReviewParams
+      ): Promise<Octokit.Response<Octokit.PullsDeletePendingReviewResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteReviewRequest: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsDeleteReviewRequestParamsDeprecatedNumber
+      ): Promise<Octokit.AnyResponse>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsDeleteReviewRequestParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** To dismiss a pull request review on a [protected branch](https://developer.github.com/v3/repos/branches/), you must be a repository administrator or be included in the list of people or teams who can dismiss pull request reviews.
+     */
+    dismissReview: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsDismissReviewParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsDismissReviewResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsDismissReviewParams
+      ): Promise<Octokit.Response<Octokit.PullsDismissReviewResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Draft pull requests are available in public repositories with GitHub Free and GitHub Pro, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists details of a pull request by providing its number.
+     *
+     * When you get, [create](https://developer.github.com/v3/pulls/#create-a-pull-request), or [edit](https://developer.github.com/v3/pulls/#update-a-pull-request) a pull request, GitHub creates a merge commit to test whether the pull request can be automatically merged into the base branch. This test commit is not added to the base branch or the head branch. You can review the status of the test commit using the `mergeable` key. For more information, see "[Checking mergeability of pull requests](https://developer.github.com/v3/git/#checking-mergeability-of-pull-requests)".
+     *
+     * The value of the `mergeable` attribute can be `true`, `false`, or `null`. If the value is `null`, then GitHub has started a background job to compute the mergeability. After giving the job time to complete, resubmit the request. When the job finishes, you will see a non-`null` value for the `mergeable` attribute in the response. If `mergeable` is `true`, then `merge_commit_sha` will be the SHA of the _test_ merge commit.
+     *
+     * The value of the `merge_commit_sha` attribute changes depending on the state of the pull request. Before merging a pull request, the `merge_commit_sha` attribute holds the SHA of the _test_ merge commit. After merging a pull request, the `merge_commit_sha` attribute changes depending on how you merged the pull request:
+     *
+     * *   If merged as a [merge commit](https://help.github.com/articles/about-merge-methods-on-github/), `merge_commit_sha` represents the SHA of the merge commit.
+     * *   If merged via a [squash](https://help.github.com/articles/about-merge-methods-on-github/#squashing-your-merge-commits), `merge_commit_sha` represents the SHA of the squashed commit on the base branch.
+     * *   If [rebased](https://help.github.com/articles/about-merge-methods-on-github/#rebasing-and-merging-your-commits), `merge_commit_sha` represents the commit that the base branch was updated to.
+     *
+     * Pass the appropriate [media type](https://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats.
+     */
+    get: {
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsGetParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsGetResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.PullsGetParams): Promise<
+        Octokit.Response<Octokit.PullsGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** Multi-line comments on pull requests are currently in public beta and subject to change.
+     *
+     * Provides details for a review comment.
+     *
+     * **Multi-line comment summary**
+     *
+     * **Note:** New parameters and response fields are available for developers to preview. During the preview period, these response fields may change without advance notice. Please see the [blog post](https://developer.github.com/changes/2019-10-03-multi-line-comments) for full details.
+     *
+     * Use the `comfort-fade` preview header and the `line` parameter to show multi-line comment-supported fields in the response.
+     *
+     * If you use the `comfort-fade` preview header, your response will show:
+     *
+     * *   For multi-line comments, values for `start_line`, `original_start_line`, `start_side`, `line`, `original_line`, and `side`.
+     * *   For single-line comments, values for `line`, `original_line`, and `side` and a `null` value for `start_line`, `original_start_line`, and `start_side`.
+     *
+     * If you don't use the `comfort-fade` preview header, multi-line and single-line comments will appear the same way in the response with a single `position` attribute. Your response will show:
+     *
+     * *   For multi-line comments, the last line of the comment range for the `position` attribute.
+     * *   For single-line comments, the diff-positioned way of referencing comments for the `position` attribute. For more information, see `position` in the [input parameters](https://developer.github.com/v3/pulls/comments/#parameters-2) table.
+     *
+     * The `reactions` key will have the following payload where `url` can be used to construct the API location for [listing and creating](https://developer.github.com/v3/reactions) reactions.
+     */
+    getComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsGetCommentParams
+      ): Promise<Octokit.Response<Octokit.PullsGetCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getCommentsForReview: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsGetCommentsForReviewParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsGetCommentsForReviewResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsGetCommentsForReviewParams
+      ): Promise<Octokit.Response<Octokit.PullsGetCommentsForReviewResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getReview: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsGetReviewParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsGetReviewResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.PullsGetReviewParams): Promise<
+        Octokit.Response<Octokit.PullsGetReviewResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Draft pull requests are available in public repositories with GitHub Free and GitHub Pro, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.PullsListParams): Promise<
+        Octokit.Response<Octokit.PullsListResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** Multi-line comments on pull requests are currently in public beta and subject to change.
+     *
+     * Lists review comments for a pull request. By default, review comments are in ascending order by ID.
+     *
+     * **Multi-line comment summary**
+     *
+     * **Note:** New parameters and response fields are available for developers to preview. During the preview period, these response fields may change without advance notice. Please see the [blog post](https://developer.github.com/changes/2019-10-03-multi-line-comments) for full details.
+     *
+     * Use the `comfort-fade` preview header and the `line` parameter to show multi-line comment-supported fields in the response.
+     *
+     * If you use the `comfort-fade` preview header, your response will show:
+     *
+     * *   For multi-line comments, values for `start_line`, `original_start_line`, `start_side`, `line`, `original_line`, and `side`.
+     * *   For single-line comments, values for `line`, `original_line`, and `side` and a `null` value for `start_line`, `original_start_line`, and `start_side`.
+     *
+     * If you don't use the `comfort-fade` preview header, multi-line and single-line comments will appear the same way in the response with a single `position` attribute. Your response will show:
+     *
+     * *   For multi-line comments, the last line of the comment range for the `position` attribute.
+     * *   For single-line comments, the diff-positioned way of referencing comments for the `position` attribute. For more information, see `position` in the [input parameters](https://developer.github.com/v3/pulls/comments/#parameters-2) table.
+     *
+     * The `reactions` key will have the following payload where `url` can be used to construct the API location for [listing and creating](https://developer.github.com/v3/reactions) reactions.
+     */
+    listComments: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsListCommentsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsListCommentsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsListCommentsParams
+      ): Promise<Octokit.Response<Octokit.PullsListCommentsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** Multi-line comments on pull requests are currently in public beta and subject to change.
+     *
+     * Lists review comments for all pull requests in a repository. By default, review comments are in ascending order by ID.
+     *
+     * **Multi-line comment summary**
+     *
+     * **Note:** New parameters and response fields are available for developers to preview. During the preview period, these response fields may change without advance notice. Please see the [blog post](https://developer.github.com/changes/2019-10-03-multi-line-comments) for full details.
+     *
+     * Use the `comfort-fade` preview header and the `line` parameter to show multi-line comment-supported fields in the response.
+     *
+     * If you use the `comfort-fade` preview header, your response will show:
+     *
+     * *   For multi-line comments, values for `start_line`, `original_start_line`, `start_side`, `line`, `original_line`, and `side`.
+     * *   For single-line comments, values for `line`, `original_line`, and `side` and a `null` value for `start_line`, `original_start_line`, and `start_side`.
+     *
+     * If you don't use the `comfort-fade` preview header, multi-line and single-line comments will appear the same way in the response with a single `position` attribute. Your response will show:
+     *
+     * *   For multi-line comments, the last line of the comment range for the `position` attribute.
+     * *   For single-line comments, the diff-positioned way of referencing comments for the `position` attribute. For more information, see `position` in the [input parameters](https://developer.github.com/v3/pulls/comments/#parameters-2) table.
+     *
+     * The `reactions` key will have the following payload where `url` can be used to construct the API location for [listing and creating](https://developer.github.com/v3/reactions) reactions.
+     */
+    listCommentsForRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsListCommentsForRepoParams
+      ): Promise<Octokit.Response<Octokit.PullsListCommentsForRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists a maximum of 250 commits for a pull request. To receive a complete commit list for pull requests with more than 250 commits, use the [Commit List API](https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository).
+     */
+    listCommits: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsListCommitsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsListCommitsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsListCommitsParams
+      ): Promise<Octokit.Response<Octokit.PullsListCommitsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** The response includes a maximum of 300 files.
+     */
+    listFiles: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsListFilesParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsListFilesResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.PullsListFilesParams): Promise<
+        Octokit.Response<Octokit.PullsListFilesResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listReviewRequests: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsListReviewRequestsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsListReviewRequestsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsListReviewRequestsParams
+      ): Promise<Octokit.Response<Octokit.PullsListReviewRequestsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The list of reviews returns in chronological order.
+     */
+    listReviews: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsListReviewsParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsListReviewsResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsListReviewsParams
+      ): Promise<Octokit.Response<Octokit.PullsListReviewsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    merge: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsMergeParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsMergeResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.PullsMergeParams): Promise<
+        Octokit.Response<Octokit.PullsMergeResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    submitReview: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsSubmitReviewParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsSubmitReviewResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsSubmitReviewParams
+      ): Promise<Octokit.Response<Octokit.PullsSubmitReviewResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Draft pull requests are available in public repositories with GitHub Free and GitHub Pro, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request.
+     */
+    update: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsUpdateParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsUpdateResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.PullsUpdateParams): Promise<
+        Octokit.Response<Octokit.PullsUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Updates the pull request branch with the latest upstream changes by merging HEAD from the base branch into the pull request branch.
+     */
+    updateBranch: {
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsUpdateBranchParams
+      ): Promise<Octokit.Response<Octokit.PullsUpdateBranchResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** Multi-line comments on pull requests are currently in public beta and subject to change.
+     *
+     * Enables you to edit a review comment.
+     *
+     * **Multi-line comment summary**
+     *
+     * **Note:** New parameters and response fields are available for developers to preview. During the preview period, these response fields may change without advance notice. Please see the [blog post](https://developer.github.com/changes/2019-10-03-multi-line-comments) for full details.
+     *
+     * Use the `comfort-fade` preview header and the `line` parameter to show multi-line comment-supported fields in the response.
+     *
+     * If you use the `comfort-fade` preview header, your response will show:
+     *
+     * *   For multi-line comments, values for `start_line`, `original_start_line`, `start_side`, `line`, `original_line`, and `side`.
+     * *   For single-line comments, values for `line`, `original_line`, and `side` and a `null` value for `start_line`, `original_start_line`, and `start_side`.
+     *
+     * If you don't use the `comfort-fade` preview header, multi-line and single-line comments will appear the same way in the response with a single `position` attribute. Your response will show:
+     *
+     * *   For multi-line comments, the last line of the comment range for the `position` attribute.
+     * *   For single-line comments, the diff-positioned way of referencing comments for the `position` attribute. For more information, see `position` in the [input parameters](https://developer.github.com/v3/pulls/comments/#parameters-2) table.
+     */
+    updateComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsUpdateCommentParams
+      ): Promise<Octokit.Response<Octokit.PullsUpdateCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Update the review summary comment with new text.
+     */
+    updateReview: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.PullsUpdateReviewParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.PullsUpdateReviewResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.PullsUpdateReviewParams
+      ): Promise<Octokit.Response<Octokit.PullsUpdateReviewResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  rateLimit: {
+    /**
+     * **Note:** Accessing this endpoint does not count against your REST API rate limit.
+     *
+     * **Understanding your rate limit status**
+     *
+     * The Search API has a [custom rate limit](https://developer.github.com/v3/search/#rate-limit), separate from the rate limit governing the rest of the REST API. The GraphQL API also has a [custom rate limit](https://developer.github.com/v4/guides/resource-limitations/#rate-limit) that is separate from and calculated differently than rate limits in the REST API.
+     *
+     * For these reasons, the Rate Limit API response categorizes your rate limit. Under `resources`, you'll see four objects:
+     *
+     * *   The `core` object provides your rate limit status for all non-search-related resources in the REST API.
+     * *   The `search` object provides your rate limit status for the [Search API](https://developer.github.com/v3/search/).
+     * *   The `graphql` object provides your rate limit status for the [GraphQL API](https://developer.github.com/v4/).
+     * *   The `integration_manifest` object provides your rate limit status for the [GitHub App Manifest code conversion](https://developer.github.com/apps/building-github-apps/creating-github-apps-from-a-manifest/#3-you-exchange-the-temporary-code-to-retrieve-the-app-configuration) endpoint.
+     *
+     * For more information on the headers and values in the rate limit response, see "[Rate limiting](https://developer.github.com/v3/#rate-limiting)."
+     *
+     * The `rate` object (shown at the bottom of the response above) is deprecated.
+     *
+     * If you're writing new API client code or updating existing code, you should use the `core` object instead of the `rate` object. The `core` object contains the same information that is present in the `rate` object.
+     */
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.RateLimitGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  reactions: {
+    /**
+     * Create a reaction to a [commit comment](https://developer.github.com/v3/repos/comments/). A response with a `Status: 200 OK` means that you already added the reaction type to this commit comment.
+     */
+    createForCommitComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsCreateForCommitCommentParams
+      ): Promise<
+        Octokit.Response<Octokit.ReactionsCreateForCommitCommentResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Create a reaction to an [issue](https://developer.github.com/v3/issues/). A response with a `Status: 200 OK` means that you already added the reaction type to this issue.
+     */
+    createForIssue: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsCreateForIssueParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.ReactionsCreateForIssueResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.ReactionsCreateForIssueParams
+      ): Promise<Octokit.Response<Octokit.ReactionsCreateForIssueResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Create a reaction to an [issue comment](https://developer.github.com/v3/issues/comments/). A response with a `Status: 200 OK` means that you already added the reaction type to this issue comment.
+     */
+    createForIssueComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsCreateForIssueCommentParams
+      ): Promise<
+        Octokit.Response<Octokit.ReactionsCreateForIssueCommentResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Create a reaction to a [pull request review comment](https://developer.github.com/v3/pulls/comments/). A response with a `Status: 200 OK` means that you already added the reaction type to this pull request review comment.
+     */
+    createForPullRequestReviewComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsCreateForPullRequestReviewCommentParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReactionsCreateForPullRequestReviewCommentResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Create a reaction to a [team discussion](https://developer.github.com/v3/teams/discussions/). OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a `Status: 200 OK` means that you already added the reaction type to this team discussion.
+     */
+    createForTeamDiscussion: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsCreateForTeamDiscussionParams
+      ): Promise<
+        Octokit.Response<Octokit.ReactionsCreateForTeamDiscussionResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Create a reaction to a [team discussion comment](https://developer.github.com/v3/teams/discussion_comments/). OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a `Status: 200 OK` means that you already added the reaction type to this team discussion comment.
+     */
+    createForTeamDiscussionComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsCreateForTeamDiscussionCommentParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReactionsCreateForTeamDiscussionCommentResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), when deleting a [team discussion](https://developer.github.com/v3/teams/discussions/) or [team discussion comment](https://developer.github.com/v3/teams/discussion_comments/).
+     */
+    delete: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReactionsDeleteParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the reactions to a [commit comment](https://developer.github.com/v3/repos/comments/).
+     */
+    listForCommitComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsListForCommitCommentParams
+      ): Promise<
+        Octokit.Response<Octokit.ReactionsListForCommitCommentResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the reactions to an [issue](https://developer.github.com/v3/issues/).
+     */
+    listForIssue: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsListForIssueParamsDeprecatedNumber
+      ): Promise<Octokit.Response<Octokit.ReactionsListForIssueResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.ReactionsListForIssueParams
+      ): Promise<Octokit.Response<Octokit.ReactionsListForIssueResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the reactions to an [issue comment](https://developer.github.com/v3/issues/comments/).
+     */
+    listForIssueComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsListForIssueCommentParams
+      ): Promise<
+        Octokit.Response<Octokit.ReactionsListForIssueCommentResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the reactions to a [pull request review comment](https://developer.github.com/v3/pulls/comments/).
+     */
+    listForPullRequestReviewComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsListForPullRequestReviewCommentParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReactionsListForPullRequestReviewCommentResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the reactions to a [team discussion](https://developer.github.com/v3/teams/discussions/). OAuth access tokens require the `read:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    listForTeamDiscussion: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsListForTeamDiscussionParams
+      ): Promise<
+        Octokit.Response<Octokit.ReactionsListForTeamDiscussionResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the reactions to a [team discussion comment](https://developer.github.com/v3/teams/discussion_comments/). OAuth access tokens require the `read:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    listForTeamDiscussionComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReactionsListForTeamDiscussionCommentParams
+      ): Promise<
+        Octokit.Response<Octokit.ReactionsListForTeamDiscussionCommentResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  repos: {
+    acceptInvitation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposAcceptInvitationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     *
+     * Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     *
+     * The invitee will receive a notification that they have been invited to the repository, which they must accept or decline. They may do this via the notifications page, the email they receive, or by using the [repository invitations API endpoints](https://developer.github.com/v3/repos/invitations/).
+     *
+     * **Rate limits**
+     *
+     * To prevent abuse, you are limited to sending 50 invitations to a repository per 24 hour period. Note there is no limit if you are inviting organization members to an organization repository.
+     */
+    addCollaborator: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposAddCollaboratorParams
+      ): Promise<Octokit.Response<Octokit.ReposAddCollaboratorResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Here's how you can create a read-only deploy key:
+     */
+    addDeployKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposAddDeployKeyParams
+      ): Promise<Octokit.Response<Octokit.ReposAddDeployKeyResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Adding admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled.
+     */
+    addProtectedBranchAdminEnforcement: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposAddProtectedBranchAdminEnforcementParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposAddProtectedBranchAdminEnforcementResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Grants the specified apps push access for this branch. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch.
+     *
+     * | Type    | Description                                                                                                                                                |
+     * | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+     * | `array` | The GitHub Apps that have push access to this branch. Use the app's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    addProtectedBranchAppRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposAddProtectedBranchAppRestrictionsParams
+      ): Promise<
+        Octokit.Response<Octokit.ReposAddProtectedBranchAppRestrictionsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * When authenticated with admin or owner permissions to the repository, you can use this endpoint to require signed commits on a branch. You must enable branch protection to require signed commits.
+     */
+    addProtectedBranchRequiredSignatures: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposAddProtectedBranchRequiredSignaturesParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposAddProtectedBranchRequiredSignaturesResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    addProtectedBranchRequiredStatusChecksContexts: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposAddProtectedBranchRequiredStatusChecksContextsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposAddProtectedBranchRequiredStatusChecksContextsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Grants the specified teams push access for this branch. If you pass the `hellcat-preview` media type, you can also give push access to child teams.
+     *
+     * | Type    | Description                                                                                                                                |
+     * | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
+     * | `array` | The teams that can have push access. Use the team's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    addProtectedBranchTeamRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposAddProtectedBranchTeamRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposAddProtectedBranchTeamRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Grants the specified people push access for this branch.
+     *
+     * | Type    | Description                                                                                                                   |
+     * | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
+     * | `array` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    addProtectedBranchUserRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposAddProtectedBranchUserRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposAddProtectedBranchUserRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners.
+     *
+     * If you pass the `hellcat-preview` media type, team members will include the members of child teams.
+     */
+    checkCollaborator: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCheckCollaboratorParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Shows whether vulnerability alerts are enabled or disabled for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)" in the GitHub Help documentation.
+     */
+    checkVulnerabilityAlerts: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposCheckVulnerabilityAlertsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Both `:base` and `:head` must be branch names in `:repo`. To compare branches across other repositories in the same network as `:repo`, use the format `<USERNAME>:branch`.
+     *
+     * The response from the API is equivalent to running the `git log base..head` command; however, commits are returned in chronological order. Pass the appropriate [media type](https://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats.
+     *
+     * The response also includes details on the files that were changed between the two commits. This includes the status of the change (for example, if a file was added, removed, modified, or renamed), and details of the change itself. For example, files with a `renamed` status have a `previous_filename` field showing the previous filename of the file, and files with a `modified` status have a `patch` field showing the changes made to the file.
+     *
+     * **Working with large comparisons**
+     *
+     * The response will include a comparison of up to 250 commits. If you are working with a larger commit range, you can use the [Commit List API](https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository) to enumerate all commits in the range.
+     *
+     * For comparisons with extremely large diffs, you may receive an error response indicating that the diff took too long to generate. You can typically resolve this error by using a smaller commit range.
+     *
+     * **Signature verification object**
+     *
+     * The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:
+     *
+     * These are the possible values for `reason` in the `verification` object:
+     *
+     * | Value                    | Description                                                                                                                       |
+     * | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
+     * | `expired_key`            | The key that made the signature is expired.                                                                                       |
+     * | `not_signing_key`        | The "signing" flag is not among the usage flags in the GPG key that made the signature.                                           |
+     * | `gpgverify_error`        | There was an error communicating with the signature verification service.                                                         |
+     * | `gpgverify_unavailable`  | The signature verification service is currently unavailable.                                                                      |
+     * | `unsigned`               | The object does not include a signature.                                                                                          |
+     * | `unknown_signature_type` | A non-PGP signature was found in the commit.                                                                                      |
+     * | `no_user`                | No user was associated with the `committer` email address in the commit.                                                          |
+     * | `unverified_email`       | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
+     * | `bad_email`              | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature.             |
+     * | `unknown_key`            | The key that made the signature has not been registered with any user's account.                                                  |
+     * | `malformed_signature`    | There was an error parsing the signature.                                                                                         |
+     * | `invalid`                | The signature could not be cryptographically verified using the key whose key-id was found in the signature.                      |
+     * | `valid`                  | None of the above errors applied, so the signature is considered to be verified.                                                  |
+     */
+    compareCommits: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCompareCommitsParams
+      ): Promise<Octokit.Response<Octokit.ReposCompareCommitsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Create a comment for a commit using its `:commit_sha`.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createCommitComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposCreateCommitCommentParamsDeprecatedSha
+      ): Promise<Octokit.Response<Octokit.ReposCreateCommitCommentResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposCreateCommitCommentParamsDeprecatedLine
+      ): Promise<Octokit.Response<Octokit.ReposCreateCommitCommentResponse>>;
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateCommitCommentParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateCommitCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deployments offer a few configurable parameters with sane defaults.
+     *
+     * The `ref` parameter can be any named branch, tag, or SHA. At GitHub we often deploy branches and verify them before we merge a pull request.
+     *
+     * The `environment` parameter allows deployments to be issued to different runtime environments. Teams often have multiple environments for verifying their applications, such as `production`, `staging`, and `qa`. This parameter makes it easier to track which environments have requested deployments. The default environment is `production`.
+     *
+     * The `auto_merge` parameter is used to ensure that the requested ref is not behind the repository's default branch. If the ref _is_ behind the default branch for the repository, we will attempt to merge it for you. If the merge succeeds, the API will return a successful merge commit. If merge conflicts prevent the merge from succeeding, the API will return a failure response.
+     *
+     * By default, [commit statuses](https://developer.github.com/v3/repos/statuses) for every submitted context must be in a `success` state. The `required_contexts` parameter allows you to specify a subset of contexts that must be `success`, or to specify contexts that have not yet been submitted. You are not required to use commit statuses to deploy. If you do not require any contexts or create any commit statuses, the deployment will always succeed.
+     *
+     * The `payload` parameter is available for any extra information that a deployment system might need. It is a JSON text field that will be passed on when a deployment event is dispatched.
+     *
+     * The `task` parameter is used by the deployment system to allow different execution paths. In the web world this might be `deploy:migrations` to run schema changes on the system. In the compiled world this could be a flag to compile an application with debugging enabled.
+     *
+     * Users with `repo` or `repo_deployment` scopes can create a deployment for a given ref:
+     *
+     * A simple example putting the user and room into the payload to notify back to chat networks.
+     *
+     * A more advanced example specifying required commit statuses and bypassing auto-merging.
+     *
+     * You will see this response when GitHub automatically merges the base branch into the topic branch instead of creating a deployment. This auto-merge happens when:
+     *
+     * *   Auto-merge option is enabled in the repository
+     * *   Topic branch does not include the latest changes on the base branch, which is `master`in the response example
+     * *   There are no merge conflicts
+     *
+     * If there are no new commits in the base branch, a new request to create a deployment should give a successful response.
+     *
+     * This error happens when the `auto_merge` option is enabled and when the default branch (in this case `master`), can't be merged into the branch that's being deployed (in this case `topic-branch`), due to merge conflicts.
+     *
+     * This error happens when the `required_contexts` parameter indicates that one or more contexts need to have a `success` status for the commit to be deployed, but one or more of the required contexts do not have a state of `success`.
+     */
+    createDeployment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateDeploymentParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateDeploymentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with `push` access can create deployment statuses for a given deployment.
+     *
+     * GitHub Apps require `read & write` access to "Deployments" and `read-only` access to "Repo contents" (for private repos). OAuth Apps require the `repo_deployment` scope.
+     */
+    createDeploymentStatus: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposCreateDeploymentStatusParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateDeploymentStatusResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You can use this endpoint to trigger a webhook event called `repository_dispatch` when you want activity that happens outside of GitHub to trigger a GitHub Actions workflow or GitHub App webhook. You must configure your GitHub Actions workflow or GitHub App to run when the `repository_dispatch` event occurs. For an example `repository_dispatch` webhook payload, see "[RepositoryDispatchEvent](https://developer.github.com/v3/activity/events/types/#repositorydispatchevent)."
+     *
+     * The `client_payload` parameter is available for any extra information that your workflow might need. This parameter is a JSON payload that will be passed on when the webhook event is dispatched. For example, the `client_payload` can include a message that a user would like to send using a GitHub Actions workflow. Or the `client_payload` can be used as a test to debug your workflow. For a test example, see the [input example](https://developer.github.com/v3/repos/#example-4).
+     *
+     * To give you write access to the repository, you must use a personal access token with the `repo` scope. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)" in the GitHub Help documentation.
+     *
+     * This input example shows how you can use the `client_payload` as a test to debug your workflow.
+     */
+    createDispatchEvent: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateDispatchEventParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new file or updates an existing file in a repository.
+     * @deprecated octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)
+     */
+    createFile: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateFileParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateFileResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new repository for the authenticated user.
+     *
+     * **OAuth scope requirements**
+     *
+     * When using [OAuth](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include:
+     *
+     * *   `public_repo` scope or `repo` scope to create a public repository
+     * *   `repo` scope to create a private repository
+     */
+    createForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposCreateForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.ReposCreateForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Create a fork for the authenticated user.
+     *
+     * **Note**: Forking a Repository happens asynchronously. You may have to wait a short period of time before you can access the git objects. If this takes longer than 5 minutes, be sure to contact [GitHub Support](https://github.com/contact).
+     */
+    createFork: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateForkParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateForkResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Repositories can have multiple webhooks installed. Each webhook should have a unique `config`. Multiple webhooks can share the same `config` as long as those webhooks do not have any `events` that overlap.
+     *
+     * Here's how you can create a hook that posts payloads in JSON format:
+     */
+    createHook: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateHookParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateHookResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new repository for the authenticated user.
+     *
+     * **OAuth scope requirements**
+     *
+     * When using [OAuth](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include:
+     *
+     * *   `public_repo` scope or `repo` scope to create a public repository
+     * *   `repo` scope to create a private repository
+     */
+    createInOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateInOrgParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateInOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new file or updates an existing file in a repository.
+     */
+    createOrUpdateFile: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateOrUpdateFileParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateOrUpdateFileResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with push access to the repository can create a release.
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createRelease: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateReleaseParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateReleaseResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with push access in a repository can create commit statuses for a given SHA.
+     *
+     * Note: there is a limit of 1000 statuses per `sha` and `context` within a repository. Attempts to create more than 1000 statuses will result in a validation error.
+     */
+    createStatus: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateStatusParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateStatusResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new repository using a repository template. Use the `template_owner` and `template_repo` route parameters to specify the repository to use as the template. The authenticated user must own or be a member of an organization that owns the repository. To check if a repository is available to use as a template, get the repository's information using the [`GET /repos/:owner/:repo`](https://developer.github.com/v3/repos/#get) endpoint and check that the `is_template` key is `true`.
+     *
+     * **OAuth scope requirements**
+     *
+     * When using [OAuth](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include:
+     *
+     * *   `public_repo` scope or `repo` scope to create a public repository
+     * *   `repo` scope to create a private repository
+     *
+     * \`
+     */
+    createUsingTemplate: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposCreateUsingTemplateParams
+      ): Promise<Octokit.Response<Octokit.ReposCreateUsingTemplateResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    declineInvitation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeclineInvitationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deleting a repository requires admin access. If OAuth is used, the `delete_repo` scope is required.
+     *
+     * If an organization owner has configured the organization to prevent members from deleting organization-owned repositories, a member will get this response:
+     */
+    delete: {
+      (params?: Octokit.RequestOptions & Octokit.ReposDeleteParams): Promise<
+        Octokit.Response<Octokit.ReposDeleteResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteCommitComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeleteCommitCommentParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteDownload: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeleteDownloadParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deletes a file in a repository.
+     *
+     * You can provide an additional `committer` parameter, which is an object containing information about the committer. Or, you can provide an `author` parameter, which is an object containing information about the author.
+     *
+     * The `author` section is optional and is filled in with the `committer` information if omitted. If the `committer` information is omitted, the authenticated user's information is used.
+     *
+     * You must provide values for both `name` and `email`, whether you choose to use `author` or `committer`. Otherwise, you'll receive a `422` status code.
+     */
+    deleteFile: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeleteFileParams
+      ): Promise<Octokit.Response<Octokit.ReposDeleteFileResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteHook: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeleteHookParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteInvitation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeleteInvitationParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with push access to the repository can delete a release.
+     */
+    deleteRelease: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeleteReleaseParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    deleteReleaseAsset: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDeleteReleaseAssetParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Disables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)" in the GitHub Help documentation.
+     */
+    disableAutomatedSecurityFixes: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposDisableAutomatedSecurityFixesParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    disablePagesSite: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposDisablePagesSiteParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Disables vulnerability alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)" in the GitHub Help documentation.
+     */
+    disableVulnerabilityAlerts: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposDisableVulnerabilityAlertsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)" in the GitHub Help documentation.
+     */
+    enableAutomatedSecurityFixes: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposEnableAutomatedSecurityFixesParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    enablePagesSite: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposEnablePagesSiteParams
+      ): Promise<Octokit.Response<Octokit.ReposEnablePagesSiteResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Enables vulnerability alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)" in the GitHub Help documentation.
+     */
+    enableVulnerabilityAlerts: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposEnableVulnerabilityAlertsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The `parent` and `source` objects are present when the repository is a fork. `parent` is the repository this repository was forked from, `source` is the ultimate source for the network.
+     */
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.ReposGetParams): Promise<
+        Octokit.Response<Octokit.ReposGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the GitHub Apps that have push access to this branch. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch.
+     */
+    getAppsWithAccessToProtectedBranch: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetAppsWithAccessToProtectedBranchParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposGetAppsWithAccessToProtectedBranchResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Gets a redirect URL to download an archive for a repository. The `:archive_format` can be either `tarball` or `zipball`. The `:ref` must be a valid Git reference. If you omit `:ref`, the repository’s default branch (usually `master`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the `Location` header to make a second `GET` request.
+     *
+     * _Note_: For private repositories, these links are temporary and expire after five minutes.
+     *
+     * To follow redirects with curl, use the `-L` switch:
+     */
+    getArchiveLink: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetArchiveLinkParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getBranch: {
+      (params?: Octokit.RequestOptions & Octokit.ReposGetBranchParams): Promise<
+        Octokit.Response<Octokit.ReposGetBranchResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    getBranchProtection: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetBranchProtectionParams
+      ): Promise<Octokit.Response<Octokit.ReposGetBranchProtectionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Get the total number of clones and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday.
+     */
+    getClones: {
+      (params?: Octokit.RequestOptions & Octokit.ReposGetClonesParams): Promise<
+        Octokit.Response<Octokit.ReposGetClonesResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
+     */
+    getCodeFrequencyStats: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetCodeFrequencyStatsParams
+      ): Promise<Octokit.Response<Octokit.ReposGetCodeFrequencyStatsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Possible values for the `permission` key: `admin`, `write`, `read`, `none`.
+     */
+    getCollaboratorPermissionLevel: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetCollaboratorPermissionLevelParams
+      ): Promise<
+        Octokit.Response<Octokit.ReposGetCollaboratorPermissionLevelResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with pull access in a repository can access a combined view of commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name.
+     *
+     * The most recent status for each context is returned, up to 100. This field [paginates](https://developer.github.com/v3/#pagination) if there are over 100 contexts.
+     *
+     * Additionally, a combined `state` is returned. The `state` is one of:
+     *
+     * *   **failure** if any of the contexts report as `error` or `failure`
+     * *   **pending** if there are no statuses or a context is `pending`
+     * *   **success** if the latest status for all contexts is `success`
+     */
+    getCombinedStatusForRef: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetCombinedStatusForRefParams
+      ): Promise<
+        Octokit.Response<Octokit.ReposGetCombinedStatusForRefResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns the contents of a single commit reference. You must have `read` access for the repository to use this endpoint.
+     *
+     * You can pass the appropriate [media type](https://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests) to fetch `diff` and `patch` formats. Diffs with binary data will have no `patch` property.
+     *
+     * To return only the SHA-1 hash of the commit reference, you can provide the `sha` custom [media type](https://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests) in the `Accept` header. You can use this endpoint to check if a remote reference's SHA-1 hash is the same as your local reference's SHA-1 hash by providing the local SHA-1 reference as the ETag.
+     *
+     * **Signature verification object**
+     *
+     * The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:
+     *
+     * These are the possible values for `reason` in the `verification` object:
+     *
+     * | Value                    | Description                                                                                                                       |
+     * | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
+     * | `expired_key`            | The key that made the signature is expired.                                                                                       |
+     * | `not_signing_key`        | The "signing" flag is not among the usage flags in the GPG key that made the signature.                                           |
+     * | `gpgverify_error`        | There was an error communicating with the signature verification service.                                                         |
+     * | `gpgverify_unavailable`  | The signature verification service is currently unavailable.                                                                      |
+     * | `unsigned`               | The object does not include a signature.                                                                                          |
+     * | `unknown_signature_type` | A non-PGP signature was found in the commit.                                                                                      |
+     * | `no_user`                | No user was associated with the `committer` email address in the commit.                                                          |
+     * | `unverified_email`       | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
+     * | `bad_email`              | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature.             |
+     * | `unknown_key`            | The key that made the signature has not been registered with any user's account.                                                  |
+     * | `malformed_signature`    | There was an error parsing the signature.                                                                                         |
+     * | `invalid`                | The signature could not be cryptographically verified using the key whose key-id was found in the signature.                      |
+     * | `valid`                  | None of the above errors applied, so the signature is considered to be verified.                                                  |
+     */
+    getCommit: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetCommitParamsDeprecatedSha
+      ): Promise<Octokit.Response<Octokit.ReposGetCommitResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetCommitParamsDeprecatedCommitSha
+      ): Promise<Octokit.Response<Octokit.ReposGetCommitResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.ReposGetCommitParams): Promise<
+        Octokit.Response<Octokit.ReposGetCommitResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns the last year of commit activity grouped by week. The `days` array is a group of commits per day, starting on `Sunday`.
+     */
+    getCommitActivityStats: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetCommitActivityStatsParams
+      ): Promise<Octokit.Response<Octokit.ReposGetCommitActivityStatsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getCommitComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetCommitCommentParams
+      ): Promise<Octokit.Response<Octokit.ReposGetCommitCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** To access this endpoint, you must provide a custom [media type](https://developer.github.com/v3/media) in the `Accept` header:
+     * ```
+     * application/vnd.github.VERSION.sha
+     * ```
+     * Returns the SHA-1 of the commit reference. You must have `read` access for the repository to get the SHA-1 of a commit reference. You can use this endpoint to check if a remote reference's SHA-1 is the same as your local reference's SHA-1 by providing the local SHA-1 reference as the ETag.
+     * @deprecated "Get the SHA-1 of a commit reference" will be removed. Use "Get a single commit" instead with media type format set to "sha" instead.
+     */
+    getCommitRefSha: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetCommitRefShaParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Gets the contents of a file or directory in a repository. Specify the file path or directory in `:path`. If you omit `:path`, you will receive the contents of all files in the repository.
+     *
+     * Files and symlinks support [a custom media type](https://developer.github.com/v3/repos/contents/#custom-media-types) for retrieving the raw content or rendered HTML (when supported). All content types support [a custom media type](https://developer.github.com/v3/repos/contents/#custom-media-types) to ensure the content is returned in a consistent object format.
+     *
+     * **Note**:
+     *
+     * *   To get a repository's contents recursively, you can [recursively get the tree](https://developer.github.com/v3/git/trees/).
+     * *   This API has an upper limit of 1,000 files for a directory. If you need to retrieve more files, use the [Git Trees API](https://developer.github.com/v3/git/trees/#get-a-tree).
+     * *   This API supports files up to 1 megabyte in size.
+     *
+     * The response will be an array of objects, one object for each item in the directory.
+     *
+     * When listing the contents of a directory, submodules have their "type" specified as "file". Logically, the value _should_ be "submodule". This behavior exists in API v3 [for backwards compatibility purposes](https://git.io/v1YCW). In the next major version of the API, the type will be returned as "submodule".
+     *
+     * If the requested `:path` points to a symlink, and the symlink's target is a normal file in the repository, then the API responds with the content of the file (in the [format shown above](https://developer.github.com/v3/repos/contents/#response-if-content-is-a-file)).
+     *
+     * Otherwise, the API responds with an object describing the symlink itself:
+     *
+     * The `submodule_git_url` identifies the location of the submodule repository, and the `sha` identifies a specific commit within the submodule repository. Git uses the given URL when cloning the submodule repository, and checks out the submodule at that specific commit.
+     *
+     * If the submodule repository is not hosted on github.com, the Git URLs (`git_url` and `_links["git"]`) and the github.com URLs (`html_url` and `_links["html"]`) will have null values.
+     */
+    getContents: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetContentsParams
+      ): Promise<Octokit.Response<Octokit.ReposGetContentsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * *   `total` - The Total number of commits authored by the contributor.
+     *
+     * Weekly Hash (`weeks` array):
+     *
+     * *   `w` - Start of the week, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time).
+     * *   `a` - Number of additions
+     * *   `d` - Number of deletions
+     * *   `c` - Number of commits
+     */
+    getContributorsStats: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetContributorsStatsParams
+      ): Promise<Octokit.Response<Octokit.ReposGetContributorsStatsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getDeployKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetDeployKeyParams
+      ): Promise<Octokit.Response<Octokit.ReposGetDeployKeyResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getDeployment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetDeploymentParams
+      ): Promise<Octokit.Response<Octokit.ReposGetDeploymentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with pull access can view a deployment status for a deployment:
+     */
+    getDeploymentStatus: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetDeploymentStatusParams
+      ): Promise<Octokit.Response<Octokit.ReposGetDeploymentStatusResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getDownload: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetDownloadParams
+      ): Promise<Octokit.Response<Octokit.ReposGetDownloadResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getHook: {
+      (params?: Octokit.RequestOptions & Octokit.ReposGetHookParams): Promise<
+        Octokit.Response<Octokit.ReposGetHookResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getLatestPagesBuild: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetLatestPagesBuildParams
+      ): Promise<Octokit.Response<Octokit.ReposGetLatestPagesBuildResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * View the latest published full release for the repository.
+     *
+     * The latest release is the most recent non-prerelease, non-draft release, sorted by the `created_at` attribute. The `created_at` attribute is the date of the commit used for the release, and not the date when the release was drafted or published.
+     */
+    getLatestRelease: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetLatestReleaseParams
+      ): Promise<Octokit.Response<Octokit.ReposGetLatestReleaseResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getPages: {
+      (params?: Octokit.RequestOptions & Octokit.ReposGetPagesParams): Promise<
+        Octokit.Response<Octokit.ReposGetPagesResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    getPagesBuild: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetPagesBuildParams
+      ): Promise<Octokit.Response<Octokit.ReposGetPagesBuildResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Returns the total commit counts for the `owner` and total commit counts in `all`. `all` is everyone combined, including the `owner` in the last 52 weeks. If you'd like to get the commit counts for non-owners, you can subtract `owner` from `all`.
+     *
+     * The array order is oldest week (index 0) to most recent week.
+     */
+    getParticipationStats: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetParticipationStatsParams
+      ): Promise<Octokit.Response<Octokit.ReposGetParticipationStatsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    getProtectedBranchAdminEnforcement: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetProtectedBranchAdminEnforcementParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposGetProtectedBranchAdminEnforcementResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    getProtectedBranchPullRequestReviewEnforcement: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetProtectedBranchPullRequestReviewEnforcementParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposGetProtectedBranchPullRequestReviewEnforcementResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * When authenticated with admin or owner permissions to the repository, you can use this endpoint to check whether a branch requires signed commits. An enabled status of `true` indicates you must sign commits on this branch. For more information, see [Signing commits with GPG](https://help.github.com/articles/signing-commits-with-gpg) in GitHub Help.
+     *
+     * **Note**: You must enable branch protection to require signed commits.
+     */
+    getProtectedBranchRequiredSignatures: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetProtectedBranchRequiredSignaturesParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposGetProtectedBranchRequiredSignaturesResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    getProtectedBranchRequiredStatusChecks: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetProtectedBranchRequiredStatusChecksParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposGetProtectedBranchRequiredStatusChecksResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists who has access to this protected branch. {{#note}}
+     *
+     * **Note**: Users, apps, and teams `restrictions` are only available for organization-owned repositories.
+     */
+    getProtectedBranchRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetProtectedBranchRestrictionsParams
+      ): Promise<
+        Octokit.Response<Octokit.ReposGetProtectedBranchRestrictionsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Each array contains the day number, hour number, and number of commits:
+     *
+     * *   `0-6`: Sunday - Saturday
+     * *   `0-23`: Hour of day
+     * *   Number of commits
+     *
+     * For example, `[2, 14, 25]` indicates that there were 25 total commits, during the 2:00pm hour on Tuesdays. All times are based on the time zone of individual commits.
+     */
+    getPunchCardStats: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetPunchCardStatsParams
+      ): Promise<Octokit.Response<Octokit.ReposGetPunchCardStatsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Gets the preferred README for a repository.
+     *
+     * READMEs support [custom media types](https://developer.github.com/v3/repos/contents/#custom-media-types) for retrieving the raw content or rendered HTML.
+     */
+    getReadme: {
+      (params?: Octokit.RequestOptions & Octokit.ReposGetReadmeParams): Promise<
+        Octokit.Response<Octokit.ReposGetReadmeResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** This returns an `upload_url` key corresponding to the endpoint for uploading release assets. This key is a [hypermedia resource](https://developer.github.com/v3/#hypermedia).
+     */
+    getRelease: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetReleaseParams
+      ): Promise<Octokit.Response<Octokit.ReposGetReleaseResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * To download the asset's binary content, set the `Accept` header of the request to [`application/octet-stream`](https://developer.github.com/v3/media/#media-types). The API will either redirect the client to the location, or stream it directly if possible. API clients should handle both a `200` or `302` response.
+     */
+    getReleaseAsset: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetReleaseAssetParams
+      ): Promise<Octokit.Response<Octokit.ReposGetReleaseAssetResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Get a published release with the specified tag.
+     */
+    getReleaseByTag: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetReleaseByTagParams
+      ): Promise<Octokit.Response<Octokit.ReposGetReleaseByTagResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the teams who have push access to this branch. If you pass the `hellcat-preview` media type, the list includes child teams.
+     */
+    getTeamsWithAccessToProtectedBranch: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetTeamsWithAccessToProtectedBranchParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposGetTeamsWithAccessToProtectedBranchResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Get the top 10 popular contents over the last 14 days.
+     */
+    getTopPaths: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetTopPathsParams
+      ): Promise<Octokit.Response<Octokit.ReposGetTopPathsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Get the top 10 referrers over the last 14 days.
+     */
+    getTopReferrers: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposGetTopReferrersParams
+      ): Promise<Octokit.Response<Octokit.ReposGetTopReferrersResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the people who have push access to this branch.
+     */
+    getUsersWithAccessToProtectedBranch: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposGetUsersWithAccessToProtectedBranchParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposGetUsersWithAccessToProtectedBranchResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Get the total number of views and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday.
+     */
+    getViews: {
+      (params?: Octokit.RequestOptions & Octokit.ReposGetViewsParams): Promise<
+        Octokit.Response<Octokit.ReposGetViewsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists repositories that the authenticated user has explicit permission (`:read`, `:write`, or `:admin`) to access.
+     *
+     * The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership.
+     */
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.ReposListParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the GitHub Apps that have push access to this branch. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch.
+     * @deprecated octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)
+     */
+    listAppsWithAccessToProtectedBranch: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListAppsWithAccessToProtectedBranchParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListAppsWithAccessToProtectedBranchResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listAssetsForRelease: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListAssetsForReleaseParams
+      ): Promise<Octokit.Response<Octokit.ReposListAssetsForReleaseResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listBranches: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListBranchesParams
+      ): Promise<Octokit.Response<Octokit.ReposListBranchesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Returns all branches where the given commit SHA is the HEAD, or latest commit for the branch.
+     */
+    listBranchesForHeadCommit: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListBranchesForHeadCommitParams
+      ): Promise<
+        Octokit.Response<Octokit.ReposListBranchesForHeadCommitResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners.
+     *
+     * If you pass the `hellcat-preview` media type, team members will include the members of child teams.
+     */
+    listCollaborators: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListCollaboratorsParams
+      ): Promise<Octokit.Response<Octokit.ReposListCollaboratorsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Use the `:commit_sha` to specify the commit that will have its comments listed.
+     */
+    listCommentsForCommit: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListCommentsForCommitParamsDeprecatedRef
+      ): Promise<Octokit.Response<Octokit.ReposListCommentsForCommitResponse>>;
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListCommentsForCommitParams
+      ): Promise<Octokit.Response<Octokit.ReposListCommentsForCommitResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Commit Comments use [these custom media types](https://developer.github.com/v3/repos/comments/#custom-media-types). You can read more about the use of media types in the API [here](https://developer.github.com/v3/media/).
+     *
+     * Comments are ordered by ascending ID.
+     */
+    listCommitComments: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListCommitCommentsParams
+      ): Promise<Octokit.Response<Octokit.ReposListCommitCommentsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Signature verification object**
+     *
+     * The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:
+     *
+     * These are the possible values for `reason` in the `verification` object:
+     *
+     * | Value                    | Description                                                                                                                       |
+     * | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
+     * | `expired_key`            | The key that made the signature is expired.                                                                                       |
+     * | `not_signing_key`        | The "signing" flag is not among the usage flags in the GPG key that made the signature.                                           |
+     * | `gpgverify_error`        | There was an error communicating with the signature verification service.                                                         |
+     * | `gpgverify_unavailable`  | The signature verification service is currently unavailable.                                                                      |
+     * | `unsigned`               | The object does not include a signature.                                                                                          |
+     * | `unknown_signature_type` | A non-PGP signature was found in the commit.                                                                                      |
+     * | `no_user`                | No user was associated with the `committer` email address in the commit.                                                          |
+     * | `unverified_email`       | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
+     * | `bad_email`              | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature.             |
+     * | `unknown_key`            | The key that made the signature has not been registered with any user's account.                                                  |
+     * | `malformed_signature`    | There was an error parsing the signature.                                                                                         |
+     * | `invalid`                | The signature could not be cryptographically verified using the key whose key-id was found in the signature.                      |
+     * | `valid`                  | None of the above errors applied, so the signature is considered to be verified.                                                  |
+     */
+    listCommits: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListCommitsParams
+      ): Promise<Octokit.Response<Octokit.ReposListCommitsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists contributors to the specified repository and sorts them by the number of commits per contributor in descending order. This endpoint may return information that is a few hours old because the GitHub REST API v3 caches contributor data to improve performance.
+     *
+     * GitHub identifies contributors by author email address. This endpoint groups contribution counts by GitHub user, which includes all associated email addresses. To improve performance, only the first 500 author email addresses in the repository link to GitHub users. The rest will appear as anonymous contributors without associated GitHub user information.
+     */
+    listContributors: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListContributorsParams
+      ): Promise<Octokit.Response<Octokit.ReposListContributorsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listDeployKeys: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListDeployKeysParams
+      ): Promise<Octokit.Response<Octokit.ReposListDeployKeysResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with pull access can view deployment statuses for a deployment:
+     */
+    listDeploymentStatuses: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListDeploymentStatusesParams
+      ): Promise<Octokit.Response<Octokit.ReposListDeploymentStatusesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Simple filtering of deployments is available via query parameters:
+     */
+    listDeployments: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListDeploymentsParams
+      ): Promise<Octokit.Response<Octokit.ReposListDeploymentsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listDownloads: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListDownloadsParams
+      ): Promise<Octokit.Response<Octokit.ReposListDownloadsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists repositories for the specified organization.
+     */
+    listForOrg: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListForOrgParams
+      ): Promise<Octokit.Response<Octokit.ReposListForOrgResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists public repositories for the specified user.
+     */
+    listForUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListForUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listForks: {
+      (params?: Octokit.RequestOptions & Octokit.ReposListForksParams): Promise<
+        Octokit.Response<Octokit.ReposListForksResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listHooks: {
+      (params?: Octokit.RequestOptions & Octokit.ReposListHooksParams): Promise<
+        Octokit.Response<Octokit.ReposListHooksResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * When authenticating as a user with admin rights to a repository, this endpoint will list all currently open repository invitations.
+     */
+    listInvitations: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListInvitationsParams
+      ): Promise<Octokit.Response<Octokit.ReposListInvitationsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * When authenticating as a user, this endpoint will list all currently open repository invitations for that user.
+     */
+    listInvitationsForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListInvitationsForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListInvitationsForAuthenticatedUserResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists languages for the specified repository. The value shown for each language is the number of bytes of code written in that language.
+     */
+    listLanguages: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListLanguagesParams
+      ): Promise<Octokit.Response<Octokit.ReposListLanguagesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listPagesBuilds: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListPagesBuildsParams
+      ): Promise<Octokit.Response<Octokit.ReposListPagesBuildsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    listProtectedBranchRequiredStatusChecksContexts: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListProtectedBranchRequiredStatusChecksContextsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListProtectedBranchRequiredStatusChecksContextsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the teams who have push access to this branch. If you pass the `hellcat-preview` media type, the list includes child teams.
+     * @deprecated octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)
+     */
+    listProtectedBranchTeamRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListProtectedBranchTeamRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListProtectedBranchTeamRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the people who have push access to this branch.
+     * @deprecated octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)
+     */
+    listProtectedBranchUserRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListProtectedBranchUserRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListProtectedBranchUserRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists all public repositories in the order that they were created.
+     *
+     * Note: Pagination is powered exclusively by the `since` parameter. Use the [Link header](https://developer.github.com/v3/#link-header) to get the URL for the next page of repositories.
+     */
+    listPublic: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListPublicParams
+      ): Promise<Octokit.Response<Octokit.ReposListPublicResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists all pull requests containing the provided commit SHA, which can be from any point in the commit history. The results will include open and closed pull requests. Additional preview headers may be required to see certain details for associated pull requests, such as whether a pull request is in a draft state. For more information about previews that might affect this endpoint, see the [List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests) endpoint.
+     */
+    listPullRequestsAssociatedWithCommit: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListPullRequestsAssociatedWithCommitParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListPullRequestsAssociatedWithCommitResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This returns a list of releases, which does not include regular Git tags that have not been associated with a release. To get a list of Git tags, use the [Repository Tags API](https://developer.github.com/v3/repos/#list-tags).
+     *
+     * Information about published releases are available to everyone. Only users with push access will receive listings for draft releases.
+     */
+    listReleases: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListReleasesParams
+      ): Promise<Octokit.Response<Octokit.ReposListReleasesResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with pull access in a repository can view commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. Statuses are returned in reverse chronological order. The first status in the list will be the latest one.
+     *
+     * This resource is also available via a legacy route: `GET /repos/:owner/:repo/statuses/:ref`.
+     */
+    listStatusesForRef: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListStatusesForRefParams
+      ): Promise<Octokit.Response<Octokit.ReposListStatusesForRefResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listTags: {
+      (params?: Octokit.RequestOptions & Octokit.ReposListTagsParams): Promise<
+        Octokit.Response<Octokit.ReposListTagsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listTeams: {
+      (params?: Octokit.RequestOptions & Octokit.ReposListTeamsParams): Promise<
+        Octokit.Response<Octokit.ReposListTeamsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the teams who have push access to this branch. If you pass the `hellcat-preview` media type, the list includes child teams.
+     * @deprecated octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)
+     */
+    listTeamsWithAccessToProtectedBranch: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListTeamsWithAccessToProtectedBranchParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListTeamsWithAccessToProtectedBranchResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listTopics: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposListTopicsParams
+      ): Promise<Octokit.Response<Octokit.ReposListTopicsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Lists the people who have push access to this branch.
+     * @deprecated octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)
+     */
+    listUsersWithAccessToProtectedBranch: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposListUsersWithAccessToProtectedBranchParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposListUsersWithAccessToProtectedBranchResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    merge: {
+      (params?: Octokit.RequestOptions & Octokit.ReposMergeParams): Promise<
+        Octokit.Response<Octokit.ReposMergeResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This will trigger a [ping event](https://developer.github.com/webhooks/#ping-event) to be sent to the hook.
+     */
+    pingHook: {
+      (params?: Octokit.RequestOptions & Octokit.ReposPingHookParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    removeBranchProtection: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveBranchProtectionParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    removeCollaborator: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposRemoveCollaboratorParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    removeDeployKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposRemoveDeployKeyParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Removing admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled.
+     */
+    removeProtectedBranchAdminEnforcement: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchAdminEnforcementParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Removes the ability of an app to push to this branch. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch.
+     *
+     * | Type    | Description                                                                                                                                                |
+     * | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+     * | `array` | The GitHub Apps that have push access to this branch. Use the app's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    removeProtectedBranchAppRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchAppRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposRemoveProtectedBranchAppRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    removeProtectedBranchPullRequestReviewEnforcement: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchPullRequestReviewEnforcementParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * When authenticated with admin or owner permissions to the repository, you can use this endpoint to disable required signed commits on a branch. You must enable branch protection to require signed commits.
+     */
+    removeProtectedBranchRequiredSignatures: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchRequiredSignaturesParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    removeProtectedBranchRequiredStatusChecks: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchRequiredStatusChecksParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    removeProtectedBranchRequiredStatusChecksContexts: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchRequiredStatusChecksContextsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposRemoveProtectedBranchRequiredStatusChecksContextsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Disables the ability to restrict who can push to this branch.
+     */
+    removeProtectedBranchRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchRestrictionsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Removes the ability of a team to push to this branch. If you pass the `hellcat-preview` media type, you can include child teams.
+     *
+     * | Type    | Description                                                                                                                                         |
+     * | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
+     * | `array` | Teams that should no longer have push access. Use the team's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    removeProtectedBranchTeamRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchTeamRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposRemoveProtectedBranchTeamRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Removes the ability of a user to push to this branch.
+     *
+     * | Type    | Description                                                                                                                                   |
+     * | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
+     * | `array` | Usernames of the people who should no longer have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    removeProtectedBranchUserRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRemoveProtectedBranchUserRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposRemoveProtectedBranchUserRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Replaces the list of apps that have push access to this branch. This removes all apps that previously had push access and grants push access to the new list of apps. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch.
+     *
+     * | Type    | Description                                                                                                                                                |
+     * | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+     * | `array` | The GitHub Apps that have push access to this branch. Use the app's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    replaceProtectedBranchAppRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposReplaceProtectedBranchAppRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposReplaceProtectedBranchAppRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     */
+    replaceProtectedBranchRequiredStatusChecksContexts: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposReplaceProtectedBranchRequiredStatusChecksContextsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposReplaceProtectedBranchRequiredStatusChecksContextsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Replaces the list of teams that have push access to this branch. This removes all teams that previously had push access and grants push access to the new list of teams. If you pass the `hellcat-preview` media type, you can include child teams.
+     *
+     * | Type    | Description                                                                                                                                |
+     * | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
+     * | `array` | The teams that can have push access. Use the team's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    replaceProtectedBranchTeamRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposReplaceProtectedBranchTeamRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposReplaceProtectedBranchTeamRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Replaces the list of people that have push access to this branch. This removes all people that previously had push access and grants push access to the new list of people.
+     *
+     * | Type    | Description                                                                                                                   |
+     * | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
+     * | `array` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. |
+     */
+    replaceProtectedBranchUserRestrictions: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposReplaceProtectedBranchUserRestrictionsParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposReplaceProtectedBranchUserRestrictionsResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    replaceTopics: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposReplaceTopicsParams
+      ): Promise<Octokit.Response<Octokit.ReposReplaceTopicsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * You can request that your site be built from the latest revision on the default branch. This has the same effect as pushing a commit to your default branch, but does not require an additional commit. Manually triggering page builds can be helpful when diagnosing build warnings and failures.
+     *
+     * Build requests are limited to one concurrent build per repository and one concurrent build per requester. If you request a build while another is still in progress, the second request will be queued until the first completes.
+     */
+    requestPageBuild: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposRequestPageBuildParams
+      ): Promise<Octokit.Response<Octokit.ReposRequestPageBuildResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint will return all community profile metrics, including an overall health score, repository description, the presence of documentation, detected code of conduct, detected license, and the presence of ISSUE\_TEMPLATE, PULL\_REQUEST\_TEMPLATE, README, and CONTRIBUTING files.
+     */
+    retrieveCommunityProfileMetrics: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposRetrieveCommunityProfileMetricsParams
+      ): Promise<
+        Octokit.Response<Octokit.ReposRetrieveCommunityProfileMetricsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This will trigger the hook with the latest push to the current repository if the hook is subscribed to `push` events. If the hook is not subscribed to `push` events, the server will respond with 204 but no test POST will be generated.
+     *
+     * **Note**: Previously `/repos/:owner/:repo/hooks/:hook_id/test`
+     */
+    testPushHook: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposTestPushHookParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * A transfer request will need to be accepted by the new owner when transferring a personal repository to another user. The response will contain the original `owner`, and the transfer will continue asynchronously. For more details on the requirements to transfer personal and organization-owned repositories, see [about repository transfers](https://help.github.com/articles/about-repository-transfers/).
+     */
+    transfer: {
+      (params?: Octokit.RequestOptions & Octokit.ReposTransferParams): Promise<
+        Octokit.Response<Octokit.ReposTransferResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: To edit a repository's topics, use the [`topics` endpoint](https://developer.github.com/v3/repos/#replace-all-topics-for-a-repository).
+     */
+    update: {
+      (params?: Octokit.RequestOptions & Octokit.ReposUpdateParams): Promise<
+        Octokit.Response<Octokit.ReposUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Protecting a branch requires admin or owner permissions to the repository.
+     *
+     * **Note**: Passing new arrays of `users` and `teams` replaces their previous values.
+     *
+     * **Note**: The list of users, apps, and teams in total is limited to 100 items.
+     */
+    updateBranchProtection: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposUpdateBranchProtectionParams
+      ): Promise<Octokit.Response<Octokit.ReposUpdateBranchProtectionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateCommitComment: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposUpdateCommitCommentParams
+      ): Promise<Octokit.Response<Octokit.ReposUpdateCommitCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new file or updates an existing file in a repository.
+     * @deprecated octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)
+     */
+    updateFile: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposUpdateFileParams
+      ): Promise<Octokit.Response<Octokit.ReposUpdateFileResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateHook: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposUpdateHookParams
+      ): Promise<Octokit.Response<Octokit.ReposUpdateHookResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateInformationAboutPagesSite: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposUpdateInformationAboutPagesSiteParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    updateInvitation: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposUpdateInvitationParams
+      ): Promise<Octokit.Response<Octokit.ReposUpdateInvitationResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Updating pull request review enforcement requires admin or owner permissions to the repository and branch protection to be enabled.
+     *
+     * **Note**: Passing new arrays of `users` and `teams` replaces their previous values.
+     */
+    updateProtectedBranchPullRequestReviewEnforcement: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposUpdateProtectedBranchPullRequestReviewEnforcementParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposUpdateProtectedBranchPullRequestReviewEnforcementResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Protected branches are available in public repositories with GitHub Free, and in public and private repositories with GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. For more information, see [GitHub's billing plans](https://help.github.com/articles/github-s-billing-plans) in the GitHub Help documentation.
+     *
+     * Updating required status checks requires admin or owner permissions to the repository and branch protection to be enabled.
+     */
+    updateProtectedBranchRequiredStatusChecks: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.ReposUpdateProtectedBranchRequiredStatusChecksParams
+      ): Promise<
+        Octokit.Response<
+          Octokit.ReposUpdateProtectedBranchRequiredStatusChecksResponse
+        >
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with push access to the repository can edit a release.
+     */
+    updateRelease: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposUpdateReleaseParams
+      ): Promise<Octokit.Response<Octokit.ReposUpdateReleaseResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Users with push access to the repository can edit a release asset.
+     */
+    updateReleaseAsset: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposUpdateReleaseAssetParams
+      ): Promise<Octokit.Response<Octokit.ReposUpdateReleaseAssetResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint makes use of [a Hypermedia relation](https://developer.github.com/v3/#hypermedia) to determine which URL to access. The endpoint you call to upload release assets is specific to your release. Use the `upload_url` returned in the response of the [Create a release endpoint](https://developer.github.com/v3/repos/releases/#create-a-release) to upload a release asset.
+     *
+     * You need to use an HTTP client which supports [SNI](http://en.wikipedia.org/wiki/Server_Name_Indication) to make calls to this endpoint.
+     *
+     * Most libraries will set the required `Content-Length` header automatically. Use the required `Content-Type` header to provide the media type of the asset. For a list of media types, see [Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml). For example:
+     *
+     * `application/zip`
+     *
+     * GitHub expects the asset data in its raw binary form, rather than JSON. You will send the raw binary content of the asset as the request body. Everything else about the endpoint is the same as the rest of the API. For example, you'll still need to pass your authentication to be able to upload an asset.
+     */
+    uploadReleaseAsset: {
+      (
+        params?: Octokit.RequestOptions & Octokit.ReposUploadReleaseAssetParams
+      ): Promise<Octokit.Response<Octokit.ReposUploadReleaseAssetResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  search: {
+    /**
+     * Find file contents via various criteria. This method returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for code, you can get text match metadata for the file **content** and file **path** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * **Note:** You must [authenticate](https://developer.github.com/v3/#authentication) to search for code across all public repositories.
+     *
+     * **Considerations for code search**
+     *
+     * Due to the complexity of searching code, there are a few restrictions on how searches are performed:
+     *
+     * *   Only the _default branch_ is considered. In most cases, this will be the `master` branch.
+     * *   Only files smaller than 384 KB are searchable.
+     * *   You must always include at least one search term when searching source code. For example, searching for [`language:go`](https://github.com/search?utf8=%E2%9C%93&q=language%3Ago&type=Code) is not valid, while [`amazing language:go`](https://github.com/search?utf8=%E2%9C%93&q=amazing+language%3Ago&type=Code) is.
+     *
+     * Suppose you want to find the definition of the `addClass` function inside [jQuery](https://github.com/jquery/jquery). Your query would look something like this:
+     *
+     * Here, we're searching for the keyword `addClass` within a file's contents. We're making sure that we're only looking in files where the language is JavaScript. And we're scoping the search to the `repo:jquery/jquery` repository.
+     */
+    code: {
+      (params?: Octokit.RequestOptions & Octokit.SearchCodeParams): Promise<
+        Octokit.Response<Octokit.SearchCodeResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Find commits via various criteria. This method returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for commits, you can get text match metadata for the **message** field when you provide the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * **Considerations for commit search**
+     *
+     * Only the _default branch_ is considered. In most cases, this will be the `master` branch.
+     *
+     * Suppose you want to find commits related to CSS in the [octocat/Spoon-Knife](https://github.com/octocat/Spoon-Knife) repository. Your query would look something like this:
+     */
+    commits: {
+      (params?: Octokit.RequestOptions & Octokit.SearchCommitsParams): Promise<
+        Octokit.Response<Octokit.SearchCommitsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Find issues by state and keyword. This method returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for issues, you can get text match metadata for the issue **title**, issue **body**, and issue **comment body** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * Let's say you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this.
+     *
+     * In this query, we're searching for the keyword `windows`, within any open issue that's labeled as `bug`. The search runs across repositories whose primary language is Python. We’re sorting by creation date in ascending order, so that the oldest issues appear first in the search results.
+     * @deprecated octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)
+     */
+    issues: {
+      (params?: Octokit.RequestOptions & Octokit.SearchIssuesParams): Promise<
+        Octokit.Response<Octokit.SearchIssuesResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Find issues by state and keyword. This method returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for issues, you can get text match metadata for the issue **title**, issue **body**, and issue **comment body** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * Let's say you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this.
+     *
+     * In this query, we're searching for the keyword `windows`, within any open issue that's labeled as `bug`. The search runs across repositories whose primary language is Python. We’re sorting by creation date in ascending order, so that the oldest issues appear first in the search results.
+     */
+    issuesAndPullRequests: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.SearchIssuesAndPullRequestsParams
+      ): Promise<Octokit.Response<Octokit.SearchIssuesAndPullRequestsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Find labels in a repository with names or descriptions that match search keywords. Returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for labels, you can get text match metadata for the label **name** and **description** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * Suppose you want to find labels in the `linguist` repository that match `bug`, `defect`, or `enhancement`. Your query might look like this:
+     *
+     * The labels that best match for the query appear first in the search results.
+     */
+    labels: {
+      (params?: Octokit.RequestOptions & Octokit.SearchLabelsParams): Promise<
+        Octokit.Response<Octokit.SearchLabelsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Find repositories via various criteria. This method returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for repositories, you can get text match metadata for the **name** and **description** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * Suppose you want to search for popular Tetris repositories written in Assembly. Your query might look like this.
+     *
+     * You can search for multiple topics by adding more `topic:` instances, and including the `mercy-preview` header. For example:
+     *
+     * In this request, we're searching for repositories with the word `tetris` in the name, the description, or the README. We're limiting the results to only find repositories where the primary language is Assembly. We're sorting by stars in descending order, so that the most popular repositories appear first in the search results.
+     */
+    repos: {
+      (params?: Octokit.RequestOptions & Octokit.SearchReposParams): Promise<
+        Octokit.Response<Octokit.SearchReposResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Find topics via various criteria. Results are sorted by best match. This method returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for topics, you can get text match metadata for the topic's **short\_description**, **description**, **name**, or **display\_name** field when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * See "[Searching topics](https://help.github.com/articles/searching-topics/)" for a detailed list of qualifiers.
+     *
+     * Suppose you want to search for topics related to Ruby that are featured on [https://github.com/topics](https://github.com/topics). Your query might look like this:
+     *
+     * In this request, we're searching for topics with the keyword `ruby`, and we're limiting the results to find only topics that are featured. The topics that are the best match for the query appear first in the search results.
+     *
+     * **Note:** A search for featured Ruby topics only has 6 total results, so a [Link header](https://developer.github.com/v3/#link-header) indicating pagination is not included in the response.
+     */
+    topics: {
+      (params?: Octokit.RequestOptions & Octokit.SearchTopicsParams): Promise<
+        Octokit.Response<Octokit.SearchTopicsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Find users via various criteria. This method returns up to 100 results [per page](https://developer.github.com/v3/#pagination).
+     *
+     * When searching for users, you can get text match metadata for the issue **login**, **email**, and **name** fields when you pass the `text-match` media type. For more details about highlighting search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata). For more details about how to receive highlighted search results, see [Text match metadata](https://developer.github.com/v3/search/#text-match-metadata).
+     *
+     * Imagine you're looking for a list of popular users. You might try out this query:
+     *
+     * Here, we're looking at users with the name Tom. We're only interested in those with more than 42 repositories, and only if they have over 1,000 followers.
+     */
+    users: {
+      (params?: Octokit.RequestOptions & Octokit.SearchUsersParams): Promise<
+        Octokit.Response<Octokit.SearchUsersResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  teams: {
+    /**
+     * The "Add team member" API (described below) is deprecated.
+     *
+     * We recommend using the [Add team membership API](https://developer.github.com/v3/teams/members/#add-or-update-team-membership) instead. It allows you to invite new organization members to your teams.
+     *
+     * Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/articles/github-s-products) in the GitHub Help documentation.
+     *
+     * To add someone to a team, the authenticated user must be a team maintainer in the team they're changing or be an owner of the organization that the team is associated with. The person being added to the team must be a member of the team's organization.
+     *
+     * **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)."
+     *
+     * Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     * @deprecated octokit.teams.addMember() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member
+     */
+    addMember: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsAddMemberParams): Promise<
+        Octokit.Response<Octokit.TeamsAddMemberResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/articles/github-s-products) in the GitHub Help documentation.
+     *
+     * If the user is already a member of the team's organization, this endpoint will add the user to the team. To add a membership between an organization member and a team, the authenticated user must be an organization owner or a maintainer of the team.
+     *
+     * **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)."
+     *
+     * If the user is unaffiliated with the team's organization, this endpoint will send an invitation to the user via email. This newly-created membership will be in the "pending" state until the user accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. To add a membership between an unaffiliated user and a team, the authenticated user must be an organization owner.
+     *
+     * If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a maintainer of the team.
+     */
+    addOrUpdateMembership: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsAddOrUpdateMembershipParams
+      ): Promise<Octokit.Response<Octokit.TeamsAddOrUpdateMembershipResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have `admin` permissions for the project. The project and team must be part of the same organization.
+     */
+    addOrUpdateProject: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsAddOrUpdateProjectParams
+      ): Promise<Octokit.Response<Octokit.TeamsAddOrUpdateProjectResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a `422 Unprocessable Entity` status if you attempt to add a repository to a team that is not owned by the organization.
+     *
+     * If you pass the `hellcat-preview` media type, you can modify repository permissions of child teams.
+     *
+     * Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     */
+    addOrUpdateRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsAddOrUpdateRepoParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: If you pass the `hellcat-preview` media type, repositories inherited through a parent team will be checked.
+     *
+     * You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://developer.github.com/v3/media/) via the `Accept` header:
+     */
+    checkManagesRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsCheckManagesRepoParams
+      ): Promise<Octokit.Response<Octokit.TeamsCheckManagesRepoResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * To create a team, the authenticated user must be a member or owner of `:org`. By default, organization members can create teams. Organization owners can limit team creation to organization owners. For more information, see "[Setting team creation permissions](https://help.github.com/en/articles/setting-team-creation-permissions-in-your-organization)."
+     */
+    create: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsCreateParamsDeprecatedPermission
+      ): Promise<Octokit.Response<Octokit.TeamsCreateResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.TeamsCreateParams): Promise<
+        Octokit.Response<Octokit.TeamsCreateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new discussion post on a team's page. OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createDiscussion: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsCreateDiscussionParams
+      ): Promise<Octokit.Response<Octokit.TeamsCreateDiscussionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Creates a new comment on a team discussion. OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     *
+     * This endpoint triggers [notifications](https://help.github.com/articles/about-notifications/). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://developer.github.com/v3/#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://developer.github.com/v3/guides/best-practices-for-integrators/#dealing-with-abuse-rate-limits)" for details.
+     */
+    createDiscussionComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsCreateDiscussionCommentParams
+      ): Promise<
+        Octokit.Response<Octokit.TeamsCreateDiscussionCommentResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * To delete a team, the authenticated user must be a team maintainer or an owner of the org associated with the team.
+     *
+     * If you are an organization owner and you pass the `hellcat-preview` media type, deleting a parent team will delete all of its child teams as well.
+     */
+    delete: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsDeleteParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Delete a discussion from a team's page. OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    deleteDiscussion: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsDeleteDiscussionParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Deletes a comment on a team discussion. OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    deleteDiscussionComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsDeleteDiscussionCommentParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    get: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsGetParams): Promise<
+        Octokit.Response<Octokit.TeamsGetResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Gets a team using the team's `slug`. GitHub generates the `slug` from the team `name`.
+     */
+    getByName: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsGetByNameParams): Promise<
+        Octokit.Response<Octokit.TeamsGetByNameResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Get a specific discussion on a team's page. OAuth access tokens require the `read:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    getDiscussion: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsGetDiscussionParams
+      ): Promise<Octokit.Response<Octokit.TeamsGetDiscussionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Get a specific comment on a team discussion. OAuth access tokens require the `read:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    getDiscussionComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsGetDiscussionCommentParams
+      ): Promise<Octokit.Response<Octokit.TeamsGetDiscussionCommentResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The "Get team member" API (described below) is deprecated.
+     *
+     * We recommend using the [Get team membership API](https://developer.github.com/v3/teams/members/#get-team-membership) instead. It allows you to get both active and pending memberships.
+     *
+     * To list members in a team, the team must be visible to the authenticated user.
+     * @deprecated octokit.teams.getMember() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member
+     */
+    getMember: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsGetMemberParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If you pass the `hellcat-preview` media type, team members will include the members of child teams.
+     *
+     * To get a user's membership with a team, the team must be visible to the authenticated user.
+     *
+     * **Note:** The `role` for organization owners returns as `maintainer`. For more information about `maintainer` roles, see [Create team](https://developer.github.com/v3/teams#create-team).
+     */
+    getMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsGetMembershipParams
+      ): Promise<Octokit.Response<Octokit.TeamsGetMembershipResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsListParams): Promise<
+        Octokit.Response<Octokit.TeamsListResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * At this time, the `hellcat-preview` media type is required to use this endpoint.
+     */
+    listChild: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsListChildParams): Promise<
+        Octokit.Response<Octokit.TeamsListChildResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all comments on a team discussion. OAuth access tokens require the `read:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    listDiscussionComments: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsListDiscussionCommentsParams
+      ): Promise<Octokit.Response<Octokit.TeamsListDiscussionCommentsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all discussions on a team's page. OAuth access tokens require the `read:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    listDiscussions: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsListDiscussionsParams
+      ): Promise<Octokit.Response<Octokit.TeamsListDiscussionsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List all of the teams across all of the organizations to which the authenticated user belongs. This method requires `user`, `repo`, or `read:org` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/) when authenticating via [OAuth](https://developer.github.com/apps/building-oauth-apps/).
+     */
+    listForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsListForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.TeamsListForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If you pass the `hellcat-preview` media type, team members will include the members of child teams.
+     */
+    listMembers: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsListMembersParams
+      ): Promise<Octokit.Response<Octokit.TeamsListMembersResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The return hash contains a `role` field which refers to the Organization Invitation role and will be one of the following values: `direct_member`, `admin`, `billing_manager`, `hiring_manager`, or `reinstate`. If the invitee is not a GitHub member, the `login` field in the return hash will be `null`.
+     */
+    listPendingInvitations: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsListPendingInvitationsParams
+      ): Promise<Octokit.Response<Octokit.TeamsListPendingInvitationsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the organization projects for a team. If you pass the `hellcat-preview` media type, the response will include projects inherited from a parent team.
+     */
+    listProjects: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsListProjectsParams
+      ): Promise<Octokit.Response<Octokit.TeamsListProjectsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note**: If you pass the `hellcat-preview` media type, the response will include any repositories inherited through a parent team.
+     */
+    listRepos: {
+      (params?: Octokit.RequestOptions & Octokit.TeamsListReposParams): Promise<
+        Octokit.Response<Octokit.TeamsListReposResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * The "Remove team member" API (described below) is deprecated.
+     *
+     * We recommend using the [Remove team membership endpoint](https://developer.github.com/v3/teams/members/#remove-team-membership) instead. It allows you to remove both active and pending memberships.
+     *
+     * Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/articles/github-s-products) in the GitHub Help documentation.
+     *
+     * To remove a team member, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. Removing a team member does not delete the user, it just removes them from the team.
+     *
+     * **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)."
+     * @deprecated octokit.teams.removeMember() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member
+     */
+    removeMember: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsRemoveMemberParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/articles/github-s-products) in the GitHub Help documentation.
+     *
+     * To remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. Removing team membership does not delete the user, it just removes their membership from the team.
+     *
+     * **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)."
+     */
+    removeMembership: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsRemoveMembershipParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have `read` access to both the team and project, or `admin` access to the team or project. **Note:** This endpoint removes the project from the team, but does not delete it.
+     */
+    removeProject: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsRemoveProjectParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. NOTE: This does not delete the repository, it just removes it from the team.
+     */
+    removeRepo: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsRemoveRepoParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Checks whether a team has `read`, `write`, or `admin` permissions for an organization project. If you pass the `hellcat-preview` media type, the response will include projects inherited from a parent team.
+     */
+    reviewProject: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsReviewProjectParams
+      ): Promise<Octokit.Response<Octokit.TeamsReviewProjectResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * To edit a team, the authenticated user must either be an owner of the org that the team is associated with, or a maintainer of the team.
+     *
+     * **Note:** With nested teams, the `privacy` for parent teams cannot be `secret`.
+     */
+    update: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsUpdateParamsDeprecatedPermission
+      ): Promise<Octokit.Response<Octokit.TeamsUpdateResponse>>;
+      (params?: Octokit.RequestOptions & Octokit.TeamsUpdateParams): Promise<
+        Octokit.Response<Octokit.TeamsUpdateResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    updateDiscussion: {
+      (
+        params?: Octokit.RequestOptions & Octokit.TeamsUpdateDiscussionParams
+      ): Promise<Octokit.Response<Octokit.TeamsUpdateDiscussionResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Edits the body text of a discussion comment. OAuth access tokens require the `write:discussion` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    updateDiscussionComment: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.TeamsUpdateDiscussionCommentParams
+      ): Promise<
+        Octokit.Response<Octokit.TeamsUpdateDiscussionCommentResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+  users: {
+    /**
+     * This endpoint is accessible with the `user` scope.
+     */
+    addEmails: {
+      (params?: Octokit.RequestOptions & Octokit.UsersAddEmailsParams): Promise<
+        Octokit.Response<Octokit.UsersAddEmailsResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    block: {
+      (params?: Octokit.RequestOptions & Octokit.UsersBlockParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * If the user is blocked:
+     *
+     * If the user is not blocked:
+     */
+    checkBlocked: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersCheckBlockedParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    checkFollowing: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersCheckFollowingParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    checkFollowingForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.UsersCheckFollowingForUserParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Adds a GPG key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least `write:gpg_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    createGpgKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersCreateGpgKeyParams
+      ): Promise<Octokit.Response<Octokit.UsersCreateGpgKeyResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Adds a public SSH key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least `write:public_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    createPublicKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersCreatePublicKeyParams
+      ): Promise<Octokit.Response<Octokit.UsersCreatePublicKeyResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * This endpoint is accessible with the `user` scope.
+     */
+    deleteEmails: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersDeleteEmailsParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes a GPG key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least `admin:gpg_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    deleteGpgKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersDeleteGpgKeyParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Removes a public SSH key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least `admin:public_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    deletePublicKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersDeletePublicKeyParams
+      ): Promise<Octokit.AnyResponse>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+     *
+     * Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the `user:follow` scope.
+     */
+    follow: {
+      (params?: Octokit.RequestOptions & Octokit.UsersFollowParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists public and private profile information when authenticated through basic auth or OAuth with the `user` scope.
+     *
+     * Lists public profile information when authenticated through OAuth without the `user` scope.
+     */
+    getAuthenticated: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.UsersGetAuthenticatedResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Provides publicly available information about someone with a GitHub account.
+     *
+     * GitHub Apps with the `Plan` user permission can use this endpoint to retrieve information about a user's GitHub plan. The GitHub App must be authenticated as a user. See "[Identifying and authorizing users for GitHub Apps](https://developer.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)" for details about authentication. For an example response, see "[Response with GitHub plan information](https://developer.github.com/v3/users/#response-with-github-plan-information)."
+     *
+     * The `email` key in the following response is the publicly visible email address from your GitHub [profile page](https://github.com/settings/profile). When setting up your profile, you can select a primary email address to be “public” which provides an email entry for this endpoint. If you do not set a public email address for `email`, then it will have a value of `null`. You only see publicly visible email addresses when authenticated with GitHub. For more information, see [Authentication](https://developer.github.com/v3/#authentication).
+     *
+     * The Emails API enables you to list all of your email addresses, and toggle a primary email to be visible publicly. For more information, see "[Emails API](https://developer.github.com/v3/users/emails/)".
+     */
+    getByUsername: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersGetByUsernameParams
+      ): Promise<Octokit.Response<Octokit.UsersGetByUsernameResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Provides hovercard information when authenticated through basic auth or OAuth with the `repo` scope. You can find out more about someone in relation to their pull requests, issues, repositories, and organizations.
+     *
+     * The `subject_type` and `subject_id` parameters provide context for the person's hovercard, which returns more information than without the parameters. For example, if you wanted to find out more about `octocat` who owns the `Spoon-Knife` repository via cURL, it would look like this:
+     */
+    getContextForUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersGetContextForUserParams
+      ): Promise<Octokit.Response<Octokit.UsersGetContextForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * View extended details for a single GPG key. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:gpg_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    getGpgKey: {
+      (params?: Octokit.RequestOptions & Octokit.UsersGetGpgKeyParams): Promise<
+        Octokit.Response<Octokit.UsersGetGpgKeyResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * View extended details for a single public SSH key. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:public_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    getPublicKey: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersGetPublicKeyParams
+      ): Promise<Octokit.Response<Octokit.UsersGetPublicKeyResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists all users, in the order that they signed up on GitHub. This list includes personal user accounts and organization accounts.
+     *
+     * Note: Pagination is powered exclusively by the `since` parameter. Use the [Link header](https://developer.github.com/v3/#link-header) to get the URL for the next page of users.
+     */
+    list: {
+      (params?: Octokit.RequestOptions & Octokit.UsersListParams): Promise<
+        Octokit.Response<Octokit.UsersListResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * List the users you've blocked on your personal account.
+     */
+    listBlocked: {
+      (params?: Octokit.RequestOptions & Octokit.EmptyParams): Promise<
+        Octokit.Response<Octokit.UsersListBlockedResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists all of your email addresses, and specifies which one is visible to the public. This endpoint is accessible with the `user:email` scope.
+     */
+    listEmails: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersListEmailsParams
+      ): Promise<Octokit.Response<Octokit.UsersListEmailsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listFollowersForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.UsersListFollowersForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.UsersListFollowersForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listFollowersForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.UsersListFollowersForUserParams
+      ): Promise<Octokit.Response<Octokit.UsersListFollowersForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listFollowingForAuthenticatedUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.UsersListFollowingForAuthenticatedUserParams
+      ): Promise<
+        Octokit.Response<Octokit.UsersListFollowingForAuthenticatedUserResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    listFollowingForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.UsersListFollowingForUserParams
+      ): Promise<Octokit.Response<Octokit.UsersListFollowingForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the current user's GPG keys. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:gpg_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    listGpgKeys: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersListGpgKeysParams
+      ): Promise<Octokit.Response<Octokit.UsersListGpgKeysResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the GPG keys for a user. This information is accessible by anyone.
+     */
+    listGpgKeysForUser: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersListGpgKeysForUserParams
+      ): Promise<Octokit.Response<Octokit.UsersListGpgKeysForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists your publicly visible email address, which you can set with the [Toggle primary email visibility](https://developer.github.com/v3/users/emails/#toggle-primary-email-visibility) endpoint. This endpoint is accessible with the `user:email` scope.
+     */
+    listPublicEmails: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersListPublicEmailsParams
+      ): Promise<Octokit.Response<Octokit.UsersListPublicEmailsResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the public SSH keys for the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:public_key` [scope](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/).
+     */
+    listPublicKeys: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersListPublicKeysParams
+      ): Promise<Octokit.Response<Octokit.UsersListPublicKeysResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Lists the _verified_ public SSH keys for a user. This is accessible by anyone.
+     */
+    listPublicKeysForUser: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.UsersListPublicKeysForUserParams
+      ): Promise<Octokit.Response<Octokit.UsersListPublicKeysForUserResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Sets the visibility for your primary email addresses.
+     */
+    togglePrimaryEmailVisibility: {
+      (
+        params?: Octokit.RequestOptions &
+          Octokit.UsersTogglePrimaryEmailVisibilityParams
+      ): Promise<
+        Octokit.Response<Octokit.UsersTogglePrimaryEmailVisibilityResponse>
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+
+    unblock: {
+      (params?: Octokit.RequestOptions & Octokit.UsersUnblockParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the `user:follow` scope.
+     */
+    unfollow: {
+      (params?: Octokit.RequestOptions & Octokit.UsersUnfollowParams): Promise<
+        Octokit.AnyResponse
+      >;
+
+      endpoint: Octokit.Endpoint;
+    };
+    /**
+     * **Note:** If your email is set to private and you send an `email` parameter as part of this request to update your profile, your privacy settings are still enforced: the email address will not be displayed on your public profile or via the API.
+     */
+    updateAuthenticated: {
+      (
+        params?: Octokit.RequestOptions & Octokit.UsersUpdateAuthenticatedParams
+      ): Promise<Octokit.Response<Octokit.UsersUpdateAuthenticatedResponse>>;
+
+      endpoint: Octokit.Endpoint;
+    };
+  };
+}
+
+export = Octokit;
diff --git a/setup-maven/node_modules/@octokit/rest/index.js b/setup-maven/node_modules/@octokit/rest/index.js
new file mode 100644
index 0000000..5a228f3
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/index.js
@@ -0,0 +1,15 @@
+const Octokit = require("./lib/core");
+
+const CORE_PLUGINS = [
+  require("./plugins/log"),
+  require("./plugins/authentication-deprecated"), // deprecated: remove in v17
+  require("./plugins/authentication"),
+  require("./plugins/pagination"),
+  require("./plugins/register-endpoints"),
+  require("./plugins/rest-api-endpoints"),
+  require("./plugins/validate"),
+
+  require("octokit-pagination-methods") // deprecated: remove in v17
+];
+
+module.exports = Octokit.plugin(CORE_PLUGINS);
diff --git a/setup-maven/node_modules/@octokit/rest/lib/constructor.js b/setup-maven/node_modules/@octokit/rest/lib/constructor.js
new file mode 100644
index 0000000..d83cf6b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/lib/constructor.js
@@ -0,0 +1,29 @@
+module.exports = Octokit;
+
+const { request } = require("@octokit/request");
+const Hook = require("before-after-hook");
+
+const parseClientOptions = require("./parse-client-options");
+
+function Octokit(plugins, options) {
+  options = options || {};
+  const hook = new Hook.Collection();
+  const log = Object.assign(
+    {
+      debug: () => {},
+      info: () => {},
+      warn: console.warn,
+      error: console.error
+    },
+    options && options.log
+  );
+  const api = {
+    hook,
+    log,
+    request: request.defaults(parseClientOptions(options, log, hook))
+  };
+
+  plugins.forEach(pluginFunction => pluginFunction(api, options));
+
+  return api;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/lib/core.js b/setup-maven/node_modules/@octokit/rest/lib/core.js
new file mode 100644
index 0000000..4943ffa
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/lib/core.js
@@ -0,0 +1,3 @@
+const factory = require("./factory");
+
+module.exports = factory();
diff --git a/setup-maven/node_modules/@octokit/rest/lib/factory.js b/setup-maven/node_modules/@octokit/rest/lib/factory.js
new file mode 100644
index 0000000..5dc2065
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/lib/factory.js
@@ -0,0 +1,10 @@
+module.exports = factory;
+
+const Octokit = require("./constructor");
+const registerPlugin = require("./register-plugin");
+
+function factory(plugins) {
+  const Api = Octokit.bind(null, plugins || []);
+  Api.plugin = registerPlugin.bind(null, plugins || []);
+  return Api;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/lib/parse-client-options.js b/setup-maven/node_modules/@octokit/rest/lib/parse-client-options.js
new file mode 100644
index 0000000..c7c097d
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/lib/parse-client-options.js
@@ -0,0 +1,89 @@
+module.exports = parseOptions;
+
+const { Deprecation } = require("deprecation");
+const { getUserAgent } = require("universal-user-agent");
+const once = require("once");
+
+const pkg = require("../package.json");
+
+const deprecateOptionsTimeout = once((log, deprecation) =>
+  log.warn(deprecation)
+);
+const deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation));
+const deprecateOptionsHeaders = once((log, deprecation) =>
+  log.warn(deprecation)
+);
+
+function parseOptions(options, log, hook) {
+  if (options.headers) {
+    options.headers = Object.keys(options.headers).reduce((newObj, key) => {
+      newObj[key.toLowerCase()] = options.headers[key];
+      return newObj;
+    }, {});
+  }
+
+  const clientDefaults = {
+    headers: options.headers || {},
+    request: options.request || {},
+    mediaType: {
+      previews: [],
+      format: ""
+    }
+  };
+
+  if (options.baseUrl) {
+    clientDefaults.baseUrl = options.baseUrl;
+  }
+
+  if (options.userAgent) {
+    clientDefaults.headers["user-agent"] = options.userAgent;
+  }
+
+  if (options.previews) {
+    clientDefaults.mediaType.previews = options.previews;
+  }
+
+  if (options.timeZone) {
+    clientDefaults.headers["time-zone"] = options.timeZone;
+  }
+
+  if (options.timeout) {
+    deprecateOptionsTimeout(
+      log,
+      new Deprecation(
+        "[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request"
+      )
+    );
+    clientDefaults.request.timeout = options.timeout;
+  }
+
+  if (options.agent) {
+    deprecateOptionsAgent(
+      log,
+      new Deprecation(
+        "[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request"
+      )
+    );
+    clientDefaults.request.agent = options.agent;
+  }
+
+  if (options.headers) {
+    deprecateOptionsHeaders(
+      log,
+      new Deprecation(
+        "[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request"
+      )
+    );
+  }
+
+  const userAgentOption = clientDefaults.headers["user-agent"];
+  const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`;
+
+  clientDefaults.headers["user-agent"] = [userAgentOption, defaultUserAgent]
+    .filter(Boolean)
+    .join(" ");
+
+  clientDefaults.request.hook = hook.bind(null, "request");
+
+  return clientDefaults;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/lib/register-plugin.js b/setup-maven/node_modules/@octokit/rest/lib/register-plugin.js
new file mode 100644
index 0000000..c1ae775
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/lib/register-plugin.js
@@ -0,0 +1,9 @@
+module.exports = registerPlugin;
+
+const factory = require("./factory");
+
+function registerPlugin(plugins, pluginFunction) {
+  return factory(
+    plugins.includes(pluginFunction) ? plugins : plugins.concat(pluginFunction)
+  );
+}
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/LICENSE.md b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/LICENSE.md
new file mode 100644
index 0000000..f105ab0
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/LICENSE.md
@@ -0,0 +1,7 @@
+# [ISC License](https://spdx.org/licenses/ISC)
+
+Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m)
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/README.md b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/README.md
new file mode 100644
index 0000000..d00d14c
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/README.md
@@ -0,0 +1,25 @@
+# universal-user-agent
+
+> Get a user agent string in both browser and node
+
+[![@latest](https://img.shields.io/npm/v/universal-user-agent.svg)](https://www.npmjs.com/package/universal-user-agent)
+[![Build Status](https://travis-ci.com/gr2m/universal-user-agent.svg?branch=master)](https://travis-ci.com/gr2m/universal-user-agent)
+[![Greenkeeper](https://badges.greenkeeper.io/gr2m/universal-user-agent.svg)](https://greenkeeper.io/)
+
+```js
+const { getUserAgent } = require("universal-user-agent");
+// or import { getUserAgent } from "universal-user-agent";
+
+const userAgent = getUserAgent();
+// userAgent will look like this
+// in browser: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0"
+// in node: Node.js/v8.9.4 (macOS High Sierra; x64)
+```
+
+## Credits
+
+The Node implementation was originally inspired by [default-user-agent](https://www.npmjs.com/package/default-user-agent).
+
+## License
+
+[ISC](LICENSE.md)
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js
new file mode 100644
index 0000000..80a0710
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var osName = _interopDefault(require('os-name'));
+
+function getUserAgent() {
+  try {
+    return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
+  } catch (error) {
+    if (/wmic os get Caption/.test(error.message)) {
+      return "Windows <version undetectable>";
+    }
+
+    throw error;
+  }
+}
+
+exports.getUserAgent = getUserAgent;
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js.map b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js.map
new file mode 100644
index 0000000..aff09ec
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/node.js"],"sourcesContent":["import osName from \"os-name\";\nexport function getUserAgent() {\n    try {\n        return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;\n    }\n    catch (error) {\n        if (/wmic os get Caption/.test(error.message)) {\n            return \"Windows <version undetectable>\";\n        }\n        throw error;\n    }\n}\n"],"names":["getUserAgent","process","version","substr","osName","arch","error","test","message"],"mappings":";;;;;;;;AACO,SAASA,YAAT,GAAwB;MACvB;WACQ,WAAUC,OAAO,CAACC,OAAR,CAAgBC,MAAhB,CAAuB,CAAvB,CAA0B,KAAIC,MAAM,EAAG,KAAIH,OAAO,CAACI,IAAK,GAA1E;GADJ,CAGA,OAAOC,KAAP,EAAc;QACN,sBAAsBC,IAAtB,CAA2BD,KAAK,CAACE,OAAjC,CAAJ,EAA+C;aACpC,gCAAP;;;UAEEF,KAAN;;;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/browser.js b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/browser.js
new file mode 100644
index 0000000..6f52232
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/browser.js
@@ -0,0 +1,3 @@
+export function getUserAgent() {
+    return navigator.userAgent;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/index.js b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/index.js
new file mode 100644
index 0000000..c6253f5
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/index.js
@@ -0,0 +1 @@
+export { getUserAgent } from "./node";
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/node.js b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/node.js
new file mode 100644
index 0000000..8b70a03
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-src/node.js
@@ -0,0 +1,12 @@
+import osName from "os-name";
+export function getUserAgent() {
+    try {
+        return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
+    }
+    catch (error) {
+        if (/wmic os get Caption/.test(error.message)) {
+            return "Windows <version undetectable>";
+        }
+        throw error;
+    }
+}
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/browser.d.ts b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/browser.d.ts
new file mode 100644
index 0000000..a7bb1c4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/browser.d.ts
@@ -0,0 +1 @@
+export declare function getUserAgent(): string;
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/index.d.ts b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/index.d.ts
new file mode 100644
index 0000000..c6253f5
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/index.d.ts
@@ -0,0 +1 @@
+export { getUserAgent } from "./node";
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/node.d.ts b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/node.d.ts
new file mode 100644
index 0000000..a7bb1c4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-types/node.d.ts
@@ -0,0 +1 @@
+export declare function getUserAgent(): string;
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-web/index.js b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-web/index.js
new file mode 100644
index 0000000..11ec79b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-web/index.js
@@ -0,0 +1,6 @@
+function getUserAgent() {
+    return navigator.userAgent;
+}
+
+export { getUserAgent };
+//# sourceMappingURL=index.js.map
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-web/index.js.map b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-web/index.js.map
new file mode 100644
index 0000000..549407e
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/dist-web/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../dist-src/browser.js"],"sourcesContent":["export function getUserAgent() {\n    return navigator.userAgent;\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,GAAG;IAC3B,OAAO,SAAS,CAAC,SAAS,CAAC;CAC9B;;;;"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/package.json b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/package.json
new file mode 100644
index 0000000..c9a4287
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/node_modules/universal-user-agent/package.json
@@ -0,0 +1,65 @@
+{
+  "_from": "universal-user-agent@^4.0.0",
+  "_id": "universal-user-agent@4.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==",
+  "_location": "/@octokit/rest/universal-user-agent",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "universal-user-agent@^4.0.0",
+    "name": "universal-user-agent",
+    "escapedName": "universal-user-agent",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz",
+  "_shasum": "27da2ec87e32769619f68a14996465ea1cb9df16",
+  "_spec": "universal-user-agent@^4.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "bugs": {
+    "url": "https://github.com/gr2m/universal-user-agent/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "os-name": "^3.1.0"
+  },
+  "deprecated": false,
+  "description": "Get a user agent string in both browser and node",
+  "devDependencies": {
+    "@gr2m/pika-plugin-build-web": "^0.6.0-issue-84.1",
+    "@pika/pack": "^0.5.0",
+    "@pika/plugin-build-node": "^0.6.0",
+    "@pika/plugin-ts-standard-pkg": "^0.6.0",
+    "@types/jest": "^24.0.18",
+    "jest": "^24.9.0",
+    "prettier": "^1.18.2",
+    "semantic-release": "^15.9.15",
+    "ts-jest": "^24.0.2",
+    "typescript": "^3.6.2"
+  },
+  "files": [
+    "dist-*/",
+    "bin/"
+  ],
+  "homepage": "https://github.com/gr2m/universal-user-agent#readme",
+  "keywords": [],
+  "license": "ISC",
+  "main": "dist-node/index.js",
+  "module": "dist-web/index.js",
+  "name": "universal-user-agent",
+  "pika": true,
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gr2m/universal-user-agent.git"
+  },
+  "sideEffects": false,
+  "source": "dist-src/index.js",
+  "types": "dist-types/index.d.ts",
+  "version": "4.0.0"
+}
diff --git a/setup-maven/node_modules/@octokit/rest/package.json b/setup-maven/node_modules/@octokit/rest/package.json
new file mode 100644
index 0000000..5ed7de4
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/package.json
@@ -0,0 +1,173 @@
+{
+  "_from": "@octokit/rest@^16.15.0",
+  "_id": "@octokit/rest@16.35.0",
+  "_inBundle": false,
+  "_integrity": "sha512-9ShFqYWo0CLoGYhA1FdtdykJuMzS/9H6vSbbQWDX4pWr4p9v+15MsH/wpd/3fIU+tSxylaNO48+PIHqOkBRx3w==",
+  "_location": "/@octokit/rest",
+  "_phantomChildren": {
+    "os-name": "3.1.0"
+  },
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@octokit/rest@^16.15.0",
+    "name": "@octokit/rest",
+    "escapedName": "@octokit%2frest",
+    "scope": "@octokit",
+    "rawSpec": "^16.15.0",
+    "saveSpec": null,
+    "fetchSpec": "^16.15.0"
+  },
+  "_requiredBy": [
+    "/@actions/github"
+  ],
+  "_resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.35.0.tgz",
+  "_shasum": "7ccc1f802f407d5b8eb21768c6deca44e7b4c0d8",
+  "_spec": "@octokit/rest@^16.15.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@actions/github",
+  "author": {
+    "name": "Gregor Martynus",
+    "url": "https://github.com/gr2m"
+  },
+  "bugs": {
+    "url": "https://github.com/octokit/rest.js/issues"
+  },
+  "bundleDependencies": false,
+  "bundlesize": [
+    {
+      "path": "./dist/octokit-rest.min.js.gz",
+      "maxSize": "33 kB"
+    }
+  ],
+  "contributors": [
+    {
+      "name": "Mike de Boer",
+      "email": "info@mikedeboer.nl"
+    },
+    {
+      "name": "Fabian Jakobs",
+      "email": "fabian@c9.io"
+    },
+    {
+      "name": "Joe Gallo",
+      "email": "joe@brassafrax.com"
+    },
+    {
+      "name": "Gregor Martynus",
+      "url": "https://github.com/gr2m"
+    }
+  ],
+  "dependencies": {
+    "@octokit/request": "^5.2.0",
+    "@octokit/request-error": "^1.0.2",
+    "atob-lite": "^2.0.0",
+    "before-after-hook": "^2.0.0",
+    "btoa-lite": "^1.0.0",
+    "deprecation": "^2.0.0",
+    "lodash.get": "^4.4.2",
+    "lodash.set": "^4.3.2",
+    "lodash.uniq": "^4.5.0",
+    "octokit-pagination-methods": "^1.1.0",
+    "once": "^1.4.0",
+    "universal-user-agent": "^4.0.0"
+  },
+  "deprecated": false,
+  "description": "GitHub REST API client for Node.js",
+  "devDependencies": {
+    "@gimenete/type-writer": "^0.1.3",
+    "@octokit/fixtures-server": "^5.0.6",
+    "@octokit/graphql": "^4.2.0",
+    "@types/node": "^12.0.0",
+    "bundlesize": "^0.18.0",
+    "chai": "^4.1.2",
+    "compression-webpack-plugin": "^3.0.0",
+    "cypress": "^3.0.0",
+    "glob": "^7.1.2",
+    "http-proxy-agent": "^2.1.0",
+    "lodash.camelcase": "^4.3.0",
+    "lodash.merge": "^4.6.1",
+    "lodash.upperfirst": "^4.3.1",
+    "mkdirp": "^0.5.1",
+    "mocha": "^6.0.0",
+    "mustache": "^3.0.0",
+    "nock": "^11.3.3",
+    "npm-run-all": "^4.1.2",
+    "nyc": "^14.0.0",
+    "prettier": "^1.14.2",
+    "proxy": "^1.0.0",
+    "semantic-release": "^15.0.0",
+    "sinon": "^7.2.4",
+    "sinon-chai": "^3.0.0",
+    "sort-keys": "^4.0.0",
+    "string-to-arraybuffer": "^1.0.0",
+    "string-to-jsdoc-comment": "^1.0.0",
+    "typescript": "^3.3.1",
+    "webpack": "^4.0.0",
+    "webpack-bundle-analyzer": "^3.0.0",
+    "webpack-cli": "^3.0.0"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts",
+    "lib",
+    "plugins"
+  ],
+  "homepage": "https://github.com/octokit/rest.js#readme",
+  "keywords": [
+    "octokit",
+    "github",
+    "rest",
+    "api-client"
+  ],
+  "license": "MIT",
+  "name": "@octokit/rest",
+  "nyc": {
+    "ignore": [
+      "test"
+    ]
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "release": {
+    "publish": [
+      "@semantic-release/npm",
+      {
+        "path": "@semantic-release/github",
+        "assets": [
+          "dist/*",
+          "!dist/*.map.gz"
+        ]
+      }
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/octokit/rest.js.git"
+  },
+  "scripts": {
+    "build": "npm-run-all build:*",
+    "build:browser": "npm-run-all build:browser:*",
+    "build:browser:development": "webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json",
+    "build:browser:production": "webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map",
+    "build:ts": "npm run -s update-endpoints:typescript",
+    "coverage": "nyc report --reporter=html && open coverage/index.html",
+    "generate-bundle-report": "webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html",
+    "lint": "prettier --check '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json",
+    "lint:fix": "prettier --write '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json",
+    "postvalidate:ts": "tsc --noEmit --target es6 test/typescript-validate.ts",
+    "prebuild:browser": "mkdirp dist/",
+    "pretest": "npm run -s lint",
+    "prevalidate:ts": "npm run -s build:ts",
+    "start-fixtures-server": "octokit-fixtures-server",
+    "test": "nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"",
+    "test:browser": "cypress run --browser chrome",
+    "update-endpoints": "npm-run-all update-endpoints:*",
+    "update-endpoints:code": "node scripts/update-endpoints/code",
+    "update-endpoints:fetch-json": "node scripts/update-endpoints/fetch-json",
+    "update-endpoints:typescript": "node scripts/update-endpoints/typescript",
+    "validate:ts": "tsc --target es6 --noImplicitAny index.d.ts"
+  },
+  "types": "index.d.ts",
+  "version": "16.35.0"
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/authenticate.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/authenticate.js
new file mode 100644
index 0000000..86ce9e9
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/authenticate.js
@@ -0,0 +1,52 @@
+module.exports = authenticate;
+
+const { Deprecation } = require("deprecation");
+const once = require("once");
+
+const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));
+
+function authenticate(state, options) {
+  deprecateAuthenticate(
+    state.octokit.log,
+    new Deprecation(
+      '[@octokit/rest] octokit.authenticate() is deprecated. Use "auth" constructor option instead.'
+    )
+  );
+
+  if (!options) {
+    state.auth = false;
+    return;
+  }
+
+  switch (options.type) {
+    case "basic":
+      if (!options.username || !options.password) {
+        throw new Error(
+          "Basic authentication requires both a username and password to be set"
+        );
+      }
+      break;
+
+    case "oauth":
+      if (!options.token && !(options.key && options.secret)) {
+        throw new Error(
+          "OAuth2 authentication requires a token or key & secret to be set"
+        );
+      }
+      break;
+
+    case "token":
+    case "app":
+      if (!options.token) {
+        throw new Error("Token authentication requires a token to be set");
+      }
+      break;
+
+    default:
+      throw new Error(
+        "Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'"
+      );
+  }
+
+  state.auth = options;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/before-request.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/before-request.js
new file mode 100644
index 0000000..dbb83ab
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/before-request.js
@@ -0,0 +1,43 @@
+module.exports = authenticationBeforeRequest;
+
+const btoa = require("btoa-lite");
+const uniq = require("lodash.uniq");
+
+function authenticationBeforeRequest(state, options) {
+  if (!state.auth.type) {
+    return;
+  }
+
+  if (state.auth.type === "basic") {
+    const hash = btoa(`${state.auth.username}:${state.auth.password}`);
+    options.headers.authorization = `Basic ${hash}`;
+    return;
+  }
+
+  if (state.auth.type === "token") {
+    options.headers.authorization = `token ${state.auth.token}`;
+    return;
+  }
+
+  if (state.auth.type === "app") {
+    options.headers.authorization = `Bearer ${state.auth.token}`;
+    const acceptHeaders = options.headers.accept
+      .split(",")
+      .concat("application/vnd.github.machine-man-preview+json");
+    options.headers.accept = uniq(acceptHeaders)
+      .filter(Boolean)
+      .join(",");
+    return;
+  }
+
+  options.url += options.url.indexOf("?") === -1 ? "?" : "&";
+
+  if (state.auth.token) {
+    options.url += `access_token=${encodeURIComponent(state.auth.token)}`;
+    return;
+  }
+
+  const key = encodeURIComponent(state.auth.key);
+  const secret = encodeURIComponent(state.auth.secret);
+  options.url += `client_id=${key}&client_secret=${secret}`;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/index.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/index.js
new file mode 100644
index 0000000..7e0cc4f
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/index.js
@@ -0,0 +1,31 @@
+module.exports = authenticationPlugin;
+
+const { Deprecation } = require("deprecation");
+const once = require("once");
+
+const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));
+
+const authenticate = require("./authenticate");
+const beforeRequest = require("./before-request");
+const requestError = require("./request-error");
+
+function authenticationPlugin(octokit, options) {
+  if (options.auth) {
+    octokit.authenticate = () => {
+      deprecateAuthenticate(
+        octokit.log,
+        new Deprecation(
+          '[@octokit/rest] octokit.authenticate() is deprecated and has no effect when "auth" option is set on Octokit constructor'
+        )
+      );
+    };
+    return;
+  }
+  const state = {
+    octokit,
+    auth: false
+  };
+  octokit.authenticate = authenticate.bind(null, state);
+  octokit.hook.before("request", beforeRequest.bind(null, state));
+  octokit.hook.error("request", requestError.bind(null, state));
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/request-error.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/request-error.js
new file mode 100644
index 0000000..d2e7baa
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication-deprecated/request-error.js
@@ -0,0 +1,55 @@
+module.exports = authenticationRequestError;
+
+const { RequestError } = require("@octokit/request-error");
+
+function authenticationRequestError(state, error, options) {
+  /* istanbul ignore next */
+  if (!error.headers) throw error;
+
+  const otpRequired = /required/.test(error.headers["x-github-otp"] || "");
+  // handle "2FA required" error only
+  if (error.status !== 401 || !otpRequired) {
+    throw error;
+  }
+
+  if (
+    error.status === 401 &&
+    otpRequired &&
+    error.request &&
+    error.request.headers["x-github-otp"]
+  ) {
+    throw new RequestError(
+      "Invalid one-time password for two-factor authentication",
+      401,
+      {
+        headers: error.headers,
+        request: options
+      }
+    );
+  }
+
+  if (typeof state.auth.on2fa !== "function") {
+    throw new RequestError(
+      "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication",
+      401,
+      {
+        headers: error.headers,
+        request: options
+      }
+    );
+  }
+
+  return Promise.resolve()
+    .then(() => {
+      return state.auth.on2fa();
+    })
+    .then(oneTimePassword => {
+      const newOptions = Object.assign(options, {
+        headers: Object.assign(
+          { "x-github-otp": oneTimePassword },
+          options.headers
+        )
+      });
+      return state.octokit.request(newOptions);
+    });
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication/before-request.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication/before-request.js
new file mode 100644
index 0000000..c18df95
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication/before-request.js
@@ -0,0 +1,65 @@
+module.exports = authenticationBeforeRequest;
+
+const btoa = require("btoa-lite");
+
+const withAuthorizationPrefix = require("./with-authorization-prefix");
+
+function authenticationBeforeRequest(state, options) {
+  if (typeof state.auth === "string") {
+    options.headers.authorization = withAuthorizationPrefix(state.auth);
+
+    // https://developer.github.com/v3/previews/#integrations
+    if (
+      /^bearer /i.test(state.auth) &&
+      !/machine-man/.test(options.headers.accept)
+    ) {
+      const acceptHeaders = options.headers.accept
+        .split(",")
+        .concat("application/vnd.github.machine-man-preview+json");
+      options.headers.accept = acceptHeaders.filter(Boolean).join(",");
+    }
+
+    return;
+  }
+
+  if (state.auth.username) {
+    const hash = btoa(`${state.auth.username}:${state.auth.password}`);
+    options.headers.authorization = `Basic ${hash}`;
+    if (state.otp) {
+      options.headers["x-github-otp"] = state.otp;
+    }
+    return;
+  }
+
+  if (state.auth.clientId) {
+    // There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as
+    // Basic Authorization instead of query parameters. The only routes where that applies share the same
+    // URL though: `/applications/:client_id/tokens/:access_token`.
+    //
+    //  1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization)
+    //  2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization)
+    //  3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application)
+    //
+    // We identify by checking the URL. It must merge both "/applications/:client_id/tokens/:access_token"
+    // as well as "/applications/123/tokens/token456"
+    if (/\/applications\/:?[\w_]+\/tokens\/:?[\w_]+($|\?)/.test(options.url)) {
+      const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`);
+      options.headers.authorization = `Basic ${hash}`;
+      return;
+    }
+
+    options.url += options.url.indexOf("?") === -1 ? "?" : "&";
+    options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`;
+    return;
+  }
+
+  return Promise.resolve()
+
+    .then(() => {
+      return state.auth();
+    })
+
+    .then(authorization => {
+      options.headers.authorization = withAuthorizationPrefix(authorization);
+    });
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication/index.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication/index.js
new file mode 100644
index 0000000..6a51d42
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication/index.js
@@ -0,0 +1,21 @@
+module.exports = authenticationPlugin;
+
+const beforeRequest = require("./before-request");
+const requestError = require("./request-error");
+const validate = require("./validate");
+
+function authenticationPlugin(octokit, options) {
+  if (!options.auth) {
+    return;
+  }
+
+  validate(options.auth);
+
+  const state = {
+    octokit,
+    auth: options.auth
+  };
+
+  octokit.hook.before("request", beforeRequest.bind(null, state));
+  octokit.hook.error("request", requestError.bind(null, state));
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication/request-error.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication/request-error.js
new file mode 100644
index 0000000..9c67d55
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication/request-error.js
@@ -0,0 +1,61 @@
+module.exports = authenticationRequestError;
+
+const { RequestError } = require("@octokit/request-error");
+
+function authenticationRequestError(state, error, options) {
+  if (!error.headers) throw error;
+
+  const otpRequired = /required/.test(error.headers["x-github-otp"] || "");
+  // handle "2FA required" error only
+  if (error.status !== 401 || !otpRequired) {
+    throw error;
+  }
+
+  if (
+    error.status === 401 &&
+    otpRequired &&
+    error.request &&
+    error.request.headers["x-github-otp"]
+  ) {
+    if (state.otp) {
+      delete state.otp; // no longer valid, request again
+    } else {
+      throw new RequestError(
+        "Invalid one-time password for two-factor authentication",
+        401,
+        {
+          headers: error.headers,
+          request: options
+        }
+      );
+    }
+  }
+
+  if (typeof state.auth.on2fa !== "function") {
+    throw new RequestError(
+      "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication",
+      401,
+      {
+        headers: error.headers,
+        request: options
+      }
+    );
+  }
+
+  return Promise.resolve()
+    .then(() => {
+      return state.auth.on2fa();
+    })
+    .then(oneTimePassword => {
+      const newOptions = Object.assign(options, {
+        headers: Object.assign(options.headers, {
+          "x-github-otp": oneTimePassword
+        })
+      });
+      return state.octokit.request(newOptions).then(response => {
+        // If OTP still valid, then persist it for following requests
+        state.otp = oneTimePassword;
+        return response;
+      });
+    });
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication/validate.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication/validate.js
new file mode 100644
index 0000000..abf8377
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication/validate.js
@@ -0,0 +1,21 @@
+module.exports = validateAuth;
+
+function validateAuth(auth) {
+  if (typeof auth === "string") {
+    return;
+  }
+
+  if (typeof auth === "function") {
+    return;
+  }
+
+  if (auth.username && auth.password) {
+    return;
+  }
+
+  if (auth.clientId && auth.clientSecret) {
+    return;
+  }
+
+  throw new Error(`Invalid "auth" option: ${JSON.stringify(auth)}`);
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/authentication/with-authorization-prefix.js b/setup-maven/node_modules/@octokit/rest/plugins/authentication/with-authorization-prefix.js
new file mode 100644
index 0000000..122cab7
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/authentication/with-authorization-prefix.js
@@ -0,0 +1,23 @@
+module.exports = withAuthorizationPrefix;
+
+const atob = require("atob-lite");
+
+const REGEX_IS_BASIC_AUTH = /^[\w-]+:/;
+
+function withAuthorizationPrefix(authorization) {
+  if (/^(basic|bearer|token) /i.test(authorization)) {
+    return authorization;
+  }
+
+  try {
+    if (REGEX_IS_BASIC_AUTH.test(atob(authorization))) {
+      return `basic ${authorization}`;
+    }
+  } catch (error) {}
+
+  if (authorization.split(/\./).length === 3) {
+    return `bearer ${authorization}`;
+  }
+
+  return `token ${authorization}`;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/log/index.js b/setup-maven/node_modules/@octokit/rest/plugins/log/index.js
new file mode 100644
index 0000000..fed446a
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/log/index.js
@@ -0,0 +1,28 @@
+module.exports = octokitDebug;
+
+function octokitDebug(octokit) {
+  octokit.hook.wrap("request", (request, options) => {
+    octokit.log.debug("request", options);
+    const start = Date.now();
+    const requestOptions = octokit.request.endpoint.parse(options);
+    const path = requestOptions.url.replace(options.baseUrl, "");
+
+    return request(options)
+      .then(response => {
+        octokit.log.info(
+          `${requestOptions.method} ${path} - ${
+            response.status
+          } in ${Date.now() - start}ms`
+        );
+        return response;
+      })
+
+      .catch(error => {
+        octokit.log.info(
+          `${requestOptions.method} ${path} - ${error.status} in ${Date.now() -
+            start}ms`
+        );
+        throw error;
+      });
+  });
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/pagination/index.js b/setup-maven/node_modules/@octokit/rest/plugins/pagination/index.js
new file mode 100644
index 0000000..e7673bc
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/pagination/index.js
@@ -0,0 +1,9 @@
+module.exports = paginatePlugin;
+
+const iterator = require("./iterator");
+const paginate = require("./paginate");
+
+function paginatePlugin(octokit) {
+  octokit.paginate = paginate.bind(null, octokit);
+  octokit.paginate.iterator = iterator.bind(null, octokit);
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/pagination/iterator.js b/setup-maven/node_modules/@octokit/rest/plugins/pagination/iterator.js
new file mode 100644
index 0000000..00ea8eb
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/pagination/iterator.js
@@ -0,0 +1,34 @@
+module.exports = iterator;
+
+const normalizePaginatedListResponse = require("./normalize-paginated-list-response");
+
+function iterator(octokit, options) {
+  const headers = options.headers;
+  let url = octokit.request.endpoint(options).url;
+
+  return {
+    [Symbol.asyncIterator]: () => ({
+      next() {
+        if (!url) {
+          return Promise.resolve({ done: true });
+        }
+
+        return octokit
+          .request({ url, headers })
+
+          .then(response => {
+            normalizePaginatedListResponse(octokit, url, response);
+
+            // `response.headers.link` format:
+            // '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"'
+            // sets `url` to undefined if "next" URL is not present or `link` header is not set
+            url = ((response.headers.link || "").match(
+              /<([^>]+)>;\s*rel="next"/
+            ) || [])[1];
+
+            return { value: response };
+          });
+      }
+    })
+  };
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/pagination/normalize-paginated-list-response.js b/setup-maven/node_modules/@octokit/rest/plugins/pagination/normalize-paginated-list-response.js
new file mode 100644
index 0000000..e664142
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/pagination/normalize-paginated-list-response.js
@@ -0,0 +1,116 @@
+/**
+ * Some “list” response that can be paginated have a different response structure
+ *
+ * They have a `total_count` key in the response (search also has `incomplete_results`,
+ * /installation/repositories also has `repository_selection`), as well as a key with
+ * the list of the items which name varies from endpoint to endpoint:
+ *
+ * - https://developer.github.com/v3/search/#example (key `items`)
+ * - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`)
+ * - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`)
+ * - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`)
+ * - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`)
+ * - https://developer.github.com/v3/orgs/#list-installations-for-an-organization (key `installations`)
+ *
+ * Octokit normalizes these responses so that paginated results are always returned following
+ * the same structure. One challenge is that if the list response has only one page, no Link
+ * header is provided, so this header alone is not sufficient to check wether a response is
+ * paginated or not. For the exceptions with the namespace, a fallback check for the route
+ * paths has to be added in order to normalize the response. We cannot check for the total_count
+ * property because it also exists in the response of Get the combined status for a specific ref.
+ */
+
+module.exports = normalizePaginatedListResponse;
+
+const { Deprecation } = require("deprecation");
+const once = require("once");
+
+const deprecateIncompleteResults = once((log, deprecation) =>
+  log.warn(deprecation)
+);
+const deprecateTotalCount = once((log, deprecation) => log.warn(deprecation));
+const deprecateNamespace = once((log, deprecation) => log.warn(deprecation));
+
+const REGEX_IS_SEARCH_PATH = /^\/search\//;
+const REGEX_IS_CHECKS_PATH = /^\/repos\/[^/]+\/[^/]+\/commits\/[^/]+\/(check-runs|check-suites)/;
+const REGEX_IS_INSTALLATION_REPOSITORIES_PATH = /^\/installation\/repositories/;
+const REGEX_IS_USER_INSTALLATIONS_PATH = /^\/user\/installations/;
+const REGEX_IS_ORG_INSTALLATIONS_PATH = /^\/orgs\/[^/]+\/installations/;
+
+function normalizePaginatedListResponse(octokit, url, response) {
+  const path = url.replace(octokit.request.endpoint.DEFAULTS.baseUrl, "");
+  if (
+    !REGEX_IS_SEARCH_PATH.test(path) &&
+    !REGEX_IS_CHECKS_PATH.test(path) &&
+    !REGEX_IS_INSTALLATION_REPOSITORIES_PATH.test(path) &&
+    !REGEX_IS_USER_INSTALLATIONS_PATH.test(path) &&
+    !REGEX_IS_ORG_INSTALLATIONS_PATH.test(path)
+  ) {
+    return;
+  }
+
+  // keep the additional properties intact to avoid a breaking change,
+  // but log a deprecation warning when accessed
+  const incompleteResults = response.data.incomplete_results;
+  const repositorySelection = response.data.repository_selection;
+  const totalCount = response.data.total_count;
+  delete response.data.incomplete_results;
+  delete response.data.repository_selection;
+  delete response.data.total_count;
+
+  const namespaceKey = Object.keys(response.data)[0];
+
+  response.data = response.data[namespaceKey];
+
+  Object.defineProperty(response.data, namespaceKey, {
+    get() {
+      deprecateNamespace(
+        octokit.log,
+        new Deprecation(
+          `[@octokit/rest] "result.data.${namespaceKey}" is deprecated. Use "result.data" instead`
+        )
+      );
+      return response.data;
+    }
+  });
+
+  if (typeof incompleteResults !== "undefined") {
+    Object.defineProperty(response.data, "incomplete_results", {
+      get() {
+        deprecateIncompleteResults(
+          octokit.log,
+          new Deprecation(
+            '[@octokit/rest] "result.data.incomplete_results" is deprecated.'
+          )
+        );
+        return incompleteResults;
+      }
+    });
+  }
+
+  if (typeof repositorySelection !== "undefined") {
+    Object.defineProperty(response.data, "repository_selection", {
+      get() {
+        deprecateTotalCount(
+          octokit.log,
+          new Deprecation(
+            '[@octokit/rest] "result.data.repository_selection" is deprecated.'
+          )
+        );
+        return repositorySelection;
+      }
+    });
+  }
+
+  Object.defineProperty(response.data, "total_count", {
+    get() {
+      deprecateTotalCount(
+        octokit.log,
+        new Deprecation(
+          '[@octokit/rest] "result.data.total_count" is deprecated.'
+        )
+      );
+      return totalCount;
+    }
+  });
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/pagination/paginate.js b/setup-maven/node_modules/@octokit/rest/plugins/pagination/paginate.js
new file mode 100644
index 0000000..db4752b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/pagination/paginate.js
@@ -0,0 +1,40 @@
+module.exports = paginate;
+
+const iterator = require("./iterator");
+
+function paginate(octokit, route, options, mapFn) {
+  if (typeof options === "function") {
+    mapFn = options;
+    options = undefined;
+  }
+  options = octokit.request.endpoint.merge(route, options);
+  return gather(
+    octokit,
+    [],
+    iterator(octokit, options)[Symbol.asyncIterator](),
+    mapFn
+  );
+}
+
+function gather(octokit, results, iterator, mapFn) {
+  return iterator.next().then(result => {
+    if (result.done) {
+      return results;
+    }
+
+    let earlyExit = false;
+    function done() {
+      earlyExit = true;
+    }
+
+    results = results.concat(
+      mapFn ? mapFn(result.value, done) : result.value.data
+    );
+
+    if (earlyExit) {
+      return results;
+    }
+
+    return gather(octokit, results, iterator, mapFn);
+  });
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/register-endpoints/index.js b/setup-maven/node_modules/@octokit/rest/plugins/register-endpoints/index.js
new file mode 100644
index 0000000..8b92538
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/register-endpoints/index.js
@@ -0,0 +1,7 @@
+module.exports = octokitRegisterEndpoints;
+
+const registerEndpoints = require("./register-endpoints");
+
+function octokitRegisterEndpoints(octokit) {
+  octokit.registerEndpoints = registerEndpoints.bind(null, octokit);
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/register-endpoints/register-endpoints.js b/setup-maven/node_modules/@octokit/rest/plugins/register-endpoints/register-endpoints.js
new file mode 100644
index 0000000..0ffd784
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/register-endpoints/register-endpoints.js
@@ -0,0 +1,98 @@
+module.exports = registerEndpoints;
+
+const { Deprecation } = require("deprecation");
+
+function registerEndpoints(octokit, routes) {
+  Object.keys(routes).forEach(namespaceName => {
+    if (!octokit[namespaceName]) {
+      octokit[namespaceName] = {};
+    }
+
+    Object.keys(routes[namespaceName]).forEach(apiName => {
+      const apiOptions = routes[namespaceName][apiName];
+
+      const endpointDefaults = ["method", "url", "headers"].reduce(
+        (map, key) => {
+          if (typeof apiOptions[key] !== "undefined") {
+            map[key] = apiOptions[key];
+          }
+
+          return map;
+        },
+        {}
+      );
+
+      endpointDefaults.request = {
+        validate: apiOptions.params
+      };
+
+      let request = octokit.request.defaults(endpointDefaults);
+
+      // patch request & endpoint methods to support deprecated parameters.
+      // Not the most elegant solution, but we don’t want to move deprecation
+      // logic into octokit/endpoint.js as it’s out of scope
+      const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(
+        key => apiOptions.params[key].deprecated
+      );
+      if (hasDeprecatedParam) {
+        const patch = patchForDeprecation.bind(null, octokit, apiOptions);
+        request = patch(
+          octokit.request.defaults(endpointDefaults),
+          `.${namespaceName}.${apiName}()`
+        );
+        request.endpoint = patch(
+          request.endpoint,
+          `.${namespaceName}.${apiName}.endpoint()`
+        );
+        request.endpoint.merge = patch(
+          request.endpoint.merge,
+          `.${namespaceName}.${apiName}.endpoint.merge()`
+        );
+      }
+
+      if (apiOptions.deprecated) {
+        octokit[namespaceName][apiName] = function deprecatedEndpointMethod() {
+          octokit.log.warn(
+            new Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`)
+          );
+          octokit[namespaceName][apiName] = request;
+          return request.apply(null, arguments);
+        };
+
+        return;
+      }
+
+      octokit[namespaceName][apiName] = request;
+    });
+  });
+}
+
+function patchForDeprecation(octokit, apiOptions, method, methodName) {
+  const patchedMethod = options => {
+    options = Object.assign({}, options);
+
+    Object.keys(options).forEach(key => {
+      if (apiOptions.params[key] && apiOptions.params[key].deprecated) {
+        const aliasKey = apiOptions.params[key].alias;
+
+        octokit.log.warn(
+          new Deprecation(
+            `[@octokit/rest] "${key}" parameter is deprecated for "${methodName}". Use "${aliasKey}" instead`
+          )
+        );
+
+        if (!(aliasKey in options)) {
+          options[aliasKey] = options[key];
+        }
+        delete options[key];
+      }
+    });
+
+    return method(options);
+  };
+  Object.keys(method).forEach(key => {
+    patchedMethod[key] = method[key];
+  });
+
+  return patchedMethod;
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/rest-api-endpoints/index.js b/setup-maven/node_modules/@octokit/rest/plugins/rest-api-endpoints/index.js
new file mode 100644
index 0000000..4835cee
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/rest-api-endpoints/index.js
@@ -0,0 +1,13 @@
+module.exports = octokitRestApiEndpoints;
+
+const ROUTES = require("./routes.json");
+
+function octokitRestApiEndpoints(octokit) {
+  // Aliasing scopes for backward compatibility
+  // See https://github.com/octokit/rest.js/pull/1134
+  ROUTES.gitdata = ROUTES.git;
+  ROUTES.authorization = ROUTES.oauthAuthorizations;
+  ROUTES.pullRequests = ROUTES.pulls;
+
+  octokit.registerEndpoints(ROUTES);
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/rest-api-endpoints/routes.json b/setup-maven/node_modules/@octokit/rest/plugins/rest-api-endpoints/routes.json
new file mode 100644
index 0000000..31e3fca
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/rest-api-endpoints/routes.json
@@ -0,0 +1,5927 @@
+{
+  "activity": {
+    "checkStarringRepo": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/user/starred/:owner/:repo"
+    },
+    "deleteRepoSubscription": {
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/subscription"
+    },
+    "deleteThreadSubscription": {
+      "method": "DELETE",
+      "params": { "thread_id": { "required": true, "type": "integer" } },
+      "url": "/notifications/threads/:thread_id/subscription"
+    },
+    "getRepoSubscription": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/subscription"
+    },
+    "getThread": {
+      "method": "GET",
+      "params": { "thread_id": { "required": true, "type": "integer" } },
+      "url": "/notifications/threads/:thread_id"
+    },
+    "getThreadSubscription": {
+      "method": "GET",
+      "params": { "thread_id": { "required": true, "type": "integer" } },
+      "url": "/notifications/threads/:thread_id/subscription"
+    },
+    "listEventsForOrg": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/events/orgs/:org"
+    },
+    "listEventsForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/events"
+    },
+    "listFeeds": { "method": "GET", "params": {}, "url": "/feeds" },
+    "listNotifications": {
+      "method": "GET",
+      "params": {
+        "all": { "type": "boolean" },
+        "before": { "type": "string" },
+        "page": { "type": "integer" },
+        "participating": { "type": "boolean" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" }
+      },
+      "url": "/notifications"
+    },
+    "listNotificationsForRepo": {
+      "method": "GET",
+      "params": {
+        "all": { "type": "boolean" },
+        "before": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "participating": { "type": "boolean" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "since": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/notifications"
+    },
+    "listPublicEvents": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/events"
+    },
+    "listPublicEventsForOrg": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/events"
+    },
+    "listPublicEventsForRepoNetwork": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/networks/:owner/:repo/events"
+    },
+    "listPublicEventsForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/events/public"
+    },
+    "listReceivedEventsForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/received_events"
+    },
+    "listReceivedPublicEventsForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/received_events/public"
+    },
+    "listRepoEvents": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/events"
+    },
+    "listReposStarredByAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "sort": { "enum": ["created", "updated"], "type": "string" }
+      },
+      "url": "/user/starred"
+    },
+    "listReposStarredByUser": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "sort": { "enum": ["created", "updated"], "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/starred"
+    },
+    "listReposWatchedByUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/subscriptions"
+    },
+    "listStargazersForRepo": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/stargazers"
+    },
+    "listWatchedReposForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/subscriptions"
+    },
+    "listWatchersForRepo": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/subscribers"
+    },
+    "markAsRead": {
+      "method": "PUT",
+      "params": { "last_read_at": { "type": "string" } },
+      "url": "/notifications"
+    },
+    "markNotificationsAsReadForRepo": {
+      "method": "PUT",
+      "params": {
+        "last_read_at": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/notifications"
+    },
+    "markThreadAsRead": {
+      "method": "PATCH",
+      "params": { "thread_id": { "required": true, "type": "integer" } },
+      "url": "/notifications/threads/:thread_id"
+    },
+    "setRepoSubscription": {
+      "method": "PUT",
+      "params": {
+        "ignored": { "type": "boolean" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "subscribed": { "type": "boolean" }
+      },
+      "url": "/repos/:owner/:repo/subscription"
+    },
+    "setThreadSubscription": {
+      "method": "PUT",
+      "params": {
+        "ignored": { "type": "boolean" },
+        "thread_id": { "required": true, "type": "integer" }
+      },
+      "url": "/notifications/threads/:thread_id/subscription"
+    },
+    "starRepo": {
+      "method": "PUT",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/user/starred/:owner/:repo"
+    },
+    "unstarRepo": {
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/user/starred/:owner/:repo"
+    }
+  },
+  "apps": {
+    "addRepoToInstallation": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "PUT",
+      "params": {
+        "installation_id": { "required": true, "type": "integer" },
+        "repository_id": { "required": true, "type": "integer" }
+      },
+      "url": "/user/installations/:installation_id/repositories/:repository_id"
+    },
+    "checkAccountIsAssociatedWithAny": {
+      "method": "GET",
+      "params": {
+        "account_id": { "required": true, "type": "integer" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/marketplace_listing/accounts/:account_id"
+    },
+    "checkAccountIsAssociatedWithAnyStubbed": {
+      "method": "GET",
+      "params": {
+        "account_id": { "required": true, "type": "integer" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/marketplace_listing/stubbed/accounts/:account_id"
+    },
+    "checkAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)",
+      "method": "GET",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/tokens/:access_token"
+    },
+    "checkToken": {
+      "headers": {
+        "accept": "application/vnd.github.doctor-strange-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "access_token": { "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/token"
+    },
+    "createContentAttachment": {
+      "headers": { "accept": "application/vnd.github.corsair-preview+json" },
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "content_reference_id": { "required": true, "type": "integer" },
+        "title": { "required": true, "type": "string" }
+      },
+      "url": "/content_references/:content_reference_id/attachments"
+    },
+    "createFromManifest": {
+      "headers": { "accept": "application/vnd.github.fury-preview+json" },
+      "method": "POST",
+      "params": { "code": { "required": true, "type": "string" } },
+      "url": "/app-manifests/:code/conversions"
+    },
+    "createInstallationToken": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "installation_id": { "required": true, "type": "integer" },
+        "permissions": { "type": "object" },
+        "repository_ids": { "type": "integer[]" }
+      },
+      "url": "/app/installations/:installation_id/access_tokens"
+    },
+    "deleteAuthorization": {
+      "headers": {
+        "accept": "application/vnd.github.doctor-strange-preview+json"
+      },
+      "method": "DELETE",
+      "params": {
+        "access_token": { "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/grant"
+    },
+    "deleteInstallation": {
+      "headers": {
+        "accept": "application/vnd.github.gambit-preview+json,application/vnd.github.machine-man-preview+json"
+      },
+      "method": "DELETE",
+      "params": { "installation_id": { "required": true, "type": "integer" } },
+      "url": "/app/installations/:installation_id"
+    },
+    "deleteToken": {
+      "headers": {
+        "accept": "application/vnd.github.doctor-strange-preview+json"
+      },
+      "method": "DELETE",
+      "params": {
+        "access_token": { "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/token"
+    },
+    "findOrgInstallation": {
+      "deprecated": "octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)",
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": { "org": { "required": true, "type": "string" } },
+      "url": "/orgs/:org/installation"
+    },
+    "findRepoInstallation": {
+      "deprecated": "octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)",
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/installation"
+    },
+    "findUserInstallation": {
+      "deprecated": "octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)",
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/users/:username/installation"
+    },
+    "getAuthenticated": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {},
+      "url": "/app"
+    },
+    "getBySlug": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": { "app_slug": { "required": true, "type": "string" } },
+      "url": "/apps/:app_slug"
+    },
+    "getInstallation": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": { "installation_id": { "required": true, "type": "integer" } },
+      "url": "/app/installations/:installation_id"
+    },
+    "getOrgInstallation": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": { "org": { "required": true, "type": "string" } },
+      "url": "/orgs/:org/installation"
+    },
+    "getRepoInstallation": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/installation"
+    },
+    "getUserInstallation": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/users/:username/installation"
+    },
+    "listAccountsUserOrOrgOnPlan": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "plan_id": { "required": true, "type": "integer" },
+        "sort": { "enum": ["created", "updated"], "type": "string" }
+      },
+      "url": "/marketplace_listing/plans/:plan_id/accounts"
+    },
+    "listAccountsUserOrOrgOnPlanStubbed": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "plan_id": { "required": true, "type": "integer" },
+        "sort": { "enum": ["created", "updated"], "type": "string" }
+      },
+      "url": "/marketplace_listing/stubbed/plans/:plan_id/accounts"
+    },
+    "listInstallationReposForAuthenticatedUser": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "installation_id": { "required": true, "type": "integer" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/installations/:installation_id/repositories"
+    },
+    "listInstallations": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/app/installations"
+    },
+    "listInstallationsForAuthenticatedUser": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/installations"
+    },
+    "listMarketplacePurchasesForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/marketplace_purchases"
+    },
+    "listMarketplacePurchasesForAuthenticatedUserStubbed": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/marketplace_purchases/stubbed"
+    },
+    "listPlans": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/marketplace_listing/plans"
+    },
+    "listPlansStubbed": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/marketplace_listing/stubbed/plans"
+    },
+    "listRepos": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/installation/repositories"
+    },
+    "removeRepoFromInstallation": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "DELETE",
+      "params": {
+        "installation_id": { "required": true, "type": "integer" },
+        "repository_id": { "required": true, "type": "integer" }
+      },
+      "url": "/user/installations/:installation_id/repositories/:repository_id"
+    },
+    "resetAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)",
+      "method": "POST",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/tokens/:access_token"
+    },
+    "resetToken": {
+      "headers": {
+        "accept": "application/vnd.github.doctor-strange-preview+json"
+      },
+      "method": "PATCH",
+      "params": {
+        "access_token": { "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/token"
+    },
+    "revokeAuthorizationForApplication": {
+      "deprecated": "octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)",
+      "method": "DELETE",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/tokens/:access_token"
+    },
+    "revokeGrantForApplication": {
+      "deprecated": "octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)",
+      "method": "DELETE",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/grants/:access_token"
+    }
+  },
+  "checks": {
+    "create": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "POST",
+      "params": {
+        "actions": { "type": "object[]" },
+        "actions[].description": { "required": true, "type": "string" },
+        "actions[].identifier": { "required": true, "type": "string" },
+        "actions[].label": { "required": true, "type": "string" },
+        "completed_at": { "type": "string" },
+        "conclusion": {
+          "enum": [
+            "success",
+            "failure",
+            "neutral",
+            "cancelled",
+            "timed_out",
+            "action_required"
+          ],
+          "type": "string"
+        },
+        "details_url": { "type": "string" },
+        "external_id": { "type": "string" },
+        "head_sha": { "required": true, "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "output": { "type": "object" },
+        "output.annotations": { "type": "object[]" },
+        "output.annotations[].annotation_level": {
+          "enum": ["notice", "warning", "failure"],
+          "required": true,
+          "type": "string"
+        },
+        "output.annotations[].end_column": { "type": "integer" },
+        "output.annotations[].end_line": {
+          "required": true,
+          "type": "integer"
+        },
+        "output.annotations[].message": { "required": true, "type": "string" },
+        "output.annotations[].path": { "required": true, "type": "string" },
+        "output.annotations[].raw_details": { "type": "string" },
+        "output.annotations[].start_column": { "type": "integer" },
+        "output.annotations[].start_line": {
+          "required": true,
+          "type": "integer"
+        },
+        "output.annotations[].title": { "type": "string" },
+        "output.images": { "type": "object[]" },
+        "output.images[].alt": { "required": true, "type": "string" },
+        "output.images[].caption": { "type": "string" },
+        "output.images[].image_url": { "required": true, "type": "string" },
+        "output.summary": { "required": true, "type": "string" },
+        "output.text": { "type": "string" },
+        "output.title": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "started_at": { "type": "string" },
+        "status": {
+          "enum": ["queued", "in_progress", "completed"],
+          "type": "string"
+        }
+      },
+      "url": "/repos/:owner/:repo/check-runs"
+    },
+    "createSuite": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "POST",
+      "params": {
+        "head_sha": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/check-suites"
+    },
+    "get": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "GET",
+      "params": {
+        "check_run_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/check-runs/:check_run_id"
+    },
+    "getSuite": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "GET",
+      "params": {
+        "check_suite_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/check-suites/:check_suite_id"
+    },
+    "listAnnotations": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "GET",
+      "params": {
+        "check_run_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/check-runs/:check_run_id/annotations"
+    },
+    "listForRef": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "GET",
+      "params": {
+        "check_name": { "type": "string" },
+        "filter": { "enum": ["latest", "all"], "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "status": {
+          "enum": ["queued", "in_progress", "completed"],
+          "type": "string"
+        }
+      },
+      "url": "/repos/:owner/:repo/commits/:ref/check-runs"
+    },
+    "listForSuite": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "GET",
+      "params": {
+        "check_name": { "type": "string" },
+        "check_suite_id": { "required": true, "type": "integer" },
+        "filter": { "enum": ["latest", "all"], "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "status": {
+          "enum": ["queued", "in_progress", "completed"],
+          "type": "string"
+        }
+      },
+      "url": "/repos/:owner/:repo/check-suites/:check_suite_id/check-runs"
+    },
+    "listSuitesForRef": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "GET",
+      "params": {
+        "app_id": { "type": "integer" },
+        "check_name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:ref/check-suites"
+    },
+    "rerequestSuite": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "POST",
+      "params": {
+        "check_suite_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/check-suites/:check_suite_id/rerequest"
+    },
+    "setSuitesPreferences": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "PATCH",
+      "params": {
+        "auto_trigger_checks": { "type": "object[]" },
+        "auto_trigger_checks[].app_id": { "required": true, "type": "integer" },
+        "auto_trigger_checks[].setting": {
+          "required": true,
+          "type": "boolean"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/check-suites/preferences"
+    },
+    "update": {
+      "headers": { "accept": "application/vnd.github.antiope-preview+json" },
+      "method": "PATCH",
+      "params": {
+        "actions": { "type": "object[]" },
+        "actions[].description": { "required": true, "type": "string" },
+        "actions[].identifier": { "required": true, "type": "string" },
+        "actions[].label": { "required": true, "type": "string" },
+        "check_run_id": { "required": true, "type": "integer" },
+        "completed_at": { "type": "string" },
+        "conclusion": {
+          "enum": [
+            "success",
+            "failure",
+            "neutral",
+            "cancelled",
+            "timed_out",
+            "action_required"
+          ],
+          "type": "string"
+        },
+        "details_url": { "type": "string" },
+        "external_id": { "type": "string" },
+        "name": { "type": "string" },
+        "output": { "type": "object" },
+        "output.annotations": { "type": "object[]" },
+        "output.annotations[].annotation_level": {
+          "enum": ["notice", "warning", "failure"],
+          "required": true,
+          "type": "string"
+        },
+        "output.annotations[].end_column": { "type": "integer" },
+        "output.annotations[].end_line": {
+          "required": true,
+          "type": "integer"
+        },
+        "output.annotations[].message": { "required": true, "type": "string" },
+        "output.annotations[].path": { "required": true, "type": "string" },
+        "output.annotations[].raw_details": { "type": "string" },
+        "output.annotations[].start_column": { "type": "integer" },
+        "output.annotations[].start_line": {
+          "required": true,
+          "type": "integer"
+        },
+        "output.annotations[].title": { "type": "string" },
+        "output.images": { "type": "object[]" },
+        "output.images[].alt": { "required": true, "type": "string" },
+        "output.images[].caption": { "type": "string" },
+        "output.images[].image_url": { "required": true, "type": "string" },
+        "output.summary": { "required": true, "type": "string" },
+        "output.text": { "type": "string" },
+        "output.title": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "started_at": { "type": "string" },
+        "status": {
+          "enum": ["queued", "in_progress", "completed"],
+          "type": "string"
+        }
+      },
+      "url": "/repos/:owner/:repo/check-runs/:check_run_id"
+    }
+  },
+  "codesOfConduct": {
+    "getConductCode": {
+      "headers": {
+        "accept": "application/vnd.github.scarlet-witch-preview+json"
+      },
+      "method": "GET",
+      "params": { "key": { "required": true, "type": "string" } },
+      "url": "/codes_of_conduct/:key"
+    },
+    "getForRepo": {
+      "headers": {
+        "accept": "application/vnd.github.scarlet-witch-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/community/code_of_conduct"
+    },
+    "listConductCodes": {
+      "headers": {
+        "accept": "application/vnd.github.scarlet-witch-preview+json"
+      },
+      "method": "GET",
+      "params": {},
+      "url": "/codes_of_conduct"
+    }
+  },
+  "emojis": { "get": { "method": "GET", "params": {}, "url": "/emojis" } },
+  "gists": {
+    "checkIsStarred": {
+      "method": "GET",
+      "params": { "gist_id": { "required": true, "type": "string" } },
+      "url": "/gists/:gist_id/star"
+    },
+    "create": {
+      "method": "POST",
+      "params": {
+        "description": { "type": "string" },
+        "files": { "required": true, "type": "object" },
+        "files.content": { "type": "string" },
+        "public": { "type": "boolean" }
+      },
+      "url": "/gists"
+    },
+    "createComment": {
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "gist_id": { "required": true, "type": "string" }
+      },
+      "url": "/gists/:gist_id/comments"
+    },
+    "delete": {
+      "method": "DELETE",
+      "params": { "gist_id": { "required": true, "type": "string" } },
+      "url": "/gists/:gist_id"
+    },
+    "deleteComment": {
+      "method": "DELETE",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "gist_id": { "required": true, "type": "string" }
+      },
+      "url": "/gists/:gist_id/comments/:comment_id"
+    },
+    "fork": {
+      "method": "POST",
+      "params": { "gist_id": { "required": true, "type": "string" } },
+      "url": "/gists/:gist_id/forks"
+    },
+    "get": {
+      "method": "GET",
+      "params": { "gist_id": { "required": true, "type": "string" } },
+      "url": "/gists/:gist_id"
+    },
+    "getComment": {
+      "method": "GET",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "gist_id": { "required": true, "type": "string" }
+      },
+      "url": "/gists/:gist_id/comments/:comment_id"
+    },
+    "getRevision": {
+      "method": "GET",
+      "params": {
+        "gist_id": { "required": true, "type": "string" },
+        "sha": { "required": true, "type": "string" }
+      },
+      "url": "/gists/:gist_id/:sha"
+    },
+    "list": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" }
+      },
+      "url": "/gists"
+    },
+    "listComments": {
+      "method": "GET",
+      "params": {
+        "gist_id": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/gists/:gist_id/comments"
+    },
+    "listCommits": {
+      "method": "GET",
+      "params": {
+        "gist_id": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/gists/:gist_id/commits"
+    },
+    "listForks": {
+      "method": "GET",
+      "params": {
+        "gist_id": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/gists/:gist_id/forks"
+    },
+    "listPublic": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" }
+      },
+      "url": "/gists/public"
+    },
+    "listPublicForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/gists"
+    },
+    "listStarred": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" }
+      },
+      "url": "/gists/starred"
+    },
+    "star": {
+      "method": "PUT",
+      "params": { "gist_id": { "required": true, "type": "string" } },
+      "url": "/gists/:gist_id/star"
+    },
+    "unstar": {
+      "method": "DELETE",
+      "params": { "gist_id": { "required": true, "type": "string" } },
+      "url": "/gists/:gist_id/star"
+    },
+    "update": {
+      "method": "PATCH",
+      "params": {
+        "description": { "type": "string" },
+        "files": { "type": "object" },
+        "files.content": { "type": "string" },
+        "files.filename": { "type": "string" },
+        "gist_id": { "required": true, "type": "string" }
+      },
+      "url": "/gists/:gist_id"
+    },
+    "updateComment": {
+      "method": "PATCH",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "comment_id": { "required": true, "type": "integer" },
+        "gist_id": { "required": true, "type": "string" }
+      },
+      "url": "/gists/:gist_id/comments/:comment_id"
+    }
+  },
+  "git": {
+    "createBlob": {
+      "method": "POST",
+      "params": {
+        "content": { "required": true, "type": "string" },
+        "encoding": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/blobs"
+    },
+    "createCommit": {
+      "method": "POST",
+      "params": {
+        "author": { "type": "object" },
+        "author.date": { "type": "string" },
+        "author.email": { "type": "string" },
+        "author.name": { "type": "string" },
+        "committer": { "type": "object" },
+        "committer.date": { "type": "string" },
+        "committer.email": { "type": "string" },
+        "committer.name": { "type": "string" },
+        "message": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "parents": { "required": true, "type": "string[]" },
+        "repo": { "required": true, "type": "string" },
+        "signature": { "type": "string" },
+        "tree": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/commits"
+    },
+    "createRef": {
+      "method": "POST",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/refs"
+    },
+    "createTag": {
+      "method": "POST",
+      "params": {
+        "message": { "required": true, "type": "string" },
+        "object": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "tag": { "required": true, "type": "string" },
+        "tagger": { "type": "object" },
+        "tagger.date": { "type": "string" },
+        "tagger.email": { "type": "string" },
+        "tagger.name": { "type": "string" },
+        "type": {
+          "enum": ["commit", "tree", "blob"],
+          "required": true,
+          "type": "string"
+        }
+      },
+      "url": "/repos/:owner/:repo/git/tags"
+    },
+    "createTree": {
+      "method": "POST",
+      "params": {
+        "base_tree": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "tree": { "required": true, "type": "object[]" },
+        "tree[].content": { "type": "string" },
+        "tree[].mode": {
+          "enum": ["100644", "100755", "040000", "160000", "120000"],
+          "type": "string"
+        },
+        "tree[].path": { "type": "string" },
+        "tree[].sha": { "allowNull": true, "type": "string" },
+        "tree[].type": { "enum": ["blob", "tree", "commit"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/trees"
+    },
+    "deleteRef": {
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/refs/:ref"
+    },
+    "getBlob": {
+      "method": "GET",
+      "params": {
+        "file_sha": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/blobs/:file_sha"
+    },
+    "getCommit": {
+      "method": "GET",
+      "params": {
+        "commit_sha": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/commits/:commit_sha"
+    },
+    "getRef": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/ref/:ref"
+    },
+    "getTag": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "tag_sha": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/tags/:tag_sha"
+    },
+    "getTree": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "recursive": { "enum": ["1"], "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "tree_sha": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/trees/:tree_sha"
+    },
+    "listMatchingRefs": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/matching-refs/:ref"
+    },
+    "listRefs": {
+      "method": "GET",
+      "params": {
+        "namespace": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/refs/:namespace"
+    },
+    "updateRef": {
+      "method": "PATCH",
+      "params": {
+        "force": { "type": "boolean" },
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/git/refs/:ref"
+    }
+  },
+  "gitignore": {
+    "getTemplate": {
+      "method": "GET",
+      "params": { "name": { "required": true, "type": "string" } },
+      "url": "/gitignore/templates/:name"
+    },
+    "listTemplates": {
+      "method": "GET",
+      "params": {},
+      "url": "/gitignore/templates"
+    }
+  },
+  "interactions": {
+    "addOrUpdateRestrictionsForOrg": {
+      "headers": { "accept": "application/vnd.github.sombra-preview+json" },
+      "method": "PUT",
+      "params": {
+        "limit": {
+          "enum": ["existing_users", "contributors_only", "collaborators_only"],
+          "required": true,
+          "type": "string"
+        },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/interaction-limits"
+    },
+    "addOrUpdateRestrictionsForRepo": {
+      "headers": { "accept": "application/vnd.github.sombra-preview+json" },
+      "method": "PUT",
+      "params": {
+        "limit": {
+          "enum": ["existing_users", "contributors_only", "collaborators_only"],
+          "required": true,
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/interaction-limits"
+    },
+    "getRestrictionsForOrg": {
+      "headers": { "accept": "application/vnd.github.sombra-preview+json" },
+      "method": "GET",
+      "params": { "org": { "required": true, "type": "string" } },
+      "url": "/orgs/:org/interaction-limits"
+    },
+    "getRestrictionsForRepo": {
+      "headers": { "accept": "application/vnd.github.sombra-preview+json" },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/interaction-limits"
+    },
+    "removeRestrictionsForOrg": {
+      "headers": { "accept": "application/vnd.github.sombra-preview+json" },
+      "method": "DELETE",
+      "params": { "org": { "required": true, "type": "string" } },
+      "url": "/orgs/:org/interaction-limits"
+    },
+    "removeRestrictionsForRepo": {
+      "headers": { "accept": "application/vnd.github.sombra-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/interaction-limits"
+    }
+  },
+  "issues": {
+    "addAssignees": {
+      "method": "POST",
+      "params": {
+        "assignees": { "type": "string[]" },
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/assignees"
+    },
+    "addLabels": {
+      "method": "POST",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "labels": { "required": true, "type": "string[]" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/labels"
+    },
+    "checkAssignee": {
+      "method": "GET",
+      "params": {
+        "assignee": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/assignees/:assignee"
+    },
+    "create": {
+      "method": "POST",
+      "params": {
+        "assignee": { "type": "string" },
+        "assignees": { "type": "string[]" },
+        "body": { "type": "string" },
+        "labels": { "type": "string[]" },
+        "milestone": { "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "title": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues"
+    },
+    "createComment": {
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/comments"
+    },
+    "createLabel": {
+      "method": "POST",
+      "params": {
+        "color": { "required": true, "type": "string" },
+        "description": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/labels"
+    },
+    "createMilestone": {
+      "method": "POST",
+      "params": {
+        "description": { "type": "string" },
+        "due_on": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "state": { "enum": ["open", "closed"], "type": "string" },
+        "title": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/milestones"
+    },
+    "deleteComment": {
+      "method": "DELETE",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/comments/:comment_id"
+    },
+    "deleteLabel": {
+      "method": "DELETE",
+      "params": {
+        "name": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/labels/:name"
+    },
+    "deleteMilestone": {
+      "method": "DELETE",
+      "params": {
+        "milestone_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "milestone_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/milestones/:milestone_number"
+    },
+    "get": {
+      "method": "GET",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number"
+    },
+    "getComment": {
+      "method": "GET",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/comments/:comment_id"
+    },
+    "getEvent": {
+      "method": "GET",
+      "params": {
+        "event_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/events/:event_id"
+    },
+    "getLabel": {
+      "method": "GET",
+      "params": {
+        "name": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/labels/:name"
+    },
+    "getMilestone": {
+      "method": "GET",
+      "params": {
+        "milestone_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "milestone_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/milestones/:milestone_number"
+    },
+    "list": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "filter": {
+          "enum": ["assigned", "created", "mentioned", "subscribed", "all"],
+          "type": "string"
+        },
+        "labels": { "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" },
+        "sort": {
+          "enum": ["created", "updated", "comments"],
+          "type": "string"
+        },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/issues"
+    },
+    "listAssignees": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/assignees"
+    },
+    "listComments": {
+      "method": "GET",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "since": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/comments"
+    },
+    "listCommentsForRepo": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "since": { "type": "string" },
+        "sort": { "enum": ["created", "updated"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/comments"
+    },
+    "listEvents": {
+      "method": "GET",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/events"
+    },
+    "listEventsForRepo": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/events"
+    },
+    "listEventsForTimeline": {
+      "headers": {
+        "accept": "application/vnd.github.mockingbird-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/timeline"
+    },
+    "listForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "filter": {
+          "enum": ["assigned", "created", "mentioned", "subscribed", "all"],
+          "type": "string"
+        },
+        "labels": { "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" },
+        "sort": {
+          "enum": ["created", "updated", "comments"],
+          "type": "string"
+        },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/user/issues"
+    },
+    "listForOrg": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "filter": {
+          "enum": ["assigned", "created", "mentioned", "subscribed", "all"],
+          "type": "string"
+        },
+        "labels": { "type": "string" },
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" },
+        "sort": {
+          "enum": ["created", "updated", "comments"],
+          "type": "string"
+        },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/orgs/:org/issues"
+    },
+    "listForRepo": {
+      "method": "GET",
+      "params": {
+        "assignee": { "type": "string" },
+        "creator": { "type": "string" },
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "labels": { "type": "string" },
+        "mentioned": { "type": "string" },
+        "milestone": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "since": { "type": "string" },
+        "sort": {
+          "enum": ["created", "updated", "comments"],
+          "type": "string"
+        },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues"
+    },
+    "listLabelsForMilestone": {
+      "method": "GET",
+      "params": {
+        "milestone_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "milestone_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/milestones/:milestone_number/labels"
+    },
+    "listLabelsForRepo": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/labels"
+    },
+    "listLabelsOnIssue": {
+      "method": "GET",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/labels"
+    },
+    "listMilestonesForRepo": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "sort": { "enum": ["due_on", "completeness"], "type": "string" },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/milestones"
+    },
+    "lock": {
+      "method": "PUT",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "lock_reason": {
+          "enum": ["off-topic", "too heated", "resolved", "spam"],
+          "type": "string"
+        },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/lock"
+    },
+    "removeAssignees": {
+      "method": "DELETE",
+      "params": {
+        "assignees": { "type": "string[]" },
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/assignees"
+    },
+    "removeLabel": {
+      "method": "DELETE",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "name": { "required": true, "type": "string" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/labels/:name"
+    },
+    "removeLabels": {
+      "method": "DELETE",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/labels"
+    },
+    "replaceLabels": {
+      "method": "PUT",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "labels": { "type": "string[]" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/labels"
+    },
+    "unlock": {
+      "method": "DELETE",
+      "params": {
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/lock"
+    },
+    "update": {
+      "method": "PATCH",
+      "params": {
+        "assignee": { "type": "string" },
+        "assignees": { "type": "string[]" },
+        "body": { "type": "string" },
+        "issue_number": { "required": true, "type": "integer" },
+        "labels": { "type": "string[]" },
+        "milestone": { "allowNull": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "state": { "enum": ["open", "closed"], "type": "string" },
+        "title": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number"
+    },
+    "updateComment": {
+      "method": "PATCH",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/comments/:comment_id"
+    },
+    "updateLabel": {
+      "method": "PATCH",
+      "params": {
+        "color": { "type": "string" },
+        "current_name": { "required": true, "type": "string" },
+        "description": { "type": "string" },
+        "name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/labels/:current_name"
+    },
+    "updateMilestone": {
+      "method": "PATCH",
+      "params": {
+        "description": { "type": "string" },
+        "due_on": { "type": "string" },
+        "milestone_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "milestone_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "state": { "enum": ["open", "closed"], "type": "string" },
+        "title": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/milestones/:milestone_number"
+    }
+  },
+  "licenses": {
+    "get": {
+      "method": "GET",
+      "params": { "license": { "required": true, "type": "string" } },
+      "url": "/licenses/:license"
+    },
+    "getForRepo": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/license"
+    },
+    "list": {
+      "deprecated": "octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)",
+      "method": "GET",
+      "params": {},
+      "url": "/licenses"
+    },
+    "listCommonlyUsed": { "method": "GET", "params": {}, "url": "/licenses" }
+  },
+  "markdown": {
+    "render": {
+      "method": "POST",
+      "params": {
+        "context": { "type": "string" },
+        "mode": { "enum": ["markdown", "gfm"], "type": "string" },
+        "text": { "required": true, "type": "string" }
+      },
+      "url": "/markdown"
+    },
+    "renderRaw": {
+      "headers": { "content-type": "text/plain; charset=utf-8" },
+      "method": "POST",
+      "params": {
+        "data": { "mapTo": "data", "required": true, "type": "string" }
+      },
+      "url": "/markdown/raw"
+    }
+  },
+  "meta": { "get": { "method": "GET", "params": {}, "url": "/meta" } },
+  "migrations": {
+    "cancelImport": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/import"
+    },
+    "deleteArchiveForAuthenticatedUser": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "DELETE",
+      "params": { "migration_id": { "required": true, "type": "integer" } },
+      "url": "/user/migrations/:migration_id/archive"
+    },
+    "deleteArchiveForOrg": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "migration_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/migrations/:migration_id/archive"
+    },
+    "getArchiveForAuthenticatedUser": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "GET",
+      "params": { "migration_id": { "required": true, "type": "integer" } },
+      "url": "/user/migrations/:migration_id/archive"
+    },
+    "getArchiveForOrg": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "GET",
+      "params": {
+        "migration_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/migrations/:migration_id/archive"
+    },
+    "getCommitAuthors": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "since": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/import/authors"
+    },
+    "getImportProgress": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/import"
+    },
+    "getLargeFiles": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/import/large_files"
+    },
+    "getStatusForAuthenticatedUser": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "GET",
+      "params": { "migration_id": { "required": true, "type": "integer" } },
+      "url": "/user/migrations/:migration_id"
+    },
+    "getStatusForOrg": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "GET",
+      "params": {
+        "migration_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/migrations/:migration_id"
+    },
+    "listForAuthenticatedUser": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/migrations"
+    },
+    "listForOrg": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/migrations"
+    },
+    "mapCommitAuthor": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "PATCH",
+      "params": {
+        "author_id": { "required": true, "type": "integer" },
+        "email": { "type": "string" },
+        "name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/import/authors/:author_id"
+    },
+    "setLfsPreference": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "PATCH",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "use_lfs": {
+          "enum": ["opt_in", "opt_out"],
+          "required": true,
+          "type": "string"
+        }
+      },
+      "url": "/repos/:owner/:repo/import/lfs"
+    },
+    "startForAuthenticatedUser": {
+      "method": "POST",
+      "params": {
+        "exclude_attachments": { "type": "boolean" },
+        "lock_repositories": { "type": "boolean" },
+        "repositories": { "required": true, "type": "string[]" }
+      },
+      "url": "/user/migrations"
+    },
+    "startForOrg": {
+      "method": "POST",
+      "params": {
+        "exclude_attachments": { "type": "boolean" },
+        "lock_repositories": { "type": "boolean" },
+        "org": { "required": true, "type": "string" },
+        "repositories": { "required": true, "type": "string[]" }
+      },
+      "url": "/orgs/:org/migrations"
+    },
+    "startImport": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "PUT",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "tfvc_project": { "type": "string" },
+        "vcs": {
+          "enum": ["subversion", "git", "mercurial", "tfvc"],
+          "type": "string"
+        },
+        "vcs_password": { "type": "string" },
+        "vcs_url": { "required": true, "type": "string" },
+        "vcs_username": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/import"
+    },
+    "unlockRepoForAuthenticatedUser": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "migration_id": { "required": true, "type": "integer" },
+        "repo_name": { "required": true, "type": "string" }
+      },
+      "url": "/user/migrations/:migration_id/repos/:repo_name/lock"
+    },
+    "unlockRepoForOrg": {
+      "headers": { "accept": "application/vnd.github.wyandotte-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "migration_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" },
+        "repo_name": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/migrations/:migration_id/repos/:repo_name/lock"
+    },
+    "updateImport": {
+      "headers": {
+        "accept": "application/vnd.github.barred-rock-preview+json"
+      },
+      "method": "PATCH",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "vcs_password": { "type": "string" },
+        "vcs_username": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/import"
+    }
+  },
+  "oauthAuthorizations": {
+    "checkAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)",
+      "method": "GET",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/tokens/:access_token"
+    },
+    "createAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization",
+      "method": "POST",
+      "params": {
+        "client_id": { "type": "string" },
+        "client_secret": { "type": "string" },
+        "fingerprint": { "type": "string" },
+        "note": { "required": true, "type": "string" },
+        "note_url": { "type": "string" },
+        "scopes": { "type": "string[]" }
+      },
+      "url": "/authorizations"
+    },
+    "deleteAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization",
+      "method": "DELETE",
+      "params": { "authorization_id": { "required": true, "type": "integer" } },
+      "url": "/authorizations/:authorization_id"
+    },
+    "deleteGrant": {
+      "deprecated": "octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant",
+      "method": "DELETE",
+      "params": { "grant_id": { "required": true, "type": "integer" } },
+      "url": "/applications/grants/:grant_id"
+    },
+    "getAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization",
+      "method": "GET",
+      "params": { "authorization_id": { "required": true, "type": "integer" } },
+      "url": "/authorizations/:authorization_id"
+    },
+    "getGrant": {
+      "deprecated": "octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant",
+      "method": "GET",
+      "params": { "grant_id": { "required": true, "type": "integer" } },
+      "url": "/applications/grants/:grant_id"
+    },
+    "getOrCreateAuthorizationForApp": {
+      "deprecated": "octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app",
+      "method": "PUT",
+      "params": {
+        "client_id": { "required": true, "type": "string" },
+        "client_secret": { "required": true, "type": "string" },
+        "fingerprint": { "type": "string" },
+        "note": { "type": "string" },
+        "note_url": { "type": "string" },
+        "scopes": { "type": "string[]" }
+      },
+      "url": "/authorizations/clients/:client_id"
+    },
+    "getOrCreateAuthorizationForAppAndFingerprint": {
+      "deprecated": "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint",
+      "method": "PUT",
+      "params": {
+        "client_id": { "required": true, "type": "string" },
+        "client_secret": { "required": true, "type": "string" },
+        "fingerprint": { "required": true, "type": "string" },
+        "note": { "type": "string" },
+        "note_url": { "type": "string" },
+        "scopes": { "type": "string[]" }
+      },
+      "url": "/authorizations/clients/:client_id/:fingerprint"
+    },
+    "getOrCreateAuthorizationForAppFingerprint": {
+      "deprecated": "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() has been renamed to octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() (2018-12-27)",
+      "method": "PUT",
+      "params": {
+        "client_id": { "required": true, "type": "string" },
+        "client_secret": { "required": true, "type": "string" },
+        "fingerprint": { "required": true, "type": "string" },
+        "note": { "type": "string" },
+        "note_url": { "type": "string" },
+        "scopes": { "type": "string[]" }
+      },
+      "url": "/authorizations/clients/:client_id/:fingerprint"
+    },
+    "listAuthorizations": {
+      "deprecated": "octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations",
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/authorizations"
+    },
+    "listGrants": {
+      "deprecated": "octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants",
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/applications/grants"
+    },
+    "resetAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)",
+      "method": "POST",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/tokens/:access_token"
+    },
+    "revokeAuthorizationForApplication": {
+      "deprecated": "octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)",
+      "method": "DELETE",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/tokens/:access_token"
+    },
+    "revokeGrantForApplication": {
+      "deprecated": "octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)",
+      "method": "DELETE",
+      "params": {
+        "access_token": { "required": true, "type": "string" },
+        "client_id": { "required": true, "type": "string" }
+      },
+      "url": "/applications/:client_id/grants/:access_token"
+    },
+    "updateAuthorization": {
+      "deprecated": "octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization",
+      "method": "PATCH",
+      "params": {
+        "add_scopes": { "type": "string[]" },
+        "authorization_id": { "required": true, "type": "integer" },
+        "fingerprint": { "type": "string" },
+        "note": { "type": "string" },
+        "note_url": { "type": "string" },
+        "remove_scopes": { "type": "string[]" },
+        "scopes": { "type": "string[]" }
+      },
+      "url": "/authorizations/:authorization_id"
+    }
+  },
+  "orgs": {
+    "addOrUpdateMembership": {
+      "method": "PUT",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "role": { "enum": ["admin", "member"], "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/memberships/:username"
+    },
+    "blockUser": {
+      "method": "PUT",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/blocks/:username"
+    },
+    "checkBlockedUser": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/blocks/:username"
+    },
+    "checkMembership": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/members/:username"
+    },
+    "checkPublicMembership": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/public_members/:username"
+    },
+    "concealMembership": {
+      "method": "DELETE",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/public_members/:username"
+    },
+    "convertMemberToOutsideCollaborator": {
+      "method": "PUT",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/outside_collaborators/:username"
+    },
+    "createHook": {
+      "method": "POST",
+      "params": {
+        "active": { "type": "boolean" },
+        "config": { "required": true, "type": "object" },
+        "config.content_type": { "type": "string" },
+        "config.insecure_ssl": { "type": "string" },
+        "config.secret": { "type": "string" },
+        "config.url": { "required": true, "type": "string" },
+        "events": { "type": "string[]" },
+        "name": { "required": true, "type": "string" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/hooks"
+    },
+    "createInvitation": {
+      "method": "POST",
+      "params": {
+        "email": { "type": "string" },
+        "invitee_id": { "type": "integer" },
+        "org": { "required": true, "type": "string" },
+        "role": {
+          "enum": ["admin", "direct_member", "billing_manager"],
+          "type": "string"
+        },
+        "team_ids": { "type": "integer[]" }
+      },
+      "url": "/orgs/:org/invitations"
+    },
+    "deleteHook": {
+      "method": "DELETE",
+      "params": {
+        "hook_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/hooks/:hook_id"
+    },
+    "get": {
+      "method": "GET",
+      "params": { "org": { "required": true, "type": "string" } },
+      "url": "/orgs/:org"
+    },
+    "getHook": {
+      "method": "GET",
+      "params": {
+        "hook_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/hooks/:hook_id"
+    },
+    "getMembership": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/memberships/:username"
+    },
+    "getMembershipForAuthenticatedUser": {
+      "method": "GET",
+      "params": { "org": { "required": true, "type": "string" } },
+      "url": "/user/memberships/orgs/:org"
+    },
+    "list": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" }
+      },
+      "url": "/organizations"
+    },
+    "listBlockedUsers": {
+      "method": "GET",
+      "params": { "org": { "required": true, "type": "string" } },
+      "url": "/orgs/:org/blocks"
+    },
+    "listForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/orgs"
+    },
+    "listForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/orgs"
+    },
+    "listHooks": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/hooks"
+    },
+    "listInstallations": {
+      "headers": {
+        "accept": "application/vnd.github.machine-man-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/installations"
+    },
+    "listInvitationTeams": {
+      "method": "GET",
+      "params": {
+        "invitation_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/invitations/:invitation_id/teams"
+    },
+    "listMembers": {
+      "method": "GET",
+      "params": {
+        "filter": { "enum": ["2fa_disabled", "all"], "type": "string" },
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "role": { "enum": ["all", "admin", "member"], "type": "string" }
+      },
+      "url": "/orgs/:org/members"
+    },
+    "listMemberships": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "state": { "enum": ["active", "pending"], "type": "string" }
+      },
+      "url": "/user/memberships/orgs"
+    },
+    "listOutsideCollaborators": {
+      "method": "GET",
+      "params": {
+        "filter": { "enum": ["2fa_disabled", "all"], "type": "string" },
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/outside_collaborators"
+    },
+    "listPendingInvitations": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/invitations"
+    },
+    "listPublicMembers": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/public_members"
+    },
+    "pingHook": {
+      "method": "POST",
+      "params": {
+        "hook_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/hooks/:hook_id/pings"
+    },
+    "publicizeMembership": {
+      "method": "PUT",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/public_members/:username"
+    },
+    "removeMember": {
+      "method": "DELETE",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/members/:username"
+    },
+    "removeMembership": {
+      "method": "DELETE",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/memberships/:username"
+    },
+    "removeOutsideCollaborator": {
+      "method": "DELETE",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/outside_collaborators/:username"
+    },
+    "unblockUser": {
+      "method": "DELETE",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/blocks/:username"
+    },
+    "update": {
+      "method": "PATCH",
+      "params": {
+        "billing_email": { "type": "string" },
+        "company": { "type": "string" },
+        "default_repository_permission": {
+          "enum": ["read", "write", "admin", "none"],
+          "type": "string"
+        },
+        "description": { "type": "string" },
+        "email": { "type": "string" },
+        "has_organization_projects": { "type": "boolean" },
+        "has_repository_projects": { "type": "boolean" },
+        "location": { "type": "string" },
+        "members_allowed_repository_creation_type": {
+          "enum": ["all", "private", "none"],
+          "type": "string"
+        },
+        "members_can_create_repositories": { "type": "boolean" },
+        "name": { "type": "string" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org"
+    },
+    "updateHook": {
+      "method": "PATCH",
+      "params": {
+        "active": { "type": "boolean" },
+        "config": { "type": "object" },
+        "config.content_type": { "type": "string" },
+        "config.insecure_ssl": { "type": "string" },
+        "config.secret": { "type": "string" },
+        "config.url": { "required": true, "type": "string" },
+        "events": { "type": "string[]" },
+        "hook_id": { "required": true, "type": "integer" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/hooks/:hook_id"
+    },
+    "updateMembership": {
+      "method": "PATCH",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "state": { "enum": ["active"], "required": true, "type": "string" }
+      },
+      "url": "/user/memberships/orgs/:org"
+    }
+  },
+  "projects": {
+    "addCollaborator": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "PUT",
+      "params": {
+        "permission": { "enum": ["read", "write", "admin"], "type": "string" },
+        "project_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/projects/:project_id/collaborators/:username"
+    },
+    "createCard": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "POST",
+      "params": {
+        "column_id": { "required": true, "type": "integer" },
+        "content_id": { "type": "integer" },
+        "content_type": { "type": "string" },
+        "note": { "type": "string" }
+      },
+      "url": "/projects/columns/:column_id/cards"
+    },
+    "createColumn": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "POST",
+      "params": {
+        "name": { "required": true, "type": "string" },
+        "project_id": { "required": true, "type": "integer" }
+      },
+      "url": "/projects/:project_id/columns"
+    },
+    "createForAuthenticatedUser": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "POST",
+      "params": {
+        "body": { "type": "string" },
+        "name": { "required": true, "type": "string" }
+      },
+      "url": "/user/projects"
+    },
+    "createForOrg": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "POST",
+      "params": {
+        "body": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "org": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/projects"
+    },
+    "createForRepo": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "POST",
+      "params": {
+        "body": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/projects"
+    },
+    "delete": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "DELETE",
+      "params": { "project_id": { "required": true, "type": "integer" } },
+      "url": "/projects/:project_id"
+    },
+    "deleteCard": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "DELETE",
+      "params": { "card_id": { "required": true, "type": "integer" } },
+      "url": "/projects/columns/cards/:card_id"
+    },
+    "deleteColumn": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "DELETE",
+      "params": { "column_id": { "required": true, "type": "integer" } },
+      "url": "/projects/columns/:column_id"
+    },
+    "get": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "project_id": { "required": true, "type": "integer" }
+      },
+      "url": "/projects/:project_id"
+    },
+    "getCard": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": { "card_id": { "required": true, "type": "integer" } },
+      "url": "/projects/columns/cards/:card_id"
+    },
+    "getColumn": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": { "column_id": { "required": true, "type": "integer" } },
+      "url": "/projects/columns/:column_id"
+    },
+    "listCards": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "archived_state": {
+          "enum": ["all", "archived", "not_archived"],
+          "type": "string"
+        },
+        "column_id": { "required": true, "type": "integer" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/projects/columns/:column_id/cards"
+    },
+    "listCollaborators": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "affiliation": {
+          "enum": ["outside", "direct", "all"],
+          "type": "string"
+        },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "project_id": { "required": true, "type": "integer" }
+      },
+      "url": "/projects/:project_id/collaborators"
+    },
+    "listColumns": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "project_id": { "required": true, "type": "integer" }
+      },
+      "url": "/projects/:project_id/columns"
+    },
+    "listForOrg": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/orgs/:org/projects"
+    },
+    "listForRepo": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/projects"
+    },
+    "listForUser": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/projects"
+    },
+    "moveCard": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "POST",
+      "params": {
+        "card_id": { "required": true, "type": "integer" },
+        "column_id": { "type": "integer" },
+        "position": {
+          "required": true,
+          "type": "string",
+          "validation": "^(top|bottom|after:\\d+)$"
+        }
+      },
+      "url": "/projects/columns/cards/:card_id/moves"
+    },
+    "moveColumn": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "POST",
+      "params": {
+        "column_id": { "required": true, "type": "integer" },
+        "position": {
+          "required": true,
+          "type": "string",
+          "validation": "^(first|last|after:\\d+)$"
+        }
+      },
+      "url": "/projects/columns/:column_id/moves"
+    },
+    "removeCollaborator": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "project_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/projects/:project_id/collaborators/:username"
+    },
+    "reviewUserPermissionLevel": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "project_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/projects/:project_id/collaborators/:username/permission"
+    },
+    "update": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "PATCH",
+      "params": {
+        "body": { "type": "string" },
+        "name": { "type": "string" },
+        "organization_permission": { "type": "string" },
+        "private": { "type": "boolean" },
+        "project_id": { "required": true, "type": "integer" },
+        "state": { "enum": ["open", "closed"], "type": "string" }
+      },
+      "url": "/projects/:project_id"
+    },
+    "updateCard": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "PATCH",
+      "params": {
+        "archived": { "type": "boolean" },
+        "card_id": { "required": true, "type": "integer" },
+        "note": { "type": "string" }
+      },
+      "url": "/projects/columns/cards/:card_id"
+    },
+    "updateColumn": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "PATCH",
+      "params": {
+        "column_id": { "required": true, "type": "integer" },
+        "name": { "required": true, "type": "string" }
+      },
+      "url": "/projects/columns/:column_id"
+    }
+  },
+  "pulls": {
+    "checkIfMerged": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/merge"
+    },
+    "create": {
+      "method": "POST",
+      "params": {
+        "base": { "required": true, "type": "string" },
+        "body": { "type": "string" },
+        "draft": { "type": "boolean" },
+        "head": { "required": true, "type": "string" },
+        "maintainer_can_modify": { "type": "boolean" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "title": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls"
+    },
+    "createComment": {
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "commit_id": { "required": true, "type": "string" },
+        "in_reply_to": {
+          "deprecated": true,
+          "description": "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.",
+          "type": "integer"
+        },
+        "line": { "type": "integer" },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "path": { "required": true, "type": "string" },
+        "position": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "side": { "enum": ["LEFT", "RIGHT"], "type": "string" },
+        "start_line": { "type": "integer" },
+        "start_side": { "enum": ["LEFT", "RIGHT", "side"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/comments"
+    },
+    "createCommentReply": {
+      "deprecated": "octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)",
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "commit_id": { "required": true, "type": "string" },
+        "in_reply_to": {
+          "deprecated": true,
+          "description": "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.",
+          "type": "integer"
+        },
+        "line": { "type": "integer" },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "path": { "required": true, "type": "string" },
+        "position": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "side": { "enum": ["LEFT", "RIGHT"], "type": "string" },
+        "start_line": { "type": "integer" },
+        "start_side": { "enum": ["LEFT", "RIGHT", "side"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/comments"
+    },
+    "createFromIssue": {
+      "deprecated": "octokit.pulls.createFromIssue() is deprecated, see https://developer.github.com/v3/pulls/#create-a-pull-request",
+      "method": "POST",
+      "params": {
+        "base": { "required": true, "type": "string" },
+        "draft": { "type": "boolean" },
+        "head": { "required": true, "type": "string" },
+        "issue": { "required": true, "type": "integer" },
+        "maintainer_can_modify": { "type": "boolean" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls"
+    },
+    "createReview": {
+      "method": "POST",
+      "params": {
+        "body": { "type": "string" },
+        "comments": { "type": "object[]" },
+        "comments[].body": { "required": true, "type": "string" },
+        "comments[].path": { "required": true, "type": "string" },
+        "comments[].position": { "required": true, "type": "integer" },
+        "commit_id": { "type": "string" },
+        "event": {
+          "enum": ["APPROVE", "REQUEST_CHANGES", "COMMENT"],
+          "type": "string"
+        },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews"
+    },
+    "createReviewCommentReply": {
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies"
+    },
+    "createReviewRequest": {
+      "method": "POST",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "reviewers": { "type": "string[]" },
+        "team_reviewers": { "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers"
+    },
+    "deleteComment": {
+      "method": "DELETE",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/comments/:comment_id"
+    },
+    "deletePendingReview": {
+      "method": "DELETE",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "review_id": { "required": true, "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id"
+    },
+    "deleteReviewRequest": {
+      "method": "DELETE",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "reviewers": { "type": "string[]" },
+        "team_reviewers": { "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers"
+    },
+    "dismissReview": {
+      "method": "PUT",
+      "params": {
+        "message": { "required": true, "type": "string" },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "review_id": { "required": true, "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals"
+    },
+    "get": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number"
+    },
+    "getComment": {
+      "method": "GET",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/comments/:comment_id"
+    },
+    "getCommentsForReview": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "review_id": { "required": true, "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments"
+    },
+    "getReview": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "review_id": { "required": true, "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id"
+    },
+    "list": {
+      "method": "GET",
+      "params": {
+        "base": { "type": "string" },
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "head": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "sort": {
+          "enum": ["created", "updated", "popularity", "long-running"],
+          "type": "string"
+        },
+        "state": { "enum": ["open", "closed", "all"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls"
+    },
+    "listComments": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "since": { "type": "string" },
+        "sort": { "enum": ["created", "updated"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/comments"
+    },
+    "listCommentsForRepo": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "since": { "type": "string" },
+        "sort": { "enum": ["created", "updated"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/comments"
+    },
+    "listCommits": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/commits"
+    },
+    "listFiles": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/files"
+    },
+    "listReviewRequests": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers"
+    },
+    "listReviews": {
+      "method": "GET",
+      "params": {
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews"
+    },
+    "merge": {
+      "method": "PUT",
+      "params": {
+        "commit_message": { "type": "string" },
+        "commit_title": { "type": "string" },
+        "merge_method": {
+          "enum": ["merge", "squash", "rebase"],
+          "type": "string"
+        },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/merge"
+    },
+    "submitReview": {
+      "method": "POST",
+      "params": {
+        "body": { "type": "string" },
+        "event": {
+          "enum": ["APPROVE", "REQUEST_CHANGES", "COMMENT"],
+          "required": true,
+          "type": "string"
+        },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "review_id": { "required": true, "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events"
+    },
+    "update": {
+      "method": "PATCH",
+      "params": {
+        "base": { "type": "string" },
+        "body": { "type": "string" },
+        "maintainer_can_modify": { "type": "boolean" },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "state": { "enum": ["open", "closed"], "type": "string" },
+        "title": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number"
+    },
+    "updateBranch": {
+      "headers": { "accept": "application/vnd.github.lydian-preview+json" },
+      "method": "PUT",
+      "params": {
+        "expected_head_sha": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/update-branch"
+    },
+    "updateComment": {
+      "method": "PATCH",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/comments/:comment_id"
+    },
+    "updateReview": {
+      "method": "PUT",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "number": {
+          "alias": "pull_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "pull_number": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "review_id": { "required": true, "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id"
+    }
+  },
+  "rateLimit": {
+    "get": { "method": "GET", "params": {}, "url": "/rate_limit" }
+  },
+  "reactions": {
+    "createForCommitComment": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "required": true,
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/comments/:comment_id/reactions"
+    },
+    "createForIssue": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "required": true,
+          "type": "string"
+        },
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/reactions"
+    },
+    "createForIssueComment": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "required": true,
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/comments/:comment_id/reactions"
+    },
+    "createForPullRequestReviewComment": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "required": true,
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/comments/:comment_id/reactions"
+    },
+    "createForTeamDiscussion": {
+      "headers": {
+        "accept": "application/vnd.github.echo-preview+json,application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "required": true,
+          "type": "string"
+        },
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/reactions"
+    },
+    "createForTeamDiscussionComment": {
+      "headers": {
+        "accept": "application/vnd.github.echo-preview+json,application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "POST",
+      "params": {
+        "comment_number": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "required": true,
+          "type": "string"
+        },
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions"
+    },
+    "delete": {
+      "headers": {
+        "accept": "application/vnd.github.echo-preview+json,application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "DELETE",
+      "params": { "reaction_id": { "required": true, "type": "integer" } },
+      "url": "/reactions/:reaction_id"
+    },
+    "listForCommitComment": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/comments/:comment_id/reactions"
+    },
+    "listForIssue": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "type": "string"
+        },
+        "issue_number": { "required": true, "type": "integer" },
+        "number": {
+          "alias": "issue_number",
+          "deprecated": true,
+          "type": "integer"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/:issue_number/reactions"
+    },
+    "listForIssueComment": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/issues/comments/:comment_id/reactions"
+    },
+    "listForPullRequestReviewComment": {
+      "headers": {
+        "accept": "application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pulls/comments/:comment_id/reactions"
+    },
+    "listForTeamDiscussion": {
+      "headers": {
+        "accept": "application/vnd.github.echo-preview+json,application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "type": "string"
+        },
+        "discussion_number": { "required": true, "type": "integer" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/reactions"
+    },
+    "listForTeamDiscussionComment": {
+      "headers": {
+        "accept": "application/vnd.github.echo-preview+json,application/vnd.github.squirrel-girl-preview+json"
+      },
+      "method": "GET",
+      "params": {
+        "comment_number": { "required": true, "type": "integer" },
+        "content": {
+          "enum": [
+            "+1",
+            "-1",
+            "laugh",
+            "confused",
+            "heart",
+            "hooray",
+            "rocket",
+            "eyes"
+          ],
+          "type": "string"
+        },
+        "discussion_number": { "required": true, "type": "integer" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions"
+    }
+  },
+  "repos": {
+    "acceptInvitation": {
+      "method": "PATCH",
+      "params": { "invitation_id": { "required": true, "type": "integer" } },
+      "url": "/user/repository_invitations/:invitation_id"
+    },
+    "addCollaborator": {
+      "method": "PUT",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "permission": { "enum": ["pull", "push", "admin"], "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/collaborators/:username"
+    },
+    "addDeployKey": {
+      "method": "POST",
+      "params": {
+        "key": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "read_only": { "type": "boolean" },
+        "repo": { "required": true, "type": "string" },
+        "title": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/keys"
+    },
+    "addProtectedBranchAdminEnforcement": {
+      "method": "POST",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/enforce_admins"
+    },
+    "addProtectedBranchAppRestrictions": {
+      "method": "POST",
+      "params": {
+        "apps": { "mapTo": "data", "required": true, "type": "string[]" },
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
+    },
+    "addProtectedBranchRequiredSignatures": {
+      "headers": { "accept": "application/vnd.github.zzzax-preview+json" },
+      "method": "POST",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_signatures"
+    },
+    "addProtectedBranchRequiredStatusChecksContexts": {
+      "method": "POST",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "contexts": { "mapTo": "data", "required": true, "type": "string[]" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
+    },
+    "addProtectedBranchTeamRestrictions": {
+      "method": "POST",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "teams": { "mapTo": "data", "required": true, "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
+    },
+    "addProtectedBranchUserRestrictions": {
+      "method": "POST",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "users": { "mapTo": "data", "required": true, "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
+    },
+    "checkCollaborator": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/collaborators/:username"
+    },
+    "checkVulnerabilityAlerts": {
+      "headers": { "accept": "application/vnd.github.dorian-preview+json" },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/vulnerability-alerts"
+    },
+    "compareCommits": {
+      "method": "GET",
+      "params": {
+        "base": { "required": true, "type": "string" },
+        "head": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/compare/:base...:head"
+    },
+    "createCommitComment": {
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "commit_sha": { "required": true, "type": "string" },
+        "line": { "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "path": { "type": "string" },
+        "position": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "alias": "commit_sha", "deprecated": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:commit_sha/comments"
+    },
+    "createDeployment": {
+      "method": "POST",
+      "params": {
+        "auto_merge": { "type": "boolean" },
+        "description": { "type": "string" },
+        "environment": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "payload": { "type": "string" },
+        "production_environment": { "type": "boolean" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "required_contexts": { "type": "string[]" },
+        "task": { "type": "string" },
+        "transient_environment": { "type": "boolean" }
+      },
+      "url": "/repos/:owner/:repo/deployments"
+    },
+    "createDeploymentStatus": {
+      "method": "POST",
+      "params": {
+        "auto_inactive": { "type": "boolean" },
+        "deployment_id": { "required": true, "type": "integer" },
+        "description": { "type": "string" },
+        "environment": {
+          "enum": ["production", "staging", "qa"],
+          "type": "string"
+        },
+        "environment_url": { "type": "string" },
+        "log_url": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "state": {
+          "enum": [
+            "error",
+            "failure",
+            "inactive",
+            "in_progress",
+            "queued",
+            "pending",
+            "success"
+          ],
+          "required": true,
+          "type": "string"
+        },
+        "target_url": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/deployments/:deployment_id/statuses"
+    },
+    "createDispatchEvent": {
+      "headers": { "accept": "application/vnd.github.everest-preview+json" },
+      "method": "POST",
+      "params": {
+        "client_payload": { "type": "object" },
+        "event_type": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/dispatches"
+    },
+    "createFile": {
+      "deprecated": "octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)",
+      "method": "PUT",
+      "params": {
+        "author": { "type": "object" },
+        "author.email": { "required": true, "type": "string" },
+        "author.name": { "required": true, "type": "string" },
+        "branch": { "type": "string" },
+        "committer": { "type": "object" },
+        "committer.email": { "required": true, "type": "string" },
+        "committer.name": { "required": true, "type": "string" },
+        "content": { "required": true, "type": "string" },
+        "message": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "path": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/contents/:path"
+    },
+    "createForAuthenticatedUser": {
+      "method": "POST",
+      "params": {
+        "allow_merge_commit": { "type": "boolean" },
+        "allow_rebase_merge": { "type": "boolean" },
+        "allow_squash_merge": { "type": "boolean" },
+        "auto_init": { "type": "boolean" },
+        "description": { "type": "string" },
+        "gitignore_template": { "type": "string" },
+        "has_issues": { "type": "boolean" },
+        "has_projects": { "type": "boolean" },
+        "has_wiki": { "type": "boolean" },
+        "homepage": { "type": "string" },
+        "is_template": { "type": "boolean" },
+        "license_template": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "private": { "type": "boolean" },
+        "team_id": { "type": "integer" }
+      },
+      "url": "/user/repos"
+    },
+    "createFork": {
+      "method": "POST",
+      "params": {
+        "organization": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/forks"
+    },
+    "createHook": {
+      "method": "POST",
+      "params": {
+        "active": { "type": "boolean" },
+        "config": { "required": true, "type": "object" },
+        "config.content_type": { "type": "string" },
+        "config.insecure_ssl": { "type": "string" },
+        "config.secret": { "type": "string" },
+        "config.url": { "required": true, "type": "string" },
+        "events": { "type": "string[]" },
+        "name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/hooks"
+    },
+    "createInOrg": {
+      "method": "POST",
+      "params": {
+        "allow_merge_commit": { "type": "boolean" },
+        "allow_rebase_merge": { "type": "boolean" },
+        "allow_squash_merge": { "type": "boolean" },
+        "auto_init": { "type": "boolean" },
+        "description": { "type": "string" },
+        "gitignore_template": { "type": "string" },
+        "has_issues": { "type": "boolean" },
+        "has_projects": { "type": "boolean" },
+        "has_wiki": { "type": "boolean" },
+        "homepage": { "type": "string" },
+        "is_template": { "type": "boolean" },
+        "license_template": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "org": { "required": true, "type": "string" },
+        "private": { "type": "boolean" },
+        "team_id": { "type": "integer" }
+      },
+      "url": "/orgs/:org/repos"
+    },
+    "createOrUpdateFile": {
+      "method": "PUT",
+      "params": {
+        "author": { "type": "object" },
+        "author.email": { "required": true, "type": "string" },
+        "author.name": { "required": true, "type": "string" },
+        "branch": { "type": "string" },
+        "committer": { "type": "object" },
+        "committer.email": { "required": true, "type": "string" },
+        "committer.name": { "required": true, "type": "string" },
+        "content": { "required": true, "type": "string" },
+        "message": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "path": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/contents/:path"
+    },
+    "createRelease": {
+      "method": "POST",
+      "params": {
+        "body": { "type": "string" },
+        "draft": { "type": "boolean" },
+        "name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "prerelease": { "type": "boolean" },
+        "repo": { "required": true, "type": "string" },
+        "tag_name": { "required": true, "type": "string" },
+        "target_commitish": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases"
+    },
+    "createStatus": {
+      "method": "POST",
+      "params": {
+        "context": { "type": "string" },
+        "description": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "required": true, "type": "string" },
+        "state": {
+          "enum": ["error", "failure", "pending", "success"],
+          "required": true,
+          "type": "string"
+        },
+        "target_url": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/statuses/:sha"
+    },
+    "createUsingTemplate": {
+      "headers": { "accept": "application/vnd.github.baptiste-preview+json" },
+      "method": "POST",
+      "params": {
+        "description": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "owner": { "type": "string" },
+        "private": { "type": "boolean" },
+        "template_owner": { "required": true, "type": "string" },
+        "template_repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:template_owner/:template_repo/generate"
+    },
+    "declineInvitation": {
+      "method": "DELETE",
+      "params": { "invitation_id": { "required": true, "type": "integer" } },
+      "url": "/user/repository_invitations/:invitation_id"
+    },
+    "delete": {
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo"
+    },
+    "deleteCommitComment": {
+      "method": "DELETE",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/comments/:comment_id"
+    },
+    "deleteDownload": {
+      "method": "DELETE",
+      "params": {
+        "download_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/downloads/:download_id"
+    },
+    "deleteFile": {
+      "method": "DELETE",
+      "params": {
+        "author": { "type": "object" },
+        "author.email": { "type": "string" },
+        "author.name": { "type": "string" },
+        "branch": { "type": "string" },
+        "committer": { "type": "object" },
+        "committer.email": { "type": "string" },
+        "committer.name": { "type": "string" },
+        "message": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "path": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/contents/:path"
+    },
+    "deleteHook": {
+      "method": "DELETE",
+      "params": {
+        "hook_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/hooks/:hook_id"
+    },
+    "deleteInvitation": {
+      "method": "DELETE",
+      "params": {
+        "invitation_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/invitations/:invitation_id"
+    },
+    "deleteRelease": {
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "release_id": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/:release_id"
+    },
+    "deleteReleaseAsset": {
+      "method": "DELETE",
+      "params": {
+        "asset_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/assets/:asset_id"
+    },
+    "disableAutomatedSecurityFixes": {
+      "headers": { "accept": "application/vnd.github.london-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/automated-security-fixes"
+    },
+    "disablePagesSite": {
+      "headers": { "accept": "application/vnd.github.switcheroo-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pages"
+    },
+    "disableVulnerabilityAlerts": {
+      "headers": { "accept": "application/vnd.github.dorian-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/vulnerability-alerts"
+    },
+    "enableAutomatedSecurityFixes": {
+      "headers": { "accept": "application/vnd.github.london-preview+json" },
+      "method": "PUT",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/automated-security-fixes"
+    },
+    "enablePagesSite": {
+      "headers": { "accept": "application/vnd.github.switcheroo-preview+json" },
+      "method": "POST",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "source": { "type": "object" },
+        "source.branch": { "enum": ["master", "gh-pages"], "type": "string" },
+        "source.path": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pages"
+    },
+    "enableVulnerabilityAlerts": {
+      "headers": { "accept": "application/vnd.github.dorian-preview+json" },
+      "method": "PUT",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/vulnerability-alerts"
+    },
+    "get": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo"
+    },
+    "getAppsWithAccessToProtectedBranch": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
+    },
+    "getArchiveLink": {
+      "method": "GET",
+      "params": {
+        "archive_format": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/:archive_format/:ref"
+    },
+    "getBranch": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch"
+    },
+    "getBranchProtection": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection"
+    },
+    "getClones": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "per": { "enum": ["day", "week"], "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/traffic/clones"
+    },
+    "getCodeFrequencyStats": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/stats/code_frequency"
+    },
+    "getCollaboratorPermissionLevel": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/collaborators/:username/permission"
+    },
+    "getCombinedStatusForRef": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:ref/status"
+    },
+    "getCommit": {
+      "method": "GET",
+      "params": {
+        "commit_sha": { "alias": "ref", "deprecated": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "alias": "ref", "deprecated": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:ref"
+    },
+    "getCommitActivityStats": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/stats/commit_activity"
+    },
+    "getCommitComment": {
+      "method": "GET",
+      "params": {
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/comments/:comment_id"
+    },
+    "getCommitRefSha": {
+      "deprecated": "octokit.repos.getCommitRefSha() is deprecated, see https://developer.github.com/v3/repos/commits/#get-a-single-commit",
+      "headers": { "accept": "application/vnd.github.v3.sha" },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:ref"
+    },
+    "getContents": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "path": { "required": true, "type": "string" },
+        "ref": { "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/contents/:path"
+    },
+    "getContributorsStats": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/stats/contributors"
+    },
+    "getDeployKey": {
+      "method": "GET",
+      "params": {
+        "key_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/keys/:key_id"
+    },
+    "getDeployment": {
+      "method": "GET",
+      "params": {
+        "deployment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/deployments/:deployment_id"
+    },
+    "getDeploymentStatus": {
+      "method": "GET",
+      "params": {
+        "deployment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "status_id": { "required": true, "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id"
+    },
+    "getDownload": {
+      "method": "GET",
+      "params": {
+        "download_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/downloads/:download_id"
+    },
+    "getHook": {
+      "method": "GET",
+      "params": {
+        "hook_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/hooks/:hook_id"
+    },
+    "getLatestPagesBuild": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pages/builds/latest"
+    },
+    "getLatestRelease": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/latest"
+    },
+    "getPages": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pages"
+    },
+    "getPagesBuild": {
+      "method": "GET",
+      "params": {
+        "build_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pages/builds/:build_id"
+    },
+    "getParticipationStats": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/stats/participation"
+    },
+    "getProtectedBranchAdminEnforcement": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/enforce_admins"
+    },
+    "getProtectedBranchPullRequestReviewEnforcement": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews"
+    },
+    "getProtectedBranchRequiredSignatures": {
+      "headers": { "accept": "application/vnd.github.zzzax-preview+json" },
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_signatures"
+    },
+    "getProtectedBranchRequiredStatusChecks": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_status_checks"
+    },
+    "getProtectedBranchRestrictions": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions"
+    },
+    "getPunchCardStats": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/stats/punch_card"
+    },
+    "getReadme": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "ref": { "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/readme"
+    },
+    "getRelease": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "release_id": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/:release_id"
+    },
+    "getReleaseAsset": {
+      "method": "GET",
+      "params": {
+        "asset_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/assets/:asset_id"
+    },
+    "getReleaseByTag": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "tag": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/tags/:tag"
+    },
+    "getTeamsWithAccessToProtectedBranch": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
+    },
+    "getTopPaths": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/traffic/popular/paths"
+    },
+    "getTopReferrers": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/traffic/popular/referrers"
+    },
+    "getUsersWithAccessToProtectedBranch": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
+    },
+    "getViews": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "per": { "enum": ["day", "week"], "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/traffic/views"
+    },
+    "list": {
+      "method": "GET",
+      "params": {
+        "affiliation": { "type": "string" },
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "sort": {
+          "enum": ["created", "updated", "pushed", "full_name"],
+          "type": "string"
+        },
+        "type": {
+          "enum": ["all", "owner", "public", "private", "member"],
+          "type": "string"
+        },
+        "visibility": { "enum": ["all", "public", "private"], "type": "string" }
+      },
+      "url": "/user/repos"
+    },
+    "listAppsWithAccessToProtectedBranch": {
+      "deprecated": "octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)",
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
+    },
+    "listAssetsForRelease": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "release_id": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/:release_id/assets"
+    },
+    "listBranches": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "protected": { "type": "boolean" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches"
+    },
+    "listBranchesForHeadCommit": {
+      "headers": { "accept": "application/vnd.github.groot-preview+json" },
+      "method": "GET",
+      "params": {
+        "commit_sha": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:commit_sha/branches-where-head"
+    },
+    "listCollaborators": {
+      "method": "GET",
+      "params": {
+        "affiliation": {
+          "enum": ["outside", "direct", "all"],
+          "type": "string"
+        },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/collaborators"
+    },
+    "listCommentsForCommit": {
+      "method": "GET",
+      "params": {
+        "commit_sha": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "ref": { "alias": "commit_sha", "deprecated": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:commit_sha/comments"
+    },
+    "listCommitComments": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/comments"
+    },
+    "listCommits": {
+      "method": "GET",
+      "params": {
+        "author": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "path": { "type": "string" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "type": "string" },
+        "since": { "type": "string" },
+        "until": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits"
+    },
+    "listContributors": {
+      "method": "GET",
+      "params": {
+        "anon": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/contributors"
+    },
+    "listDeployKeys": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/keys"
+    },
+    "listDeploymentStatuses": {
+      "method": "GET",
+      "params": {
+        "deployment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/deployments/:deployment_id/statuses"
+    },
+    "listDeployments": {
+      "method": "GET",
+      "params": {
+        "environment": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "ref": { "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "type": "string" },
+        "task": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/deployments"
+    },
+    "listDownloads": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/downloads"
+    },
+    "listForOrg": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "sort": {
+          "enum": ["created", "updated", "pushed", "full_name"],
+          "type": "string"
+        },
+        "type": {
+          "enum": ["all", "public", "private", "forks", "sources", "member"],
+          "type": "string"
+        }
+      },
+      "url": "/orgs/:org/repos"
+    },
+    "listForUser": {
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "sort": {
+          "enum": ["created", "updated", "pushed", "full_name"],
+          "type": "string"
+        },
+        "type": { "enum": ["all", "owner", "member"], "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/repos"
+    },
+    "listForks": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "sort": { "enum": ["newest", "oldest", "stargazers"], "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/forks"
+    },
+    "listHooks": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/hooks"
+    },
+    "listInvitations": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/invitations"
+    },
+    "listInvitationsForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/repository_invitations"
+    },
+    "listLanguages": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/languages"
+    },
+    "listPagesBuilds": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pages/builds"
+    },
+    "listProtectedBranchRequiredStatusChecksContexts": {
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
+    },
+    "listProtectedBranchTeamRestrictions": {
+      "deprecated": "octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)",
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
+    },
+    "listProtectedBranchUserRestrictions": {
+      "deprecated": "octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)",
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
+    },
+    "listPublic": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" }
+      },
+      "url": "/repositories"
+    },
+    "listPullRequestsAssociatedWithCommit": {
+      "headers": { "accept": "application/vnd.github.groot-preview+json" },
+      "method": "GET",
+      "params": {
+        "commit_sha": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:commit_sha/pulls"
+    },
+    "listReleases": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases"
+    },
+    "listStatusesForRef": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "ref": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/commits/:ref/statuses"
+    },
+    "listTags": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/tags"
+    },
+    "listTeams": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/teams"
+    },
+    "listTeamsWithAccessToProtectedBranch": {
+      "deprecated": "octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)",
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
+    },
+    "listTopics": {
+      "headers": { "accept": "application/vnd.github.mercy-preview+json" },
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/topics"
+    },
+    "listUsersWithAccessToProtectedBranch": {
+      "deprecated": "octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)",
+      "method": "GET",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
+    },
+    "merge": {
+      "method": "POST",
+      "params": {
+        "base": { "required": true, "type": "string" },
+        "commit_message": { "type": "string" },
+        "head": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/merges"
+    },
+    "pingHook": {
+      "method": "POST",
+      "params": {
+        "hook_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/hooks/:hook_id/pings"
+    },
+    "removeBranchProtection": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection"
+    },
+    "removeCollaborator": {
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/collaborators/:username"
+    },
+    "removeDeployKey": {
+      "method": "DELETE",
+      "params": {
+        "key_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/keys/:key_id"
+    },
+    "removeProtectedBranchAdminEnforcement": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/enforce_admins"
+    },
+    "removeProtectedBranchAppRestrictions": {
+      "method": "DELETE",
+      "params": {
+        "apps": { "mapTo": "data", "required": true, "type": "string[]" },
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
+    },
+    "removeProtectedBranchPullRequestReviewEnforcement": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews"
+    },
+    "removeProtectedBranchRequiredSignatures": {
+      "headers": { "accept": "application/vnd.github.zzzax-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_signatures"
+    },
+    "removeProtectedBranchRequiredStatusChecks": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_status_checks"
+    },
+    "removeProtectedBranchRequiredStatusChecksContexts": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "contexts": { "mapTo": "data", "required": true, "type": "string[]" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
+    },
+    "removeProtectedBranchRestrictions": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions"
+    },
+    "removeProtectedBranchTeamRestrictions": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "teams": { "mapTo": "data", "required": true, "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
+    },
+    "removeProtectedBranchUserRestrictions": {
+      "method": "DELETE",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "users": { "mapTo": "data", "required": true, "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
+    },
+    "replaceProtectedBranchAppRestrictions": {
+      "method": "PUT",
+      "params": {
+        "apps": { "mapTo": "data", "required": true, "type": "string[]" },
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
+    },
+    "replaceProtectedBranchRequiredStatusChecksContexts": {
+      "method": "PUT",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "contexts": { "mapTo": "data", "required": true, "type": "string[]" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
+    },
+    "replaceProtectedBranchTeamRestrictions": {
+      "method": "PUT",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "teams": { "mapTo": "data", "required": true, "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
+    },
+    "replaceProtectedBranchUserRestrictions": {
+      "method": "PUT",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "users": { "mapTo": "data", "required": true, "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
+    },
+    "replaceTopics": {
+      "headers": { "accept": "application/vnd.github.mercy-preview+json" },
+      "method": "PUT",
+      "params": {
+        "names": { "required": true, "type": "string[]" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/topics"
+    },
+    "requestPageBuild": {
+      "method": "POST",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/pages/builds"
+    },
+    "retrieveCommunityProfileMetrics": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/community/profile"
+    },
+    "testPushHook": {
+      "method": "POST",
+      "params": {
+        "hook_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/hooks/:hook_id/tests"
+    },
+    "transfer": {
+      "headers": { "accept": "application/vnd.github.nightshade-preview+json" },
+      "method": "POST",
+      "params": {
+        "new_owner": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "team_ids": { "type": "integer[]" }
+      },
+      "url": "/repos/:owner/:repo/transfer"
+    },
+    "update": {
+      "method": "PATCH",
+      "params": {
+        "allow_merge_commit": { "type": "boolean" },
+        "allow_rebase_merge": { "type": "boolean" },
+        "allow_squash_merge": { "type": "boolean" },
+        "archived": { "type": "boolean" },
+        "default_branch": { "type": "string" },
+        "description": { "type": "string" },
+        "has_issues": { "type": "boolean" },
+        "has_projects": { "type": "boolean" },
+        "has_wiki": { "type": "boolean" },
+        "homepage": { "type": "string" },
+        "is_template": { "type": "boolean" },
+        "name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "private": { "type": "boolean" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo"
+    },
+    "updateBranchProtection": {
+      "method": "PUT",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "enforce_admins": {
+          "allowNull": true,
+          "required": true,
+          "type": "boolean"
+        },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "required_pull_request_reviews": {
+          "allowNull": true,
+          "required": true,
+          "type": "object"
+        },
+        "required_pull_request_reviews.dismiss_stale_reviews": {
+          "type": "boolean"
+        },
+        "required_pull_request_reviews.dismissal_restrictions": {
+          "type": "object"
+        },
+        "required_pull_request_reviews.dismissal_restrictions.teams": {
+          "type": "string[]"
+        },
+        "required_pull_request_reviews.dismissal_restrictions.users": {
+          "type": "string[]"
+        },
+        "required_pull_request_reviews.require_code_owner_reviews": {
+          "type": "boolean"
+        },
+        "required_pull_request_reviews.required_approving_review_count": {
+          "type": "integer"
+        },
+        "required_status_checks": {
+          "allowNull": true,
+          "required": true,
+          "type": "object"
+        },
+        "required_status_checks.contexts": {
+          "required": true,
+          "type": "string[]"
+        },
+        "required_status_checks.strict": {
+          "required": true,
+          "type": "boolean"
+        },
+        "restrictions": {
+          "allowNull": true,
+          "required": true,
+          "type": "object"
+        },
+        "restrictions.apps": { "type": "string[]" },
+        "restrictions.teams": { "required": true, "type": "string[]" },
+        "restrictions.users": { "required": true, "type": "string[]" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection"
+    },
+    "updateCommitComment": {
+      "method": "PATCH",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "comment_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/comments/:comment_id"
+    },
+    "updateFile": {
+      "deprecated": "octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)",
+      "method": "PUT",
+      "params": {
+        "author": { "type": "object" },
+        "author.email": { "required": true, "type": "string" },
+        "author.name": { "required": true, "type": "string" },
+        "branch": { "type": "string" },
+        "committer": { "type": "object" },
+        "committer.email": { "required": true, "type": "string" },
+        "committer.name": { "required": true, "type": "string" },
+        "content": { "required": true, "type": "string" },
+        "message": { "required": true, "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "path": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "sha": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/contents/:path"
+    },
+    "updateHook": {
+      "method": "PATCH",
+      "params": {
+        "active": { "type": "boolean" },
+        "add_events": { "type": "string[]" },
+        "config": { "type": "object" },
+        "config.content_type": { "type": "string" },
+        "config.insecure_ssl": { "type": "string" },
+        "config.secret": { "type": "string" },
+        "config.url": { "required": true, "type": "string" },
+        "events": { "type": "string[]" },
+        "hook_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "remove_events": { "type": "string[]" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/hooks/:hook_id"
+    },
+    "updateInformationAboutPagesSite": {
+      "method": "PUT",
+      "params": {
+        "cname": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "source": {
+          "enum": ["\"gh-pages\"", "\"master\"", "\"master /docs\""],
+          "type": "string"
+        }
+      },
+      "url": "/repos/:owner/:repo/pages"
+    },
+    "updateInvitation": {
+      "method": "PATCH",
+      "params": {
+        "invitation_id": { "required": true, "type": "integer" },
+        "owner": { "required": true, "type": "string" },
+        "permissions": { "enum": ["read", "write", "admin"], "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/invitations/:invitation_id"
+    },
+    "updateProtectedBranchPullRequestReviewEnforcement": {
+      "method": "PATCH",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "dismiss_stale_reviews": { "type": "boolean" },
+        "dismissal_restrictions": { "type": "object" },
+        "dismissal_restrictions.teams": { "type": "string[]" },
+        "dismissal_restrictions.users": { "type": "string[]" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "require_code_owner_reviews": { "type": "boolean" },
+        "required_approving_review_count": { "type": "integer" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews"
+    },
+    "updateProtectedBranchRequiredStatusChecks": {
+      "method": "PATCH",
+      "params": {
+        "branch": { "required": true, "type": "string" },
+        "contexts": { "type": "string[]" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "strict": { "type": "boolean" }
+      },
+      "url": "/repos/:owner/:repo/branches/:branch/protection/required_status_checks"
+    },
+    "updateRelease": {
+      "method": "PATCH",
+      "params": {
+        "body": { "type": "string" },
+        "draft": { "type": "boolean" },
+        "name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "prerelease": { "type": "boolean" },
+        "release_id": { "required": true, "type": "integer" },
+        "repo": { "required": true, "type": "string" },
+        "tag_name": { "type": "string" },
+        "target_commitish": { "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/:release_id"
+    },
+    "updateReleaseAsset": {
+      "method": "PATCH",
+      "params": {
+        "asset_id": { "required": true, "type": "integer" },
+        "label": { "type": "string" },
+        "name": { "type": "string" },
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" }
+      },
+      "url": "/repos/:owner/:repo/releases/assets/:asset_id"
+    },
+    "uploadReleaseAsset": {
+      "method": "POST",
+      "params": {
+        "file": {
+          "mapTo": "data",
+          "required": true,
+          "type": "string | object"
+        },
+        "headers": { "required": true, "type": "object" },
+        "headers.content-length": { "required": true, "type": "integer" },
+        "headers.content-type": { "required": true, "type": "string" },
+        "label": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "url": { "required": true, "type": "string" }
+      },
+      "url": ":url"
+    }
+  },
+  "search": {
+    "code": {
+      "method": "GET",
+      "params": {
+        "order": { "enum": ["desc", "asc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "q": { "required": true, "type": "string" },
+        "sort": { "enum": ["indexed"], "type": "string" }
+      },
+      "url": "/search/code"
+    },
+    "commits": {
+      "headers": { "accept": "application/vnd.github.cloak-preview+json" },
+      "method": "GET",
+      "params": {
+        "order": { "enum": ["desc", "asc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "q": { "required": true, "type": "string" },
+        "sort": { "enum": ["author-date", "committer-date"], "type": "string" }
+      },
+      "url": "/search/commits"
+    },
+    "issues": {
+      "deprecated": "octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)",
+      "method": "GET",
+      "params": {
+        "order": { "enum": ["desc", "asc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "q": { "required": true, "type": "string" },
+        "sort": {
+          "enum": [
+            "comments",
+            "reactions",
+            "reactions-+1",
+            "reactions--1",
+            "reactions-smile",
+            "reactions-thinking_face",
+            "reactions-heart",
+            "reactions-tada",
+            "interactions",
+            "created",
+            "updated"
+          ],
+          "type": "string"
+        }
+      },
+      "url": "/search/issues"
+    },
+    "issuesAndPullRequests": {
+      "method": "GET",
+      "params": {
+        "order": { "enum": ["desc", "asc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "q": { "required": true, "type": "string" },
+        "sort": {
+          "enum": [
+            "comments",
+            "reactions",
+            "reactions-+1",
+            "reactions--1",
+            "reactions-smile",
+            "reactions-thinking_face",
+            "reactions-heart",
+            "reactions-tada",
+            "interactions",
+            "created",
+            "updated"
+          ],
+          "type": "string"
+        }
+      },
+      "url": "/search/issues"
+    },
+    "labels": {
+      "method": "GET",
+      "params": {
+        "order": { "enum": ["desc", "asc"], "type": "string" },
+        "q": { "required": true, "type": "string" },
+        "repository_id": { "required": true, "type": "integer" },
+        "sort": { "enum": ["created", "updated"], "type": "string" }
+      },
+      "url": "/search/labels"
+    },
+    "repos": {
+      "method": "GET",
+      "params": {
+        "order": { "enum": ["desc", "asc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "q": { "required": true, "type": "string" },
+        "sort": {
+          "enum": ["stars", "forks", "help-wanted-issues", "updated"],
+          "type": "string"
+        }
+      },
+      "url": "/search/repositories"
+    },
+    "topics": {
+      "method": "GET",
+      "params": { "q": { "required": true, "type": "string" } },
+      "url": "/search/topics"
+    },
+    "users": {
+      "method": "GET",
+      "params": {
+        "order": { "enum": ["desc", "asc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "q": { "required": true, "type": "string" },
+        "sort": {
+          "enum": ["followers", "repositories", "joined"],
+          "type": "string"
+        }
+      },
+      "url": "/search/users"
+    }
+  },
+  "teams": {
+    "addMember": {
+      "deprecated": "octokit.teams.addMember() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member",
+      "method": "PUT",
+      "params": {
+        "team_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/teams/:team_id/members/:username"
+    },
+    "addOrUpdateMembership": {
+      "method": "PUT",
+      "params": {
+        "role": { "enum": ["member", "maintainer"], "type": "string" },
+        "team_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/teams/:team_id/memberships/:username"
+    },
+    "addOrUpdateProject": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "PUT",
+      "params": {
+        "permission": { "enum": ["read", "write", "admin"], "type": "string" },
+        "project_id": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/projects/:project_id"
+    },
+    "addOrUpdateRepo": {
+      "method": "PUT",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "permission": { "enum": ["pull", "push", "admin"], "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/repos/:owner/:repo"
+    },
+    "checkManagesRepo": {
+      "method": "GET",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/repos/:owner/:repo"
+    },
+    "create": {
+      "method": "POST",
+      "params": {
+        "description": { "type": "string" },
+        "maintainers": { "type": "string[]" },
+        "name": { "required": true, "type": "string" },
+        "org": { "required": true, "type": "string" },
+        "parent_team_id": { "type": "integer" },
+        "permission": { "enum": ["pull", "push", "admin"], "type": "string" },
+        "privacy": { "enum": ["secret", "closed"], "type": "string" },
+        "repo_names": { "type": "string[]" }
+      },
+      "url": "/orgs/:org/teams"
+    },
+    "createDiscussion": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "private": { "type": "boolean" },
+        "team_id": { "required": true, "type": "integer" },
+        "title": { "required": true, "type": "string" }
+      },
+      "url": "/teams/:team_id/discussions"
+    },
+    "createDiscussionComment": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "POST",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/comments"
+    },
+    "delete": {
+      "method": "DELETE",
+      "params": { "team_id": { "required": true, "type": "integer" } },
+      "url": "/teams/:team_id"
+    },
+    "deleteDiscussion": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number"
+    },
+    "deleteDiscussionComment": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "DELETE",
+      "params": {
+        "comment_number": { "required": true, "type": "integer" },
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
+    },
+    "get": {
+      "method": "GET",
+      "params": { "team_id": { "required": true, "type": "integer" } },
+      "url": "/teams/:team_id"
+    },
+    "getByName": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "team_slug": { "required": true, "type": "string" }
+      },
+      "url": "/orgs/:org/teams/:team_slug"
+    },
+    "getDiscussion": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "GET",
+      "params": {
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number"
+    },
+    "getDiscussionComment": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "GET",
+      "params": {
+        "comment_number": { "required": true, "type": "integer" },
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
+    },
+    "getMember": {
+      "deprecated": "octokit.teams.getMember() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member",
+      "method": "GET",
+      "params": {
+        "team_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/teams/:team_id/members/:username"
+    },
+    "getMembership": {
+      "method": "GET",
+      "params": {
+        "team_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/teams/:team_id/memberships/:username"
+    },
+    "list": {
+      "method": "GET",
+      "params": {
+        "org": { "required": true, "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/orgs/:org/teams"
+    },
+    "listChild": {
+      "headers": { "accept": "application/vnd.github.hellcat-preview+json" },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/teams"
+    },
+    "listDiscussionComments": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "discussion_number": { "required": true, "type": "integer" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/comments"
+    },
+    "listDiscussions": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "GET",
+      "params": {
+        "direction": { "enum": ["asc", "desc"], "type": "string" },
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions"
+    },
+    "listForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/teams"
+    },
+    "listMembers": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "role": { "enum": ["member", "maintainer", "all"], "type": "string" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/members"
+    },
+    "listPendingInvitations": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/invitations"
+    },
+    "listProjects": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/projects"
+    },
+    "listRepos": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/repos"
+    },
+    "removeMember": {
+      "deprecated": "octokit.teams.removeMember() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member",
+      "method": "DELETE",
+      "params": {
+        "team_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/teams/:team_id/members/:username"
+    },
+    "removeMembership": {
+      "method": "DELETE",
+      "params": {
+        "team_id": { "required": true, "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/teams/:team_id/memberships/:username"
+    },
+    "removeProject": {
+      "method": "DELETE",
+      "params": {
+        "project_id": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/projects/:project_id"
+    },
+    "removeRepo": {
+      "method": "DELETE",
+      "params": {
+        "owner": { "required": true, "type": "string" },
+        "repo": { "required": true, "type": "string" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/repos/:owner/:repo"
+    },
+    "reviewProject": {
+      "headers": { "accept": "application/vnd.github.inertia-preview+json" },
+      "method": "GET",
+      "params": {
+        "project_id": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/projects/:project_id"
+    },
+    "update": {
+      "method": "PATCH",
+      "params": {
+        "description": { "type": "string" },
+        "name": { "required": true, "type": "string" },
+        "parent_team_id": { "type": "integer" },
+        "permission": { "enum": ["pull", "push", "admin"], "type": "string" },
+        "privacy": { "enum": ["secret", "closed"], "type": "string" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id"
+    },
+    "updateDiscussion": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "PATCH",
+      "params": {
+        "body": { "type": "string" },
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" },
+        "title": { "type": "string" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number"
+    },
+    "updateDiscussionComment": {
+      "headers": { "accept": "application/vnd.github.echo-preview+json" },
+      "method": "PATCH",
+      "params": {
+        "body": { "required": true, "type": "string" },
+        "comment_number": { "required": true, "type": "integer" },
+        "discussion_number": { "required": true, "type": "integer" },
+        "team_id": { "required": true, "type": "integer" }
+      },
+      "url": "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
+    }
+  },
+  "users": {
+    "addEmails": {
+      "method": "POST",
+      "params": { "emails": { "required": true, "type": "string[]" } },
+      "url": "/user/emails"
+    },
+    "block": {
+      "method": "PUT",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/user/blocks/:username"
+    },
+    "checkBlocked": {
+      "method": "GET",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/user/blocks/:username"
+    },
+    "checkFollowing": {
+      "method": "GET",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/user/following/:username"
+    },
+    "checkFollowingForUser": {
+      "method": "GET",
+      "params": {
+        "target_user": { "required": true, "type": "string" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/following/:target_user"
+    },
+    "createGpgKey": {
+      "method": "POST",
+      "params": { "armored_public_key": { "type": "string" } },
+      "url": "/user/gpg_keys"
+    },
+    "createPublicKey": {
+      "method": "POST",
+      "params": { "key": { "type": "string" }, "title": { "type": "string" } },
+      "url": "/user/keys"
+    },
+    "deleteEmails": {
+      "method": "DELETE",
+      "params": { "emails": { "required": true, "type": "string[]" } },
+      "url": "/user/emails"
+    },
+    "deleteGpgKey": {
+      "method": "DELETE",
+      "params": { "gpg_key_id": { "required": true, "type": "integer" } },
+      "url": "/user/gpg_keys/:gpg_key_id"
+    },
+    "deletePublicKey": {
+      "method": "DELETE",
+      "params": { "key_id": { "required": true, "type": "integer" } },
+      "url": "/user/keys/:key_id"
+    },
+    "follow": {
+      "method": "PUT",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/user/following/:username"
+    },
+    "getAuthenticated": { "method": "GET", "params": {}, "url": "/user" },
+    "getByUsername": {
+      "method": "GET",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/users/:username"
+    },
+    "getContextForUser": {
+      "headers": { "accept": "application/vnd.github.hagar-preview+json" },
+      "method": "GET",
+      "params": {
+        "subject_id": { "type": "string" },
+        "subject_type": {
+          "enum": ["organization", "repository", "issue", "pull_request"],
+          "type": "string"
+        },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/hovercard"
+    },
+    "getGpgKey": {
+      "method": "GET",
+      "params": { "gpg_key_id": { "required": true, "type": "integer" } },
+      "url": "/user/gpg_keys/:gpg_key_id"
+    },
+    "getPublicKey": {
+      "method": "GET",
+      "params": { "key_id": { "required": true, "type": "integer" } },
+      "url": "/user/keys/:key_id"
+    },
+    "list": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "since": { "type": "string" }
+      },
+      "url": "/users"
+    },
+    "listBlocked": { "method": "GET", "params": {}, "url": "/user/blocks" },
+    "listEmails": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/emails"
+    },
+    "listFollowersForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/followers"
+    },
+    "listFollowersForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/followers"
+    },
+    "listFollowingForAuthenticatedUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/following"
+    },
+    "listFollowingForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/following"
+    },
+    "listGpgKeys": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/gpg_keys"
+    },
+    "listGpgKeysForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/gpg_keys"
+    },
+    "listPublicEmails": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/public_emails"
+    },
+    "listPublicKeys": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" }
+      },
+      "url": "/user/keys"
+    },
+    "listPublicKeysForUser": {
+      "method": "GET",
+      "params": {
+        "page": { "type": "integer" },
+        "per_page": { "type": "integer" },
+        "username": { "required": true, "type": "string" }
+      },
+      "url": "/users/:username/keys"
+    },
+    "togglePrimaryEmailVisibility": {
+      "method": "PATCH",
+      "params": {
+        "email": { "required": true, "type": "string" },
+        "visibility": { "required": true, "type": "string" }
+      },
+      "url": "/user/email/visibility"
+    },
+    "unblock": {
+      "method": "DELETE",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/user/blocks/:username"
+    },
+    "unfollow": {
+      "method": "DELETE",
+      "params": { "username": { "required": true, "type": "string" } },
+      "url": "/user/following/:username"
+    },
+    "updateAuthenticated": {
+      "method": "PATCH",
+      "params": {
+        "bio": { "type": "string" },
+        "blog": { "type": "string" },
+        "company": { "type": "string" },
+        "email": { "type": "string" },
+        "hireable": { "type": "boolean" },
+        "location": { "type": "string" },
+        "name": { "type": "string" }
+      },
+      "url": "/user"
+    }
+  }
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/validate/index.js b/setup-maven/node_modules/@octokit/rest/plugins/validate/index.js
new file mode 100644
index 0000000..9954751
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/validate/index.js
@@ -0,0 +1,7 @@
+module.exports = octokitValidate;
+
+const validate = require("./validate");
+
+function octokitValidate(octokit) {
+  octokit.hook.before("request", validate.bind(null, octokit));
+}
diff --git a/setup-maven/node_modules/@octokit/rest/plugins/validate/validate.js b/setup-maven/node_modules/@octokit/rest/plugins/validate/validate.js
new file mode 100644
index 0000000..00b3008
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/rest/plugins/validate/validate.js
@@ -0,0 +1,151 @@
+"use strict";
+
+module.exports = validate;
+
+const { RequestError } = require("@octokit/request-error");
+const get = require("lodash.get");
+const set = require("lodash.set");
+
+function validate(octokit, options) {
+  if (!options.request.validate) {
+    return;
+  }
+  const { validate: params } = options.request;
+
+  Object.keys(params).forEach(parameterName => {
+    const parameter = get(params, parameterName);
+
+    const expectedType = parameter.type;
+    let parentParameterName;
+    let parentValue;
+    let parentParamIsPresent = true;
+    let parentParameterIsArray = false;
+
+    if (/\./.test(parameterName)) {
+      parentParameterName = parameterName.replace(/\.[^.]+$/, "");
+      parentParameterIsArray = parentParameterName.slice(-2) === "[]";
+      if (parentParameterIsArray) {
+        parentParameterName = parentParameterName.slice(0, -2);
+      }
+      parentValue = get(options, parentParameterName);
+      parentParamIsPresent =
+        parentParameterName === "headers" ||
+        (typeof parentValue === "object" && parentValue !== null);
+    }
+
+    const values = parentParameterIsArray
+      ? (get(options, parentParameterName) || []).map(
+          value => value[parameterName.split(/\./).pop()]
+        )
+      : [get(options, parameterName)];
+
+    values.forEach((value, i) => {
+      const valueIsPresent = typeof value !== "undefined";
+      const valueIsNull = value === null;
+      const currentParameterName = parentParameterIsArray
+        ? parameterName.replace(/\[\]/, `[${i}]`)
+        : parameterName;
+
+      if (!parameter.required && !valueIsPresent) {
+        return;
+      }
+
+      // if the parent parameter is of type object but allows null
+      // then the child parameters can be ignored
+      if (!parentParamIsPresent) {
+        return;
+      }
+
+      if (parameter.allowNull && valueIsNull) {
+        return;
+      }
+
+      if (!parameter.allowNull && valueIsNull) {
+        throw new RequestError(
+          `'${currentParameterName}' cannot be null`,
+          400,
+          {
+            request: options
+          }
+        );
+      }
+
+      if (parameter.required && !valueIsPresent) {
+        throw new RequestError(
+          `Empty value for parameter '${currentParameterName}': ${JSON.stringify(
+            value
+          )}`,
+          400,
+          {
+            request: options
+          }
+        );
+      }
+
+      // parse to integer before checking for enum
+      // so that string "1" will match enum with number 1
+      if (expectedType === "integer") {
+        const unparsedValue = value;
+        value = parseInt(value, 10);
+        if (isNaN(value)) {
+          throw new RequestError(
+            `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(
+              unparsedValue
+            )} is NaN`,
+            400,
+            {
+              request: options
+            }
+          );
+        }
+      }
+
+      if (parameter.enum && parameter.enum.indexOf(String(value)) === -1) {
+        throw new RequestError(
+          `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(
+            value
+          )}`,
+          400,
+          {
+            request: options
+          }
+        );
+      }
+
+      if (parameter.validation) {
+        const regex = new RegExp(parameter.validation);
+        if (!regex.test(value)) {
+          throw new RequestError(
+            `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(
+              value
+            )}`,
+            400,
+            {
+              request: options
+            }
+          );
+        }
+      }
+
+      if (expectedType === "object" && typeof value === "string") {
+        try {
+          value = JSON.parse(value);
+        } catch (exception) {
+          throw new RequestError(
+            `JSON parse error of value for parameter '${currentParameterName}': ${JSON.stringify(
+              value
+            )}`,
+            400,
+            {
+              request: options
+            }
+          );
+        }
+      }
+
+      set(options, parameter.mapTo || currentParameterName, value);
+    });
+  });
+
+  return options;
+}
diff --git a/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/01_help.md b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/01_help.md
new file mode 100644
index 0000000..b518515
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/01_help.md
@@ -0,0 +1,5 @@
+---
+name: "🆘 Help"
+about: "How does this even work 🤷‍♂️"
+labels: support
+---
diff --git a/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/02_bug.md b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/02_bug.md
new file mode 100644
index 0000000..d7e8325
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/02_bug.md
@@ -0,0 +1,19 @@
+---
+name: "🐛 Bug Report"
+about: "If something isn't working as expected 🤔"
+labels: bug
+---
+
+<!-- Please replace all placeholders such as this below -->
+
+**What happened?**
+
+<!-- Describe the problem and how to reproduce it. Add screenshots or a link to your repository if possible and helpful -->
+
+**What did you expect to happen?**
+
+<!-- Describe what you expected to happen instead -->
+
+**What the problem might be**
+
+<!-- If you have an idea where the bug might lie, please share here. Otherwise remove the whole section -->
diff --git a/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/03_feature_request.md b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/03_feature_request.md
new file mode 100644
index 0000000..89a5481
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/03_feature_request.md
@@ -0,0 +1,19 @@
+---
+name: "🧚‍♂️ Feature Request"
+about: "Wouldn’t it be nice if 💭"
+labels: feature
+---
+
+<!-- Please replace all placeholders such as this below -->
+
+**What’s missing?**
+
+<!-- Describe your feature idea  -->
+
+**Why?**
+
+<!-- Describe the problem you are facing -->
+
+**Alternatives you tried**
+
+<!-- Describe the workarounds you tried so far and how they worked for you -->
diff --git a/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/04_thanks.md b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/04_thanks.md
new file mode 100644
index 0000000..c67ce83
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/.github/ISSUE_TEMPLATE/04_thanks.md
@@ -0,0 +1,19 @@
+---
+name: "💝 Thank you"
+about: "@octokit/types is awesome 🙌"
+labels: thanks
+---
+
+<!-- Please replace all placeholders such as this below -->
+
+**How do you use @octokit/types?**
+
+<!-- I’d love to know how you use @octokit/types, to better understand people’s use cases -->
+
+**What do you love about it?**
+
+<!-- Thanks for the kind words 🤗 -->
+
+**How did you learn about it?**
+
+<!-- Just curious -->
diff --git a/setup-maven/node_modules/@octokit/types/.github/workflows/release.yml b/setup-maven/node_modules/@octokit/types/.github/workflows/release.yml
new file mode 100644
index 0000000..b315607
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/.github/workflows/release.yml
@@ -0,0 +1,28 @@
+name: Release
+on:
+  push:
+    branches:
+      - master
+
+jobs:
+  release:
+    name: release
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@master
+      - uses: actions/setup-node@v1
+        with:
+          node-version: "12.x"
+      - run: npm ci
+      - run: npx semantic-release
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+      - run: npm run docs
+        env:
+          # workaround "Failed to replace env in config: ${NPM_TOKEN}" error
+          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+      - uses: maxheld83/ghpages@master
+        env:
+          BUILD_DIR: docs/
+          GH_PAT: ${{ secrets.OCTOKIT_PAT }}
diff --git a/setup-maven/node_modules/@octokit/types/.github/workflows/routes-update.yml b/setup-maven/node_modules/@octokit/types/.github/workflows/routes-update.yml
new file mode 100644
index 0000000..38d841d
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/.github/workflows/routes-update.yml
@@ -0,0 +1,39 @@
+name: octokit/routes update
+on:
+  repository_dispatch:
+    types: [octokit-routes-release]
+
+jobs:
+  update_routes:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@master
+      - uses: actions/setup-node@v1
+        with:
+          node-version: "12.x"
+        # try checking out routes-update branch. Ignore error if it does not exist
+      - run: git checkout routes-update || true
+      - run: npm ci
+      - run: npm run update-endpoints
+        env:
+          VERSION: ${{ github.event.client_payload.version }}
+      - name: Create Pull Request
+        uses: gr2m/create-or-update-pull-request-action@v1.x
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          title: "🚧 GitHub REST Endpoints changed"
+          body: |
+            See what changed at https://github.com/octokit/routes/releases/latest.
+
+            Make sure to update the commits so that the merge results in helpful release notes, see [Merging the Pull Request & releasing a new version](https://github.com/octokit/rest.js/blob/master/CONTRIBUTING.md#merging-the-pull-request--releasing-a-new-version).
+
+            In general
+
+            - Avoid breaking changes at all costs
+            - If there are no typescript or code changes, use a `docs` prefix
+            - If there are typescript changes but no code changes, use `fix(typescript)` prefix
+            - If there are code changes, use `fix` if a problem was resolved, `feat` if new endpoints / parameters were added, and `feat(deprecation)` if a method was deprecated.
+          branch: "routes-update"
+          commit-message: "WIP octokit/routes updated"
+          author: "Octokit Bot <33075676+octokitbot@users.noreply.github.com>"
diff --git a/setup-maven/node_modules/@octokit/types/.github/workflows/test.yml b/setup-maven/node_modules/@octokit/types/.github/workflows/test.yml
new file mode 100644
index 0000000..702220f
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/.github/workflows/test.yml
@@ -0,0 +1,19 @@
+name: Test
+on:
+  push:
+    branches:
+      - master
+      - "greenkeeper/*"
+  pull_request:
+    types: [opened, synchronize]
+
+jobs:
+  test:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@master
+      - uses: actions/setup-node@v1
+        with:
+          node-version: 12
+      - run: npm ci
+      - run: npm test
diff --git a/setup-maven/node_modules/@octokit/types/CODE_OF_CONDUCT.md b/setup-maven/node_modules/@octokit/types/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..8392e63
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/CODE_OF_CONDUCT.md
@@ -0,0 +1,75 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level of experience,
+nationality, personal appearance, race, religion, or sexual identity and
+orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+- Using welcoming and inclusive language
+- Being respectful of differing viewpoints and experiences
+- Gracefully accepting constructive criticism
+- Focusing on what is best for the community
+- Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+- The use of sexualized language or imagery and unwelcome sexual attention or
+  advances
+- Trolling, insulting/derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or electronic
+  address, without explicit permission
+- Other conduct which could reasonably be considered inappropriate in a
+  professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at opensource+octokit@github.com. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at [https://contributor-covenant.org/version/1/4][version]
+
+[homepage]: https://contributor-covenant.org
+[version]: https://contributor-covenant.org/version/1/4/
+
diff --git a/setup-maven/node_modules/@octokit/types/CONTRIBUTING.md b/setup-maven/node_modules/@octokit/types/CONTRIBUTING.md
new file mode 100644
index 0000000..6b27599
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/CONTRIBUTING.md
@@ -0,0 +1,59 @@
+# How to contribute
+
+Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md).
+By participating in this project you agree to abide by its terms.
+
+## Creating an Issue
+
+Before you create a new Issue:
+
+1. Please make sure there is no [open issue](https://github.com/octokit/plugin-paginate-rest/issues?utf8=%E2%9C%93&q=is%3Aissue) yet.
+2. If it is a bug report, include the steps to reproduce the issue and please create a reproducible test case on [runkit.com](https://runkit.com/). Example: https://runkit.com/gr2m/5aa034f1440b420012a6eebf
+3. If it is a feature request, please share the motivation for the new feature, what alternatives you tried, and how you would implement it.
+4. Please include links to the corresponding github documentation.
+
+## Setup the repository locally
+
+First, fork the repository.
+
+Setup the repository locally. Replace `<your account name>` with the name of the account you forked to.
+
+```shell
+git clone https://github.com/<your account name>/plugin-paginate-rest.js.git
+cd plugin-paginate-rest.js
+npm install
+```
+
+Run the tests before making changes to make sure the local setup is working as expected
+
+```shell
+npm test
+```
+
+## Submitting the Pull Request
+
+- Create a new branch locally.
+- Make your changes in that branch to your fork repository
+- Submit a pull request from your topic branch to the master branch on the `octokit/plugin-paginate-rest.js` repository.
+- Be sure to tag any issues your pull request is taking care of / contributing to. Adding "Closes #123" to a pull request description will automatically close the issue once the pull request is merged in.
+
+## Testing a pull request from github repo locally:
+
+You can install `@octokit/plugin-paginate-rest` from each pull request. Replace `[PULL REQUEST NUMBER]`
+
+Once you are done testing, you can revert back to the default module `@octokit/plugin-paginate-rest` from npm with `npm install @octokit/plugin-paginate-rest`
+
+## Merging the Pull Request & releasing a new version
+
+Releases are automated using [semantic-release](https://github.com/semantic-release/semantic-release).
+The following commit message conventions determine which version is released:
+
+1. `fix: ...` or `fix(scope name): ...` prefix in subject: bumps fix version, e.g. `1.2.3` → `1.2.4`
+2. `feat: ...` or `feat(scope name): ...` prefix in subject: bumps feature version, e.g. `1.2.3` → `1.3.0`
+3. `BREAKING CHANGE:` in body: bumps breaking version, e.g. `1.2.3` → `2.0.0`
+
+Only one version number is bumped at a time, the highest version change trumps the others.
+Besides publishing a new version to npm, semantic-release also creates a git tag and release
+on GitHub, generates changelogs from the commit messages and puts them into the release notes.
+s
+If the pull request looks good but does not follow the commit conventions, use the <kbd>Squash & merge</kbd> button.
diff --git a/setup-maven/node_modules/@octokit/types/LICENSE b/setup-maven/node_modules/@octokit/types/LICENSE
new file mode 100644
index 0000000..57bee5f
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/LICENSE
@@ -0,0 +1,7 @@
+MIT License Copyright (c) 2019 Octokit contributors
+
+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 (including the next paragraph) 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/setup-maven/node_modules/@octokit/types/README.md b/setup-maven/node_modules/@octokit/types/README.md
new file mode 100644
index 0000000..482dae0
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/README.md
@@ -0,0 +1,19 @@
+# types.ts
+
+> Shared TypeScript definitions for Octokit projects
+
+[![@latest](https://img.shields.io/npm/v/@octokit/types.svg)](https://www.npmjs.com/package/@octokit/types)
+[![Build Status](https://github.com/octokit/types.ts/workflows/Test/badge.svg)](https://github.com/octokit/types.ts/actions?workflow=Test)
+[![Greenkeeper](https://badges.greenkeeper.io/octokit/types.ts.svg)](https://greenkeeper.io/)
+
+## Usage
+
+See https://octokit.github.io/types.ts for all exported types
+
+## Contributing
+
+See [CONTRIBUTING.md](CONTRIBUTING.md)
+
+## License
+
+[MIT](LICENSE)
diff --git a/setup-maven/node_modules/@octokit/types/package.json b/setup-maven/node_modules/@octokit/types/package.json
new file mode 100644
index 0000000..68634b7
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/package.json
@@ -0,0 +1,100 @@
+{
+  "_from": "@octokit/types@^2.0.0",
+  "_id": "@octokit/types@2.0.2",
+  "_inBundle": false,
+  "_integrity": "sha512-StASIL2lgT3TRjxv17z9pAqbnI7HGu9DrJlg3sEBFfCLaMEqp+O3IQPUF6EZtQ4xkAu2ml6kMBBCtGxjvmtmuQ==",
+  "_location": "/@octokit/types",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@octokit/types@^2.0.0",
+    "name": "@octokit/types",
+    "escapedName": "@octokit%2ftypes",
+    "scope": "@octokit",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/endpoint",
+    "/@octokit/request",
+    "/@octokit/request-error"
+  ],
+  "_resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.0.2.tgz",
+  "_shasum": "0888497f5a664e28b0449731d5e88e19b2a74f90",
+  "_spec": "@octokit/types@^2.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "author": {
+    "name": "Gregor Martynus",
+    "url": "https://twitter.com/gr2m"
+  },
+  "bugs": {
+    "url": "https://github.com/octokit/types.ts/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@types/node": ">= 8"
+  },
+  "deprecated": false,
+  "description": "Shared TypeScript definitions for Octokit projects",
+  "devDependencies": {
+    "@octokit/graphql": "^4.2.2",
+    "handlebars": "^4.4.5",
+    "lodash.set": "^4.3.2",
+    "npm-run-all": "^4.1.5",
+    "pascal-case": "^2.0.1",
+    "prettier": "^1.18.2",
+    "semantic-release": "^15.13.24",
+    "semantic-release-plugin-update-version-in-files": "^1.0.0",
+    "sort-keys": "^4.0.0",
+    "string-to-jsdoc-comment": "^1.0.0",
+    "typedoc": "^0.15.0",
+    "typescript": "^3.6.4"
+  },
+  "homepage": "https://github.com/octokit/types.ts#readme",
+  "keywords": [
+    "github",
+    "api",
+    "sdk",
+    "toolkit",
+    "typescript"
+  ],
+  "license": "MIT",
+  "main": "src/index.ts",
+  "name": "@octokit/types",
+  "publishConfig": {
+    "access": "public"
+  },
+  "release": {
+    "plugins": [
+      "@semantic-release/commit-analyzer",
+      "@semantic-release/release-notes-generator",
+      "@semantic-release/github",
+      "@semantic-release/npm",
+      [
+        "semantic-release-plugin-update-version-in-files",
+        {
+          "files": [
+            "src/VERSION.ts"
+          ]
+        }
+      ]
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/octokit/types.ts.git"
+  },
+  "scripts": {
+    "docs": "typedoc --module commonjs --readme none --out docs src/",
+    "lint": "prettier --check '{src,test}/**/*' README.md package.json !src/generated/*",
+    "lint:fix": "prettier --write '{src,test}/**/*' README.md package.json !src/generated/*",
+    "pretest": "npm run -s lint",
+    "test": "tsc --noEmit --declaration src/index.ts",
+    "update-endpoints": "npm-run-all update-endpoints:*",
+    "update-endpoints:fetch-json": "node scripts/update-endpoints/fetch-json",
+    "update-endpoints:typescript": "node scripts/update-endpoints/typescript"
+  },
+  "version": "2.0.2"
+}
diff --git a/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/fetch-json.js b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/fetch-json.js
new file mode 100644
index 0000000..309a312
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/fetch-json.js
@@ -0,0 +1,46 @@
+const { writeFileSync } = require("fs");
+const path = require("path");
+
+const { graphql } = require("@octokit/graphql");
+const prettier = require("prettier");
+
+if (!process.env.VERSION) {
+  throw new Error(`VERSION environment variable must be set`);
+}
+
+const QUERY = `
+  query ($version: String) {
+    endpoints(version: $version) {
+      name
+      scope(format: CAMELCASE)
+      id(format: CAMELCASE)
+      method
+      url
+      parameters {
+        alias
+        allowNull
+        deprecated
+        description
+        enum
+        name
+        type
+        required
+      }
+    }
+  }`;
+
+main();
+
+async function main() {
+  const { endpoints } = await graphql(QUERY, {
+    url: "https://octokit-routes-graphql-server.now.sh/",
+    version: process.env.VERSION
+  });
+
+  writeFileSync(
+    path.resolve(__dirname, "generated", "endpoints.json"),
+    prettier.format(JSON.stringify(endpoints), {
+      parser: "json"
+    })
+  );
+}
diff --git a/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/generated/README.md b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/generated/README.md
new file mode 100644
index 0000000..6beaf58
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/generated/README.md
@@ -0,0 +1,3 @@
+# DO NOT EDIT FILES IN THIS DIRECTORY
+
+All files are generated automatically and will be overwritten next time [octokit/routes](https://github.com/octokit/routes/) has a new release. If you find a problem, please file an issue.
diff --git a/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/generated/endpoints.json b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/generated/endpoints.json
new file mode 100644
index 0000000..6c3d62a
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/generated/endpoints.json
@@ -0,0 +1,25258 @@
+[
+  {
+    "name": "Get the authenticated GitHub App",
+    "scope": "apps",
+    "id": "getAuthenticated",
+    "method": "GET",
+    "url": "/app",
+    "parameters": []
+  },
+  {
+    "name": "Create a GitHub App from a manifest",
+    "scope": "apps",
+    "id": "createFromManifest",
+    "method": "POST",
+    "url": "/app-manifests/{code}/conversions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "code parameter",
+        "enum": null,
+        "name": "code",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List installations",
+    "scope": "apps",
+    "id": "listInstallations",
+    "method": "GET",
+    "url": "/app/installations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get an installation",
+    "scope": "apps",
+    "id": "getInstallation",
+    "method": "GET",
+    "url": "/app/installations/{installation_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "installation_id parameter",
+        "enum": null,
+        "name": "installation_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete an installation",
+    "scope": "apps",
+    "id": "deleteInstallation",
+    "method": "DELETE",
+    "url": "/app/installations/{installation_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "installation_id parameter",
+        "enum": null,
+        "name": "installation_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a new installation token",
+    "scope": "apps",
+    "id": "createInstallationToken",
+    "method": "POST",
+    "url": "/app/installations/{installation_id}/access_tokens",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "installation_id parameter",
+        "enum": null,
+        "name": "installation_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The `id`s of the repositories that the installation token can access. Providing repository `id`s restricts the access of an installation token to specific repositories. You can use the \"[List repositories](https://developer.github.com/v3/apps/installations/#list-repositories)\" endpoint to get the `id` of all repositories that an installation can access. For example, you can select specific repositories when creating an installation token to restrict the number of repositories that can be cloned using the token.",
+        "enum": null,
+        "name": "repository_ids",
+        "type": "integer[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The permissions granted to the access token. The permissions object includes the permission names and their access type. For a complete list of permissions and allowable values, see \"[GitHub App permissions](https://developer.github.com/apps/building-github-apps/creating-github-apps-using-url-parameters/#github-app-permissions).\"",
+        "enum": null,
+        "name": "permissions",
+        "type": "object",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List your grants",
+    "scope": "oauthAuthorizations",
+    "id": "listGrants",
+    "method": "GET",
+    "url": "/applications/grants",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single grant",
+    "scope": "oauthAuthorizations",
+    "id": "getGrant",
+    "method": "GET",
+    "url": "/applications/grants/{grant_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "grant_id parameter",
+        "enum": null,
+        "name": "grant_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a grant",
+    "scope": "oauthAuthorizations",
+    "id": "deleteGrant",
+    "method": "DELETE",
+    "url": "/applications/grants/{grant_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "grant_id parameter",
+        "enum": null,
+        "name": "grant_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Revoke a grant for an application",
+    "scope": "oauthAuthorizations",
+    "id": "revokeGrantForApplication",
+    "method": "DELETE",
+    "url": "/applications/{client_id}/grants/{access_token}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "client_id parameter",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "access_token parameter",
+        "enum": null,
+        "name": "access_token",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Check an authorization",
+    "scope": "oauthAuthorizations",
+    "id": "checkAuthorization",
+    "method": "GET",
+    "url": "/applications/{client_id}/tokens/{access_token}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "client_id parameter",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "access_token parameter",
+        "enum": null,
+        "name": "access_token",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Reset an authorization",
+    "scope": "oauthAuthorizations",
+    "id": "resetAuthorization",
+    "method": "POST",
+    "url": "/applications/{client_id}/tokens/{access_token}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "client_id parameter",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "access_token parameter",
+        "enum": null,
+        "name": "access_token",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Revoke an authorization for an application",
+    "scope": "oauthAuthorizations",
+    "id": "revokeAuthorizationForApplication",
+    "method": "DELETE",
+    "url": "/applications/{client_id}/tokens/{access_token}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "client_id parameter",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "access_token parameter",
+        "enum": null,
+        "name": "access_token",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single GitHub App",
+    "scope": "apps",
+    "id": "getBySlug",
+    "method": "GET",
+    "url": "/apps/{app_slug}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "app_slug parameter",
+        "enum": null,
+        "name": "app_slug",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List your authorizations",
+    "scope": "oauthAuthorizations",
+    "id": "listAuthorizations",
+    "method": "GET",
+    "url": "/authorizations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a new authorization",
+    "scope": "oauthAuthorizations",
+    "id": "createAuthorization",
+    "method": "POST",
+    "url": "/authorizations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of scopes that this authorization is in.",
+        "enum": null,
+        "name": "scopes",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A note to remind you what the OAuth token is for. Tokens not associated with a specific OAuth application (i.e. personal access tokens) must have a unique note.",
+        "enum": null,
+        "name": "note",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL to remind you what app the OAuth token is for.",
+        "enum": null,
+        "name": "note_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The 20 character OAuth app client key for which to create the token.",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The 40 character OAuth app client secret for which to create the token.",
+        "enum": null,
+        "name": "client_secret",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A unique string to distinguish an authorization from others created for the same client ID and user.",
+        "enum": null,
+        "name": "fingerprint",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get-or-create an authorization for a specific app",
+    "scope": "oauthAuthorizations",
+    "id": "getOrCreateAuthorizationForApp",
+    "method": "PUT",
+    "url": "/authorizations/clients/{client_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "client_id parameter",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The 40 character OAuth app client secret associated with the client ID specified in the URL.",
+        "enum": null,
+        "name": "client_secret",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of scopes that this authorization is in.",
+        "enum": null,
+        "name": "scopes",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A note to remind you what the OAuth token is for.",
+        "enum": null,
+        "name": "note",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL to remind you what app the OAuth token is for.",
+        "enum": null,
+        "name": "note_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A unique string to distinguish an authorization from others created for the same client and user. If provided, this API is functionally equivalent to [Get-or-create an authorization for a specific app and fingerprint](https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint).",
+        "enum": null,
+        "name": "fingerprint",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get-or-create an authorization for a specific app and fingerprint",
+    "scope": "oauthAuthorizations",
+    "id": "getOrCreateAuthorizationForAppAndFingerprint",
+    "method": "PUT",
+    "url": "/authorizations/clients/{client_id}/{fingerprint}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "client_id parameter",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "fingerprint parameter",
+        "enum": null,
+        "name": "fingerprint",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The 40 character OAuth app client secret associated with the client ID specified in the URL.",
+        "enum": null,
+        "name": "client_secret",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of scopes that this authorization is in.",
+        "enum": null,
+        "name": "scopes",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A note to remind you what the OAuth token is for.",
+        "enum": null,
+        "name": "note",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL to remind you what app the OAuth token is for.",
+        "enum": null,
+        "name": "note_url",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get-or-create an authorization for a specific app and fingerprint",
+    "scope": "oauthAuthorizations",
+    "id": "getOrCreateAuthorizationForAppFingerprint",
+    "method": "PUT",
+    "url": "/authorizations/clients/{client_id}/{fingerprint}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "client_id parameter",
+        "enum": null,
+        "name": "client_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "fingerprint parameter",
+        "enum": null,
+        "name": "fingerprint",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The 40 character OAuth app client secret associated with the client ID specified in the URL.",
+        "enum": null,
+        "name": "client_secret",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of scopes that this authorization is in.",
+        "enum": null,
+        "name": "scopes",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A note to remind you what the OAuth token is for.",
+        "enum": null,
+        "name": "note",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL to remind you what app the OAuth token is for.",
+        "enum": null,
+        "name": "note_url",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single authorization",
+    "scope": "oauthAuthorizations",
+    "id": "getAuthorization",
+    "method": "GET",
+    "url": "/authorizations/{authorization_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "authorization_id parameter",
+        "enum": null,
+        "name": "authorization_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update an existing authorization",
+    "scope": "oauthAuthorizations",
+    "id": "updateAuthorization",
+    "method": "PATCH",
+    "url": "/authorizations/{authorization_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "authorization_id parameter",
+        "enum": null,
+        "name": "authorization_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Replaces the authorization scopes with these.",
+        "enum": null,
+        "name": "scopes",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of scopes to add to this authorization.",
+        "enum": null,
+        "name": "add_scopes",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of scopes to remove from this authorization.",
+        "enum": null,
+        "name": "remove_scopes",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A note to remind you what the OAuth token is for. Tokens not associated with a specific OAuth application (i.e. personal access tokens) must have a unique note.",
+        "enum": null,
+        "name": "note",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL to remind you what app the OAuth token is for.",
+        "enum": null,
+        "name": "note_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A unique string to distinguish an authorization from others created for the same client ID and user.",
+        "enum": null,
+        "name": "fingerprint",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete an authorization",
+    "scope": "oauthAuthorizations",
+    "id": "deleteAuthorization",
+    "method": "DELETE",
+    "url": "/authorizations/{authorization_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "authorization_id parameter",
+        "enum": null,
+        "name": "authorization_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List all codes of conduct",
+    "scope": "codesOfConduct",
+    "id": "listConductCodes",
+    "method": "GET",
+    "url": "/codes_of_conduct",
+    "parameters": []
+  },
+  {
+    "name": "Get an individual code of conduct",
+    "scope": "codesOfConduct",
+    "id": "getConductCode",
+    "method": "GET",
+    "url": "/codes_of_conduct/{key}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "key parameter",
+        "enum": null,
+        "name": "key",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a content attachment",
+    "scope": "apps",
+    "id": "createContentAttachment",
+    "method": "POST",
+    "url": "/content_references/{content_reference_id}/attachments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "content_reference_id parameter",
+        "enum": null,
+        "name": "content_reference_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the content attachment displayed in the body or comment of an issue or pull request.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The body text of the content attachment displayed in the body or comment of an issue or pull request. This parameter supports markdown.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get",
+    "scope": "emojis",
+    "id": "get",
+    "method": "GET",
+    "url": "/emojis",
+    "parameters": []
+  },
+  {
+    "name": "List public events",
+    "scope": "activity",
+    "id": "listPublicEvents",
+    "method": "GET",
+    "url": "/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List feeds",
+    "scope": "activity",
+    "id": "listFeeds",
+    "method": "GET",
+    "url": "/feeds",
+    "parameters": []
+  },
+  {
+    "name": "List the authenticated user's gists or if called anonymously, this will return all public gists",
+    "scope": "gists",
+    "id": "list",
+    "method": "GET",
+    "url": "/gists",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a gist",
+    "scope": "gists",
+    "id": "create",
+    "method": "POST",
+    "url": "/gists",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The filenames and content of each file in the gist. The keys in the `files` object represent the filename and have the type `string`.",
+        "enum": null,
+        "name": "files",
+        "type": "object",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The content of the file.",
+        "enum": null,
+        "name": "files.content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A descriptive name for this gist.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "When `true`, the gist will be public and available for anyone to see.",
+        "enum": null,
+        "name": "public",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all public gists",
+    "scope": "gists",
+    "id": "listPublic",
+    "method": "GET",
+    "url": "/gists/public",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List starred gists",
+    "scope": "gists",
+    "id": "listStarred",
+    "method": "GET",
+    "url": "/gists/starred",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single gist",
+    "scope": "gists",
+    "id": "get",
+    "method": "GET",
+    "url": "/gists/{gist_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a gist",
+    "scope": "gists",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/gists/{gist_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A descriptive name for this gist.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The filenames and content that make up this gist.",
+        "enum": null,
+        "name": "files",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The updated content of the file.",
+        "enum": null,
+        "name": "files.content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new name for this file. To delete a file, set the value of the filename to `null`.",
+        "enum": null,
+        "name": "files.filename",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a gist",
+    "scope": "gists",
+    "id": "delete",
+    "method": "DELETE",
+    "url": "/gists/{gist_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List comments on a gist",
+    "scope": "gists",
+    "id": "listComments",
+    "method": "GET",
+    "url": "/gists/{gist_id}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a comment",
+    "scope": "gists",
+    "id": "createComment",
+    "method": "POST",
+    "url": "/gists/{gist_id}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The comment text.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single comment",
+    "scope": "gists",
+    "id": "getComment",
+    "method": "GET",
+    "url": "/gists/{gist_id}/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a comment",
+    "scope": "gists",
+    "id": "updateComment",
+    "method": "PATCH",
+    "url": "/gists/{gist_id}/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The comment text.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a comment",
+    "scope": "gists",
+    "id": "deleteComment",
+    "method": "DELETE",
+    "url": "/gists/{gist_id}/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List gist commits",
+    "scope": "gists",
+    "id": "listCommits",
+    "method": "GET",
+    "url": "/gists/{gist_id}/commits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Fork a gist",
+    "scope": "gists",
+    "id": "fork",
+    "method": "POST",
+    "url": "/gists/{gist_id}/forks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List gist forks",
+    "scope": "gists",
+    "id": "listForks",
+    "method": "GET",
+    "url": "/gists/{gist_id}/forks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Star a gist",
+    "scope": "gists",
+    "id": "star",
+    "method": "PUT",
+    "url": "/gists/{gist_id}/star",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Unstar a gist",
+    "scope": "gists",
+    "id": "unstar",
+    "method": "DELETE",
+    "url": "/gists/{gist_id}/star",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Check if a gist is starred",
+    "scope": "gists",
+    "id": "checkIsStarred",
+    "method": "GET",
+    "url": "/gists/{gist_id}/star",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a specific revision of a gist",
+    "scope": "gists",
+    "id": "getRevision",
+    "method": "GET",
+    "url": "/gists/{gist_id}/{sha}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gist_id parameter",
+        "enum": null,
+        "name": "gist_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "sha parameter",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Listing available templates",
+    "scope": "gitignore",
+    "id": "listTemplates",
+    "method": "GET",
+    "url": "/gitignore/templates",
+    "parameters": []
+  },
+  {
+    "name": "Get a single template",
+    "scope": "gitignore",
+    "id": "getTemplate",
+    "method": "GET",
+    "url": "/gitignore/templates/{name}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "name parameter",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List repositories",
+    "scope": "apps",
+    "id": "listRepos",
+    "method": "GET",
+    "url": "/installation/repositories",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all issues assigned to the authenticated user across all visible repositories including owned repositories, member repositories, and organization repositories",
+    "scope": "issues",
+    "id": "list",
+    "method": "GET",
+    "url": "/issues",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates which sorts of issues to return. Can be one of:  \n\\* `assigned`: Issues assigned to you  \n\\* `created`: Issues created by you  \n\\* `mentioned`: Issues mentioning you  \n\\* `subscribed`: Issues you're subscribed to updates for  \n\\* `all`: All issues the authenticated user can see, regardless of participation or creation",
+        "enum": ["assigned", "created", "mentioned", "subscribed", "all"],
+        "name": "filter",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of comma separated label names. Example: `bug,ui,@high`",
+        "enum": null,
+        "name": "labels",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "What to sort results by. Can be either `created`, `updated`, `comments`.",
+        "enum": ["created", "updated", "comments"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The direction of the sort. Can be either `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Search issues",
+    "scope": "search",
+    "id": "issuesLegacy",
+    "method": "GET",
+    "url": "/legacy/issues/search/{owner}/{repository}/{state}/{keyword}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repository parameter",
+        "enum": null,
+        "name": "repository",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the issues to return. Can be either `open` or `closed`.",
+        "enum": ["open", "closed"],
+        "name": "state",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The search term.",
+        "enum": null,
+        "name": "keyword",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Search repositories",
+    "scope": "search",
+    "id": "reposLegacy",
+    "method": "GET",
+    "url": "/legacy/repos/search/{keyword}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The search term.",
+        "enum": null,
+        "name": "keyword",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filter results by language.",
+        "enum": null,
+        "name": "language",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The page number to fetch.",
+        "enum": null,
+        "name": "start_page",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The sort field. One of `stars`, `forks`, or `updated`. Default: results are sorted by best match.",
+        "enum": ["stars", "forks", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The sort field. if `sort` param is provided. Can be either `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Email search",
+    "scope": "search",
+    "id": "emailLegacy",
+    "method": "GET",
+    "url": "/legacy/user/email/{email}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email address.",
+        "enum": null,
+        "name": "email",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Search users",
+    "scope": "search",
+    "id": "usersLegacy",
+    "method": "GET",
+    "url": "/legacy/user/search/{keyword}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The search term.",
+        "enum": null,
+        "name": "keyword",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The page number to fetch.",
+        "enum": null,
+        "name": "start_page",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The sort field. One of `stars`, `forks`, or `updated`. Default: results are sorted by best match.",
+        "enum": ["stars", "forks", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The sort field. if `sort` param is provided. Can be either `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List commonly used licenses",
+    "scope": "licenses",
+    "id": "listCommonlyUsed",
+    "method": "GET",
+    "url": "/licenses",
+    "parameters": []
+  },
+  {
+    "name": "List commonly used licenses",
+    "scope": "licenses",
+    "id": "list",
+    "method": "GET",
+    "url": "/licenses",
+    "parameters": []
+  },
+  {
+    "name": "Get an individual license",
+    "scope": "licenses",
+    "id": "get",
+    "method": "GET",
+    "url": "/licenses/{license}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "license parameter",
+        "enum": null,
+        "name": "license",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Render an arbitrary Markdown document",
+    "scope": "markdown",
+    "id": "render",
+    "method": "POST",
+    "url": "/markdown",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The Markdown text to render in HTML. Markdown content must be 400 KB or less.",
+        "enum": null,
+        "name": "text",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The rendering mode. Can be either:  \n\\* `markdown` to render a document in plain Markdown, just like README.md files are rendered.  \n\\* `gfm` to render a document in [GitHub Flavored Markdown](https://github.github.com/gfm/), which creates links for user mentions as well as references to SHA-1 hashes, issues, and pull requests.",
+        "enum": ["markdown", "gfm"],
+        "name": "mode",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The repository context to use when creating references in `gfm` mode. Omit this parameter when using `markdown` mode.",
+        "enum": null,
+        "name": "context",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Render a Markdown document in raw mode",
+    "scope": "markdown",
+    "id": "renderRaw",
+    "method": "POST",
+    "url": "/markdown/raw",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "data parameter",
+        "enum": null,
+        "name": "data",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Check if a GitHub account is associated with any Marketplace listing",
+    "scope": "apps",
+    "id": "checkAccountIsAssociatedWithAny",
+    "method": "GET",
+    "url": "/marketplace_listing/accounts/{account_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "account_id parameter",
+        "enum": null,
+        "name": "account_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all plans for your Marketplace listing",
+    "scope": "apps",
+    "id": "listPlans",
+    "method": "GET",
+    "url": "/marketplace_listing/plans",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all GitHub accounts (user or organization) on a specific plan",
+    "scope": "apps",
+    "id": "listAccountsUserOrOrgOnPlan",
+    "method": "GET",
+    "url": "/marketplace_listing/plans/{plan_id}/accounts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "plan_id parameter",
+        "enum": null,
+        "name": "plan_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the GitHub accounts by the date they were created or last updated. Can be one of `created` or `updated`.",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if a GitHub account is associated with any Marketplace listing (stubbed)",
+    "scope": "apps",
+    "id": "checkAccountIsAssociatedWithAnyStubbed",
+    "method": "GET",
+    "url": "/marketplace_listing/stubbed/accounts/{account_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "account_id parameter",
+        "enum": null,
+        "name": "account_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all plans for your Marketplace listing (stubbed)",
+    "scope": "apps",
+    "id": "listPlansStubbed",
+    "method": "GET",
+    "url": "/marketplace_listing/stubbed/plans",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all GitHub accounts (user or organization) on a specific plan (stubbed)",
+    "scope": "apps",
+    "id": "listAccountsUserOrOrgOnPlanStubbed",
+    "method": "GET",
+    "url": "/marketplace_listing/stubbed/plans/{plan_id}/accounts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "plan_id parameter",
+        "enum": null,
+        "name": "plan_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the GitHub accounts by the date they were created or last updated. Can be one of `created` or `updated`.",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get",
+    "scope": "meta",
+    "id": "get",
+    "method": "GET",
+    "url": "/meta",
+    "parameters": []
+  },
+  {
+    "name": "List public events for a network of repositories",
+    "scope": "activity",
+    "id": "listPublicEventsForRepoNetwork",
+    "method": "GET",
+    "url": "/networks/{owner}/{repo}/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List your notifications",
+    "scope": "activity",
+    "id": "listNotifications",
+    "method": "GET",
+    "url": "/notifications",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If `true`, show notifications marked as read.",
+        "enum": null,
+        "name": "all",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If `true`, only shows notifications in which the user is directly participating or mentioned.",
+        "enum": null,
+        "name": "participating",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "before",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Mark as read",
+    "scope": "activity",
+    "id": "markAsRead",
+    "method": "PUT",
+    "url": "/notifications",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Default: The current timestamp.",
+        "enum": null,
+        "name": "last_read_at",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "View a single thread",
+    "scope": "activity",
+    "id": "getThread",
+    "method": "GET",
+    "url": "/notifications/threads/{thread_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "thread_id parameter",
+        "enum": null,
+        "name": "thread_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Mark a thread as read",
+    "scope": "activity",
+    "id": "markThreadAsRead",
+    "method": "PATCH",
+    "url": "/notifications/threads/{thread_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "thread_id parameter",
+        "enum": null,
+        "name": "thread_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a thread subscription",
+    "scope": "activity",
+    "id": "getThreadSubscription",
+    "method": "GET",
+    "url": "/notifications/threads/{thread_id}/subscription",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "thread_id parameter",
+        "enum": null,
+        "name": "thread_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Set a thread subscription",
+    "scope": "activity",
+    "id": "setThreadSubscription",
+    "method": "PUT",
+    "url": "/notifications/threads/{thread_id}/subscription",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "thread_id parameter",
+        "enum": null,
+        "name": "thread_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Unsubscribes and subscribes you to a conversation. Set `ignored` to `true` to block all notifications from this thread.",
+        "enum": null,
+        "name": "ignored",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a thread subscription",
+    "scope": "activity",
+    "id": "deleteThreadSubscription",
+    "method": "DELETE",
+    "url": "/notifications/threads/{thread_id}/subscription",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "thread_id parameter",
+        "enum": null,
+        "name": "thread_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List all organizations",
+    "scope": "orgs",
+    "id": "list",
+    "method": "GET",
+    "url": "/organizations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The integer ID of the last Organization that you've seen.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get an organization",
+    "scope": "orgs",
+    "id": "get",
+    "method": "GET",
+    "url": "/orgs/{org}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit an organization",
+    "scope": "orgs",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/orgs/{org}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Billing email address. This address is not publicized.",
+        "enum": null,
+        "name": "billing_email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The company name.",
+        "enum": null,
+        "name": "company",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The publicly visible email address.",
+        "enum": null,
+        "name": "email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The location.",
+        "enum": null,
+        "name": "location",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The shorthand name of the company.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The description of the company.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Toggles whether organization projects are enabled for the organization.",
+        "enum": null,
+        "name": "has_organization_projects",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Toggles whether repository projects are enabled for repositories that belong to the organization.",
+        "enum": null,
+        "name": "has_repository_projects",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Default permission level members have for organization repositories:  \n\\* `read` - can pull, but not push to or administer this repository.  \n\\* `write` - can pull and push, but not administer this repository.  \n\\* `admin` - can pull, push, and administer this repository.  \n\\* `none` - no permissions granted by default.",
+        "enum": ["read", "write", "admin", "none"],
+        "name": "default_repository_permission",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Toggles the ability of non-admin organization members to create repositories. Can be one of:  \n\\* `true` - all organization members can create repositories.  \n\\* `false` - only admin members can create repositories.  \nDefault: `true`  \n**Note:** Another parameter can override the this parameter. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details. **Note:** Another parameter can override the this parameter. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details.",
+        "enum": null,
+        "name": "members_can_create_repositories",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies which types of repositories non-admin organization members can create. Can be one of:  \n\\* `all` - all organization members can create public and private repositories.  \n\\* `private` - members can create private repositories. This option is only available to repositories that are part of an organization on [GitHub Business Cloud](https://github.com/pricing/business-cloud).  \n\\* `none` - only admin members can create repositories.  \n**Note:** Using this parameter will override values set in `members_can_create_repositories`. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details.",
+        "enum": ["all", "private", "none"],
+        "name": "members_allowed_repository_creation_type",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List blocked users",
+    "scope": "orgs",
+    "id": "listBlockedUsers",
+    "method": "GET",
+    "url": "/orgs/{org}/blocks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Check whether a user is blocked from an organization",
+    "scope": "orgs",
+    "id": "checkBlockedUser",
+    "method": "GET",
+    "url": "/orgs/{org}/blocks/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Block a user",
+    "scope": "orgs",
+    "id": "blockUser",
+    "method": "PUT",
+    "url": "/orgs/{org}/blocks/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Unblock a user",
+    "scope": "orgs",
+    "id": "unblockUser",
+    "method": "DELETE",
+    "url": "/orgs/{org}/blocks/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List credential authorizations for an organization",
+    "scope": "orgs",
+    "id": "listCredentialAuthorizations",
+    "method": "GET",
+    "url": "/orgs/{org}/credential-authorizations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove a credential authorization for an organization",
+    "scope": "orgs",
+    "id": "removeCredentialAuthorization",
+    "method": "DELETE",
+    "url": "/orgs/{org}/credential-authorizations/{credential_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "credential_id parameter",
+        "enum": null,
+        "name": "credential_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List public events for an organization",
+    "scope": "activity",
+    "id": "listPublicEventsForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List hooks",
+    "scope": "orgs",
+    "id": "listHooks",
+    "method": "GET",
+    "url": "/orgs/{org}/hooks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a hook",
+    "scope": "orgs",
+    "id": "createHook",
+    "method": "POST",
+    "url": "/orgs/{org}/hooks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Must be passed as \"web\".",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/orgs/hooks/#create-hook-config-params).",
+        "enum": null,
+        "name": "config",
+        "type": "object",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The URL to which the payloads will be delivered.",
+        "enum": null,
+        "name": "config.url",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`.",
+        "enum": null,
+        "name": "config.content_type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value in the [`X-Hub-Signature`](https://developer.github.com/webhooks/#delivery-headers) header.",
+        "enum": null,
+        "name": "config.secret",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.**",
+        "enum": null,
+        "name": "config.insecure_ssl",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.",
+        "enum": null,
+        "name": "events",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.",
+        "enum": null,
+        "name": "active",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get single hook",
+    "scope": "orgs",
+    "id": "getHook",
+    "method": "GET",
+    "url": "/orgs/{org}/hooks/{hook_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a hook",
+    "scope": "orgs",
+    "id": "updateHook",
+    "method": "PATCH",
+    "url": "/orgs/{org}/hooks/{hook_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/orgs/hooks/#update-hook-config-params).",
+        "enum": null,
+        "name": "config",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The URL to which the payloads will be delivered.",
+        "enum": null,
+        "name": "config.url",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`.",
+        "enum": null,
+        "name": "config.content_type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value in the [`X-Hub-Signature`](https://developer.github.com/webhooks/#delivery-headers) header.",
+        "enum": null,
+        "name": "config.secret",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.**",
+        "enum": null,
+        "name": "config.insecure_ssl",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.",
+        "enum": null,
+        "name": "events",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.",
+        "enum": null,
+        "name": "active",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a hook",
+    "scope": "orgs",
+    "id": "deleteHook",
+    "method": "DELETE",
+    "url": "/orgs/{org}/hooks/{hook_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Ping a hook",
+    "scope": "orgs",
+    "id": "pingHook",
+    "method": "POST",
+    "url": "/orgs/{org}/hooks/{hook_id}/pings",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get an organization installation",
+    "scope": "apps",
+    "id": "getOrgInstallation",
+    "method": "GET",
+    "url": "/orgs/{org}/installation",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get an organization installation",
+    "scope": "apps",
+    "id": "findOrgInstallation",
+    "method": "GET",
+    "url": "/orgs/{org}/installation",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get interaction restrictions for an organization",
+    "scope": "interactions",
+    "id": "getRestrictionsForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/interaction-limits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add or update interaction restrictions for an organization",
+    "scope": "interactions",
+    "id": "addOrUpdateRestrictionsForOrg",
+    "method": "PUT",
+    "url": "/orgs/{org}/interaction-limits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies the group of GitHub users who can comment, open issues, or create pull requests in public repositories for the given organization. Must be one of: `existing_users`, `contributors_only`, or `collaborators_only`.",
+        "enum": ["existing_users", "contributors_only", "collaborators_only"],
+        "name": "limit",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove interaction restrictions for an organization",
+    "scope": "interactions",
+    "id": "removeRestrictionsForOrg",
+    "method": "DELETE",
+    "url": "/orgs/{org}/interaction-limits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List pending organization invitations",
+    "scope": "orgs",
+    "id": "listPendingInvitations",
+    "method": "GET",
+    "url": "/orgs/{org}/invitations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create organization invitation",
+    "scope": "orgs",
+    "id": "createInvitation",
+    "method": "POST",
+    "url": "/orgs/{org}/invitations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required unless you provide `email`**. GitHub user ID for the person you are inviting.",
+        "enum": null,
+        "name": "invitee_id",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required unless you provide `invitee_id`**. Email address of the person you are inviting, which can be an existing GitHub user.",
+        "enum": null,
+        "name": "email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specify role for new member. Can be one of:  \n\\* `admin` - Organization owners with full administrative rights to the organization and complete access to all repositories and teams.  \n\\* `direct_member` - Non-owner organization members with ability to see other members and join teams by invitation.  \n\\* `billing_manager` - Non-owner organization members with ability to manage the billing settings of your organization.",
+        "enum": ["admin", "direct_member", "billing_manager"],
+        "name": "role",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specify IDs for the teams you want to invite new members to.",
+        "enum": null,
+        "name": "team_ids",
+        "type": "integer[]",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List organization invitation teams",
+    "scope": "orgs",
+    "id": "listInvitationTeams",
+    "method": "GET",
+    "url": "/orgs/{org}/invitations/{invitation_id}/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "invitation_id parameter",
+        "enum": null,
+        "name": "invitation_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all issues for a given organization assigned to the authenticated user",
+    "scope": "issues",
+    "id": "listForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/issues",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates which sorts of issues to return. Can be one of:  \n\\* `assigned`: Issues assigned to you  \n\\* `created`: Issues created by you  \n\\* `mentioned`: Issues mentioning you  \n\\* `subscribed`: Issues you're subscribed to updates for  \n\\* `all`: All issues the authenticated user can see, regardless of participation or creation",
+        "enum": ["assigned", "created", "mentioned", "subscribed", "all"],
+        "name": "filter",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of comma separated label names. Example: `bug,ui,@high`",
+        "enum": null,
+        "name": "labels",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "What to sort results by. Can be either `created`, `updated`, `comments`.",
+        "enum": ["created", "updated", "comments"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The direction of the sort. Can be either `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Members list",
+    "scope": "orgs",
+    "id": "listMembers",
+    "method": "GET",
+    "url": "/orgs/{org}/members",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filter members returned in the list. Can be one of:  \n\\* `2fa_disabled` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners.  \n\\* `all` - All members the authenticated user can see.",
+        "enum": ["2fa_disabled", "all"],
+        "name": "filter",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filter members returned by their role. Can be one of:  \n\\* `all` - All members of the organization, regardless of role.  \n\\* `admin` - Organization owners.  \n\\* `member` - Non-owner organization members.",
+        "enum": ["all", "admin", "member"],
+        "name": "role",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check membership",
+    "scope": "orgs",
+    "id": "checkMembership",
+    "method": "GET",
+    "url": "/orgs/{org}/members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove a member",
+    "scope": "orgs",
+    "id": "removeMember",
+    "method": "DELETE",
+    "url": "/orgs/{org}/members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get organization membership",
+    "scope": "orgs",
+    "id": "getMembership",
+    "method": "GET",
+    "url": "/orgs/{org}/memberships/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add or update organization membership",
+    "scope": "orgs",
+    "id": "addOrUpdateMembership",
+    "method": "PUT",
+    "url": "/orgs/{org}/memberships/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The role to give the user in the organization. Can be one of:  \n\\* `admin` - The user will become an owner of the organization.  \n\\* `member` - The user will become a non-owner member of the organization.",
+        "enum": ["admin", "member"],
+        "name": "role",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove organization membership",
+    "scope": "orgs",
+    "id": "removeMembership",
+    "method": "DELETE",
+    "url": "/orgs/{org}/memberships/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Start an organization migration",
+    "scope": "migrations",
+    "id": "startForOrg",
+    "method": "POST",
+    "url": "/orgs/{org}/migrations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of arrays indicating which repositories should be migrated.",
+        "enum": null,
+        "name": "repositories",
+        "type": "string[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates whether repositories should be locked (to prevent manipulation) while migrating data.",
+        "enum": null,
+        "name": "lock_repositories",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates whether attachments should be excluded from the migration (to reduce migration archive file size).",
+        "enum": null,
+        "name": "exclude_attachments",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a list of organization migrations",
+    "scope": "migrations",
+    "id": "listForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/migrations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get the status of an organization migration",
+    "scope": "migrations",
+    "id": "getStatusForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/migrations/{migration_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Download an organization migration archive",
+    "scope": "migrations",
+    "id": "getArchiveForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/migrations/{migration_id}/archive",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete an organization migration archive",
+    "scope": "migrations",
+    "id": "deleteArchiveForOrg",
+    "method": "DELETE",
+    "url": "/orgs/{org}/migrations/{migration_id}/archive",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Unlock an organization repository",
+    "scope": "migrations",
+    "id": "unlockRepoForOrg",
+    "method": "DELETE",
+    "url": "/orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo_name parameter",
+        "enum": null,
+        "name": "repo_name",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List outside collaborators",
+    "scope": "orgs",
+    "id": "listOutsideCollaborators",
+    "method": "GET",
+    "url": "/orgs/{org}/outside_collaborators",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filter the list of outside collaborators. Can be one of:  \n\\* `2fa_disabled`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled.  \n\\* `all`: All outside collaborators.",
+        "enum": ["2fa_disabled", "all"],
+        "name": "filter",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove outside collaborator",
+    "scope": "orgs",
+    "id": "removeOutsideCollaborator",
+    "method": "DELETE",
+    "url": "/orgs/{org}/outside_collaborators/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Convert member to outside collaborator",
+    "scope": "orgs",
+    "id": "convertMemberToOutsideCollaborator",
+    "method": "PUT",
+    "url": "/orgs/{org}/outside_collaborators/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List organization projects",
+    "scope": "projects",
+    "id": "listForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/projects",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create an organization project",
+    "scope": "projects",
+    "id": "createForOrg",
+    "method": "POST",
+    "url": "/orgs/{org}/projects",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the project.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The description of the project.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Public members list",
+    "scope": "orgs",
+    "id": "listPublicMembers",
+    "method": "GET",
+    "url": "/orgs/{org}/public_members",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check public membership",
+    "scope": "orgs",
+    "id": "checkPublicMembership",
+    "method": "GET",
+    "url": "/orgs/{org}/public_members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Publicize a user's membership",
+    "scope": "orgs",
+    "id": "publicizeMembership",
+    "method": "PUT",
+    "url": "/orgs/{org}/public_members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Conceal a user's membership",
+    "scope": "orgs",
+    "id": "concealMembership",
+    "method": "DELETE",
+    "url": "/orgs/{org}/public_members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List organization repositories",
+    "scope": "repos",
+    "id": "listForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/repos",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `all`, `public`, `private`, `forks`, `sources`, `member`.",
+        "enum": ["all", "public", "private", "forks", "sources", "member"],
+        "name": "type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `created`, `updated`, `pushed`, `full_name`.",
+        "enum": ["created", "updated", "pushed", "full_name"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `asc` or `desc`. Default: when using `full_name`: `asc`, otherwise `desc`",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Creates a new repository in the specified organization",
+    "scope": "repos",
+    "id": "createInOrg",
+    "method": "POST",
+    "url": "/orgs/{org}/repos",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the repository.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the repository.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL with more information about the repository.",
+        "enum": null,
+        "name": "homepage",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to create a private repository or `false` to create a public one. Creating private repositories requires a paid GitHub account.",
+        "enum": null,
+        "name": "private",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable issues for this repository or `false` to disable them.",
+        "enum": null,
+        "name": "has_issues",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.",
+        "enum": null,
+        "name": "has_projects",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable the wiki for this repository or `false` to disable it.",
+        "enum": null,
+        "name": "has_wiki",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to make this repo available as a template repository or `false` to prevent it.",
+        "enum": null,
+        "name": "is_template",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization.",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Pass `true` to create an initial commit with empty README.",
+        "enum": null,
+        "name": "auto_init",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, \"Haskell\".",
+        "enum": null,
+        "name": "gitignore_template",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the `license_template` string. For example, \"mit\" or \"mpl-2.0\".",
+        "enum": null,
+        "name": "license_template",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.",
+        "enum": null,
+        "name": "allow_squash_merge",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.",
+        "enum": null,
+        "name": "allow_merge_commit",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.",
+        "enum": null,
+        "name": "allow_rebase_merge",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List IdP groups in an organization",
+    "scope": "teams",
+    "id": "listIdPGroupsForOrg",
+    "method": "GET",
+    "url": "/orgs/{org}/team-sync/groups",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List teams",
+    "scope": "teams",
+    "id": "list",
+    "method": "GET",
+    "url": "/orgs/{org}/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create team",
+    "scope": "teams",
+    "id": "create",
+    "method": "POST",
+    "url": "/orgs/{org}/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the team.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The description of the team.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The logins of organization members to add as maintainers of the team.",
+        "enum": null,
+        "name": "maintainers",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The full name (e.g., \"organization-name/repository-name\") of repositories to add the team to.",
+        "enum": null,
+        "name": "repo_names",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The level of privacy this team should have. The options are:  \n**For a non-nested team:**  \n\\* `secret` - only visible to organization owners and members of this team.  \n\\* `closed` - visible to all members of this organization.  \nDefault: `secret`  \n**For a parent or child team:**  \n\\* `closed` - visible to all members of this organization.  \nDefault for child team: `closed`  \n**Note**: You must pass the `hellcat-preview` media type to set privacy default to `closed` for child teams.",
+        "enum": ["secret", "closed"],
+        "name": "privacy",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of:  \n\\* `pull` - team members can pull, but not push to or administer newly-added repositories.  \n\\* `push` - team members can pull and push, but not administer newly-added repositories.  \n\\* `admin` - team members can pull, push and administer newly-added repositories.",
+        "enum": ["pull", "push", "admin"],
+        "name": "permission",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.",
+        "enum": null,
+        "name": "parent_team_id",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get team by name",
+    "scope": "teams",
+    "id": "getByName",
+    "method": "GET",
+    "url": "/orgs/{org}/teams/{team_slug}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_slug parameter",
+        "enum": null,
+        "name": "team_slug",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a project card",
+    "scope": "projects",
+    "id": "getCard",
+    "method": "GET",
+    "url": "/projects/columns/cards/{card_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "card_id parameter",
+        "enum": null,
+        "name": "card_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update a project card",
+    "scope": "projects",
+    "id": "updateCard",
+    "method": "PATCH",
+    "url": "/projects/columns/cards/{card_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "card_id parameter",
+        "enum": null,
+        "name": "card_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The card's note content. Only valid for cards without another type of content, so this cannot be specified if the card already has a `content_id` and `content_type`.",
+        "enum": null,
+        "name": "note",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Use `true` to archive a project card. Specify `false` if you need to restore a previously archived project card.",
+        "enum": null,
+        "name": "archived",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a project card",
+    "scope": "projects",
+    "id": "deleteCard",
+    "method": "DELETE",
+    "url": "/projects/columns/cards/{card_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "card_id parameter",
+        "enum": null,
+        "name": "card_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Move a project card",
+    "scope": "projects",
+    "id": "moveCard",
+    "method": "POST",
+    "url": "/projects/columns/cards/{card_id}/moves",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "card_id parameter",
+        "enum": null,
+        "name": "card_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `top`, `bottom`, or `after:<card_id>`, where `<card_id>` is the `id` value of a card in the same column, or in the new column specified by `column_id`.",
+        "enum": null,
+        "name": "position",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The `id` value of a column in the same project.",
+        "enum": null,
+        "name": "column_id",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a project column",
+    "scope": "projects",
+    "id": "getColumn",
+    "method": "GET",
+    "url": "/projects/columns/{column_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "column_id parameter",
+        "enum": null,
+        "name": "column_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update a project column",
+    "scope": "projects",
+    "id": "updateColumn",
+    "method": "PATCH",
+    "url": "/projects/columns/{column_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "column_id parameter",
+        "enum": null,
+        "name": "column_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new name of the column.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a project column",
+    "scope": "projects",
+    "id": "deleteColumn",
+    "method": "DELETE",
+    "url": "/projects/columns/{column_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "column_id parameter",
+        "enum": null,
+        "name": "column_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List project cards",
+    "scope": "projects",
+    "id": "listCards",
+    "method": "GET",
+    "url": "/projects/columns/{column_id}/cards",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "column_id parameter",
+        "enum": null,
+        "name": "column_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters the project cards that are returned by the card's state. Can be one of `all`,`archived`, or `not_archived`.",
+        "enum": ["all", "archived", "not_archived"],
+        "name": "archived_state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a project card",
+    "scope": "projects",
+    "id": "createCard",
+    "method": "POST",
+    "url": "/projects/columns/{column_id}/cards",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "column_id parameter",
+        "enum": null,
+        "name": "column_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The card's note content. Only valid for cards without another type of content, so you must omit when specifying `content_id` and `content_type`.",
+        "enum": null,
+        "name": "note",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The issue or pull request id you want to associate with this card. You can use the [List issues for a repository](https://developer.github.com/v3/issues/#list-issues-for-a-repository) and [List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests) endpoints to find this id.  \n**Note:** Depending on whether you use the issue id or pull request id, you will need to specify `Issue` or `PullRequest` as the `content_type`.",
+        "enum": null,
+        "name": "content_id",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required if you provide `content_id`**. The type of content you want to associate with this card. Use `Issue` when `content_id` is an issue id and use `PullRequest` when `content_id` is a pull request id.",
+        "enum": null,
+        "name": "content_type",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Move a project column",
+    "scope": "projects",
+    "id": "moveColumn",
+    "method": "POST",
+    "url": "/projects/columns/{column_id}/moves",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "column_id parameter",
+        "enum": null,
+        "name": "column_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `first`, `last`, or `after:<column_id>`, where `<column_id>` is the `id` value of a column in the same project.",
+        "enum": null,
+        "name": "position",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a project",
+    "scope": "projects",
+    "id": "get",
+    "method": "GET",
+    "url": "/projects/{project_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Update a project",
+    "scope": "projects",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/projects/{project_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the project.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The description of the project.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "State of the project. Either `open` or `closed`.",
+        "enum": ["open", "closed"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The permission level that determines whether all members of the project's organization can see and/or make changes to the project. Setting `organization_permission` is only available for organization projects. If an organization member belongs to a team with a higher level of access or is a collaborator with a higher level of access, their permission level is not lowered by `organization_permission`. For information on changing access for a team or collaborator, see [Add or update team project](https://developer.github.com/v3/teams/#add-or-update-team-project) or [Add user as a collaborator](https://developer.github.com/v3/projects/collaborators/#add-user-as-a-collaborator).  \n  \n**Note:** Updating a project's `organization_permission` requires `admin` access to the project.  \n  \nCan be one of:  \n\\* `read` - Organization members can read, but not write to or administer this project.  \n\\* `write` - Organization members can read and write, but not administer this project.  \n\\* `admin` - Organization members can read, write and administer this project.  \n\\* `none` - Organization members can only see this project if it is public.",
+        "enum": null,
+        "name": "organization_permission",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sets the visibility of a project board. Setting `private` is only available for organization and user projects. **Note:** Updating a project's visibility requires `admin` access to the project.  \n  \nCan be one of:  \n\\* `false` - Anyone can see the project.  \n\\* `true` - Only the user can view a project board created on a user account. Organization members with the appropriate `organization_permission` can see project boards in an organization account.",
+        "enum": null,
+        "name": "private",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a project",
+    "scope": "projects",
+    "id": "delete",
+    "method": "DELETE",
+    "url": "/projects/{project_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List collaborators",
+    "scope": "projects",
+    "id": "listCollaborators",
+    "method": "GET",
+    "url": "/projects/{project_id}/collaborators",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters the collaborators by their affiliation. Can be one of:  \n\\* `outside`: Outside collaborators of a project that are not a member of the project's organization.  \n\\* `direct`: Collaborators with permissions to a project, regardless of organization membership status.  \n\\* `all`: All collaborators the authenticated user can see.",
+        "enum": ["outside", "direct", "all"],
+        "name": "affiliation",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Add user as a collaborator",
+    "scope": "projects",
+    "id": "addCollaborator",
+    "method": "PUT",
+    "url": "/projects/{project_id}/collaborators/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The permission to grant the collaborator. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see \"[HTTP verbs](https://developer.github.com/v3/#http-verbs).\" Can be one of:  \n\\* `read` - can read, but not write to or administer this project.  \n\\* `write` - can read and write, but not administer this project.  \n\\* `admin` - can read, write and administer this project.",
+        "enum": ["read", "write", "admin"],
+        "name": "permission",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove user as a collaborator",
+    "scope": "projects",
+    "id": "removeCollaborator",
+    "method": "DELETE",
+    "url": "/projects/{project_id}/collaborators/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Review a user's permission level",
+    "scope": "projects",
+    "id": "reviewUserPermissionLevel",
+    "method": "GET",
+    "url": "/projects/{project_id}/collaborators/{username}/permission",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List project columns",
+    "scope": "projects",
+    "id": "listColumns",
+    "method": "GET",
+    "url": "/projects/{project_id}/columns",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a project column",
+    "scope": "projects",
+    "id": "createColumn",
+    "method": "POST",
+    "url": "/projects/{project_id}/columns",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the column.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get your current rate limit status",
+    "scope": "rateLimit",
+    "id": "get",
+    "method": "GET",
+    "url": "/rate_limit",
+    "parameters": []
+  },
+  {
+    "name": "Delete a reaction",
+    "scope": "reactions",
+    "id": "delete",
+    "method": "DELETE",
+    "url": "/reactions/{reaction_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "reaction_id parameter",
+        "enum": null,
+        "name": "reaction_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get",
+    "scope": "repos",
+    "id": "get",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit",
+    "scope": "repos",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the repository.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the repository.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL with more information about the repository.",
+        "enum": null,
+        "name": "homepage",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to make the repository private or `false` to make it public. Creating private repositories requires a paid GitHub account. Default: `false`.  \n**Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. **Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private.",
+        "enum": null,
+        "name": "private",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable issues for this repository or `false` to disable them.",
+        "enum": null,
+        "name": "has_issues",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.",
+        "enum": null,
+        "name": "has_projects",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable the wiki for this repository or `false` to disable it.",
+        "enum": null,
+        "name": "has_wiki",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to make this repo available as a template repository or `false` to prevent it.",
+        "enum": null,
+        "name": "is_template",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Updates the default branch for this repository.",
+        "enum": null,
+        "name": "default_branch",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.",
+        "enum": null,
+        "name": "allow_squash_merge",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.",
+        "enum": null,
+        "name": "allow_merge_commit",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.",
+        "enum": null,
+        "name": "allow_rebase_merge",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "`true` to archive this repository. **Note**: You cannot unarchive repositories through the API.",
+        "enum": null,
+        "name": "archived",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a repository",
+    "scope": "repos",
+    "id": "delete",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List assignees",
+    "scope": "issues",
+    "id": "listAssignees",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/assignees",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check assignee",
+    "scope": "issues",
+    "id": "checkAssignee",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/assignees/{assignee}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "assignee parameter",
+        "enum": null,
+        "name": "assignee",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Enable automated security fixes",
+    "scope": "repos",
+    "id": "enableAutomatedSecurityFixes",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/automated-security-fixes",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Disable automated security fixes",
+    "scope": "repos",
+    "id": "disableAutomatedSecurityFixes",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/automated-security-fixes",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List branches",
+    "scope": "repos",
+    "id": "listBranches",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Setting to `true` returns only protected branches. When set to `false`, only unprotected branches are returned. Omitting this parameter returns all branches.",
+        "enum": null,
+        "name": "protected",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get branch",
+    "scope": "repos",
+    "id": "getBranch",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get branch protection",
+    "scope": "repos",
+    "id": "getBranchProtection",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update branch protection",
+    "scope": "repos",
+    "id": "updateBranchProtection",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": true,
+        "deprecated": null,
+        "description": "Require status checks to pass before merging. Set to `null` to disable.",
+        "enum": null,
+        "name": "required_status_checks",
+        "type": "object",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Require branches to be up to date before merging.",
+        "enum": null,
+        "name": "required_status_checks.strict",
+        "type": "boolean",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of status checks to require in order to merge into this branch",
+        "enum": null,
+        "name": "required_status_checks.contexts",
+        "type": "string[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": true,
+        "deprecated": null,
+        "description": "Enforce all configured restrictions for administrators. Set to `true` to enforce required status checks for repository administrators. Set to `null` to disable.",
+        "enum": null,
+        "name": "enforce_admins",
+        "type": "boolean",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": true,
+        "deprecated": null,
+        "description": "Require at least one approving review on a pull request, before merging. Set to `null` to disable.",
+        "enum": null,
+        "name": "required_pull_request_reviews",
+        "type": "object",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specify which users and teams can dismiss pull request reviews. Pass an empty `dismissal_restrictions` object to disable. User and team `dismissal_restrictions` are only available for organization-owned repositories. Omit this parameter for personal repositories.",
+        "enum": null,
+        "name": "required_pull_request_reviews.dismissal_restrictions",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of user `login`s with dismissal access",
+        "enum": null,
+        "name": "required_pull_request_reviews.dismissal_restrictions.users",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of team `slug`s with dismissal access",
+        "enum": null,
+        "name": "required_pull_request_reviews.dismissal_restrictions.teams",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Set to `true` if you want to automatically dismiss approving reviews when someone pushes a new commit.",
+        "enum": null,
+        "name": "required_pull_request_reviews.dismiss_stale_reviews",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) review them.",
+        "enum": null,
+        "name": "required_pull_request_reviews.require_code_owner_reviews",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specify the number of reviewers required to approve pull requests. Use a number between 1 and 6.",
+        "enum": null,
+        "name": "required_pull_request_reviews.required_approving_review_count",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": true,
+        "deprecated": null,
+        "description": "Restrict who can push to this branch. User, app, and team `restrictions` are only available for organization-owned repositories. Set to `null` to disable.",
+        "enum": null,
+        "name": "restrictions",
+        "type": "object",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of user `login`s with push access",
+        "enum": null,
+        "name": "restrictions.users",
+        "type": "string[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of team `slug`s with push access",
+        "enum": null,
+        "name": "restrictions.teams",
+        "type": "string[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of app `slug`s with push access",
+        "enum": null,
+        "name": "restrictions.apps",
+        "type": "string[]",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove branch protection",
+    "scope": "repos",
+    "id": "removeBranchProtection",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get admin enforcement of protected branch",
+    "scope": "repos",
+    "id": "getProtectedBranchAdminEnforcement",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add admin enforcement of protected branch",
+    "scope": "repos",
+    "id": "addProtectedBranchAdminEnforcement",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove admin enforcement of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchAdminEnforcement",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get pull request review enforcement of protected branch",
+    "scope": "repos",
+    "id": "getProtectedBranchPullRequestReviewEnforcement",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update pull request review enforcement of protected branch",
+    "scope": "repos",
+    "id": "updateProtectedBranchPullRequestReviewEnforcement",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specify which users and teams can dismiss pull request reviews. Pass an empty `dismissal_restrictions` object to disable. User and team `dismissal_restrictions` are only available for organization-owned repositories. Omit this parameter for personal repositories.",
+        "enum": null,
+        "name": "dismissal_restrictions",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of user `login`s with dismissal access",
+        "enum": null,
+        "name": "dismissal_restrictions.users",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of team `slug`s with dismissal access",
+        "enum": null,
+        "name": "dismissal_restrictions.teams",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Set to `true` if you want to automatically dismiss approving reviews when someone pushes a new commit.",
+        "enum": null,
+        "name": "dismiss_stale_reviews",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) have reviewed.",
+        "enum": null,
+        "name": "require_code_owner_reviews",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies the number of reviewers required to approve pull requests. Use a number between 1 and 6.",
+        "enum": null,
+        "name": "required_approving_review_count",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove pull request review enforcement of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchPullRequestReviewEnforcement",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get required signatures of protected branch",
+    "scope": "repos",
+    "id": "getProtectedBranchRequiredSignatures",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add required signatures of protected branch",
+    "scope": "repos",
+    "id": "addProtectedBranchRequiredSignatures",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove required signatures of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchRequiredSignatures",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get required status checks of protected branch",
+    "scope": "repos",
+    "id": "getProtectedBranchRequiredStatusChecks",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update required status checks of protected branch",
+    "scope": "repos",
+    "id": "updateProtectedBranchRequiredStatusChecks",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Require branches to be up to date before merging.",
+        "enum": null,
+        "name": "strict",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The list of status checks to require in order to merge into this branch",
+        "enum": null,
+        "name": "contexts",
+        "type": "string[]",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove required status checks of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchRequiredStatusChecks",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List required status checks contexts of protected branch",
+    "scope": "repos",
+    "id": "listProtectedBranchRequiredStatusChecksContexts",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Replace required status checks contexts of protected branch",
+    "scope": "repos",
+    "id": "replaceProtectedBranchRequiredStatusChecksContexts",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "contexts parameter",
+        "enum": null,
+        "name": "contexts",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add required status checks contexts of protected branch",
+    "scope": "repos",
+    "id": "addProtectedBranchRequiredStatusChecksContexts",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "contexts parameter",
+        "enum": null,
+        "name": "contexts",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove required status checks contexts of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchRequiredStatusChecksContexts",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "contexts parameter",
+        "enum": null,
+        "name": "contexts",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get restrictions of protected branch",
+    "scope": "repos",
+    "id": "getProtectedBranchRestrictions",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove restrictions of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchRestrictions",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get apps with access to protected branch",
+    "scope": "repos",
+    "id": "getAppsWithAccessToProtectedBranch",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get apps with access to protected branch",
+    "scope": "repos",
+    "id": "listAppsWithAccessToProtectedBranch",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Replace app restrictions of protected branch",
+    "scope": "repos",
+    "id": "replaceProtectedBranchAppRestrictions",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "apps parameter",
+        "enum": null,
+        "name": "apps",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add app restrictions of protected branch",
+    "scope": "repos",
+    "id": "addProtectedBranchAppRestrictions",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "apps parameter",
+        "enum": null,
+        "name": "apps",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove app restrictions of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchAppRestrictions",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "apps parameter",
+        "enum": null,
+        "name": "apps",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get teams with access to protected branch",
+    "scope": "repos",
+    "id": "getTeamsWithAccessToProtectedBranch",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get teams with access to protected branch",
+    "scope": "repos",
+    "id": "listProtectedBranchTeamRestrictions",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get teams with access to protected branch",
+    "scope": "repos",
+    "id": "listTeamsWithAccessToProtectedBranch",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Replace team restrictions of protected branch",
+    "scope": "repos",
+    "id": "replaceProtectedBranchTeamRestrictions",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "teams parameter",
+        "enum": null,
+        "name": "teams",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add team restrictions of protected branch",
+    "scope": "repos",
+    "id": "addProtectedBranchTeamRestrictions",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "teams parameter",
+        "enum": null,
+        "name": "teams",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove team restrictions of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchTeamRestrictions",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "teams parameter",
+        "enum": null,
+        "name": "teams",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get users with access to protected branch",
+    "scope": "repos",
+    "id": "getUsersWithAccessToProtectedBranch",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get users with access to protected branch",
+    "scope": "repos",
+    "id": "listProtectedBranchUserRestrictions",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get users with access to protected branch",
+    "scope": "repos",
+    "id": "listUsersWithAccessToProtectedBranch",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Replace user restrictions of protected branch",
+    "scope": "repos",
+    "id": "replaceProtectedBranchUserRestrictions",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "users parameter",
+        "enum": null,
+        "name": "users",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add user restrictions of protected branch",
+    "scope": "repos",
+    "id": "addProtectedBranchUserRestrictions",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "users parameter",
+        "enum": null,
+        "name": "users",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove user restrictions of protected branch",
+    "scope": "repos",
+    "id": "removeProtectedBranchUserRestrictions",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "branch parameter",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "users parameter",
+        "enum": null,
+        "name": "users",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a check run",
+    "scope": "checks",
+    "id": "create",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/check-runs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the check. For example, \"code-coverage\".",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA of the commit.",
+        "enum": null,
+        "name": "head_sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The URL of the integrator's site that has the full details of the check.",
+        "enum": null,
+        "name": "details_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A reference for the run on the integrator's system.",
+        "enum": null,
+        "name": "external_id",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The current status. Can be one of `queued`, `in_progress`, or `completed`.",
+        "enum": ["queued", "in_progress", "completed"],
+        "name": "status",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The time that the check run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "started_at",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `timed_out`, or `action_required`. When the conclusion is `action_required`, additional details should be provided on the site specified by `details_url`.  \n**Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`.",
+        "enum": [
+          "success",
+          "failure",
+          "neutral",
+          "cancelled",
+          "timed_out",
+          "action_required"
+        ],
+        "name": "conclusion",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "completed_at",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://developer.github.com/v3/checks/runs/#output-object) description.",
+        "enum": null,
+        "name": "output",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the check run.",
+        "enum": null,
+        "name": "output.title",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The summary of the check run. This parameter supports Markdown.",
+        "enum": null,
+        "name": "output.summary",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The details of the check run. This parameter supports Markdown.",
+        "enum": null,
+        "name": "output.text",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Adds information from your analysis to specific lines of code. Annotations are visible on GitHub in the **Checks** and **Files changed** tab of the pull request. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://developer.github.com/v3/checks/runs/#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about how you can view annotations on GitHub, see \"[About status checks](https://help.github.com/articles/about-status-checks#checks)\". See the [`annotations` object](https://developer.github.com/v3/checks/runs/#annotations-object) description for details about how to use this parameter.",
+        "enum": null,
+        "name": "output.annotations",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The path of the file to add an annotation to. For example, `assets/css/main.css`.",
+        "enum": null,
+        "name": "output.annotations[].path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The start line of the annotation.",
+        "enum": null,
+        "name": "output.annotations[].start_line",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The end line of the annotation.",
+        "enum": null,
+        "name": "output.annotations[].end_line",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The start column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values.",
+        "enum": null,
+        "name": "output.annotations[].start_column",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The end column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values.",
+        "enum": null,
+        "name": "output.annotations[].end_column",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The level of the annotation. Can be one of `notice`, `warning`, or `failure`.",
+        "enum": ["notice", "warning", "failure"],
+        "name": "output.annotations[].annotation_level",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the feedback for these lines of code. The maximum size is 64 KB.",
+        "enum": null,
+        "name": "output.annotations[].message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title that represents the annotation. The maximum size is 255 characters.",
+        "enum": null,
+        "name": "output.annotations[].title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Details about this annotation. The maximum size is 64 KB.",
+        "enum": null,
+        "name": "output.annotations[].raw_details",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Adds images to the output displayed in the GitHub pull request UI. See the [`images` object](https://developer.github.com/v3/checks/runs/#images-object) description for details.",
+        "enum": null,
+        "name": "output.images",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The alternative text for the image.",
+        "enum": null,
+        "name": "output.images[].alt",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The full URL of the image.",
+        "enum": null,
+        "name": "output.images[].image_url",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short image description.",
+        "enum": null,
+        "name": "output.images[].caption",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Displays a button on GitHub that can be clicked to alert your app to do additional tasks. For example, a code linting app can display a button that automatically fixes detected errors. The button created in this object is displayed after the check run completes. When a user clicks the button, GitHub sends the [`check_run.requested_action` webhook](https://developer.github.com/v3/activity/events/types/#checkrunevent) to your app. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://developer.github.com/v3/checks/runs/#actions-object) description. To learn more about check runs and requested actions, see \"[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions).\" To learn more about check runs and requested actions, see \"[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions).\"",
+        "enum": null,
+        "name": "actions",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The text to be displayed on a button in the web UI. The maximum size is 20 characters.",
+        "enum": null,
+        "name": "actions[].label",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short explanation of what this action would do. The maximum size is 40 characters.",
+        "enum": null,
+        "name": "actions[].description",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A reference for the action on the integrator's system. The maximum size is 20 characters.",
+        "enum": null,
+        "name": "actions[].identifier",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update a check run",
+    "scope": "checks",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/check-runs/{check_run_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "check_run_id parameter",
+        "enum": null,
+        "name": "check_run_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the check. For example, \"code-coverage\".",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The URL of the integrator's site that has the full details of the check.",
+        "enum": null,
+        "name": "details_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A reference for the run on the integrator's system.",
+        "enum": null,
+        "name": "external_id",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "started_at",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The current status. Can be one of `queued`, `in_progress`, or `completed`.",
+        "enum": ["queued", "in_progress", "completed"],
+        "name": "status",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `timed_out`, or `action_required`.  \n**Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`.",
+        "enum": [
+          "success",
+          "failure",
+          "neutral",
+          "cancelled",
+          "timed_out",
+          "action_required"
+        ],
+        "name": "conclusion",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "completed_at",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://developer.github.com/v3/checks/runs/#output-object-1) description.",
+        "enum": null,
+        "name": "output",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required**.",
+        "enum": null,
+        "name": "output.title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can contain Markdown.",
+        "enum": null,
+        "name": "output.summary",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can contain Markdown.",
+        "enum": null,
+        "name": "output.text",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Adds information from your analysis to specific lines of code. Annotations are visible in GitHub's pull request UI. Annotations are visible in GitHub's pull request UI. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://developer.github.com/v3/checks/runs/#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about annotations in the UI, see \"[About status checks](https://help.github.com/articles/about-status-checks#checks)\". See the [`annotations` object](https://developer.github.com/v3/checks/runs/#annotations-object-1) description for details.",
+        "enum": null,
+        "name": "output.annotations",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The path of the file to add an annotation to. For example, `assets/css/main.css`.",
+        "enum": null,
+        "name": "output.annotations[].path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The start line of the annotation.",
+        "enum": null,
+        "name": "output.annotations[].start_line",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The end line of the annotation.",
+        "enum": null,
+        "name": "output.annotations[].end_line",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The start column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values.",
+        "enum": null,
+        "name": "output.annotations[].start_column",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The end column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values.",
+        "enum": null,
+        "name": "output.annotations[].end_column",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The level of the annotation. Can be one of `notice`, `warning`, or `failure`.",
+        "enum": ["notice", "warning", "failure"],
+        "name": "output.annotations[].annotation_level",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the feedback for these lines of code. The maximum size is 64 KB.",
+        "enum": null,
+        "name": "output.annotations[].message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title that represents the annotation. The maximum size is 255 characters.",
+        "enum": null,
+        "name": "output.annotations[].title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Details about this annotation. The maximum size is 64 KB.",
+        "enum": null,
+        "name": "output.annotations[].raw_details",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Adds images to the output displayed in the GitHub pull request UI. See the [`images` object](https://developer.github.com/v3/checks/runs/#annotations-object-1) description for details.",
+        "enum": null,
+        "name": "output.images",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The alternative text for the image.",
+        "enum": null,
+        "name": "output.images[].alt",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The full URL of the image.",
+        "enum": null,
+        "name": "output.images[].image_url",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short image description.",
+        "enum": null,
+        "name": "output.images[].caption",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Possible further actions the integrator can perform, which a user may trigger. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://developer.github.com/v3/checks/runs/#actions-object) description. To learn more about check runs and requested actions, see \"[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions).\"",
+        "enum": null,
+        "name": "actions",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The text to be displayed on a button in the web UI. The maximum size is 20 characters.",
+        "enum": null,
+        "name": "actions[].label",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short explanation of what this action would do. The maximum size is 40 characters.",
+        "enum": null,
+        "name": "actions[].description",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A reference for the action on the integrator's system. The maximum size is 20 characters.",
+        "enum": null,
+        "name": "actions[].identifier",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single check run",
+    "scope": "checks",
+    "id": "get",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/check-runs/{check_run_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "check_run_id parameter",
+        "enum": null,
+        "name": "check_run_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List annotations for a check run",
+    "scope": "checks",
+    "id": "listAnnotations",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/check-runs/{check_run_id}/annotations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "check_run_id parameter",
+        "enum": null,
+        "name": "check_run_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a check suite",
+    "scope": "checks",
+    "id": "createSuite",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/check-suites",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The sha of the head commit.",
+        "enum": null,
+        "name": "head_sha",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Set preferences for check suites on a repository",
+    "scope": "checks",
+    "id": "setSuitesPreferences",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/check-suites/preferences",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Enables or disables automatic creation of CheckSuite events upon pushes to the repository. Enabled by default. See the [`auto_trigger_checks` object](https://developer.github.com/v3/checks/suites/#auto_trigger_checks-object) description for details.",
+        "enum": null,
+        "name": "auto_trigger_checks",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The `id` of the GitHub App.",
+        "enum": null,
+        "name": "auto_trigger_checks[].app_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Set to `true` to enable automatic creation of CheckSuite events upon pushes to the repository, or `false` to disable them.",
+        "enum": null,
+        "name": "auto_trigger_checks[].setting",
+        "type": "boolean",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single check suite",
+    "scope": "checks",
+    "id": "getSuite",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/check-suites/{check_suite_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "check_suite_id parameter",
+        "enum": null,
+        "name": "check_suite_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List check runs in a check suite",
+    "scope": "checks",
+    "id": "listForSuite",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "check_suite_id parameter",
+        "enum": null,
+        "name": "check_suite_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns check runs with the specified `name`.",
+        "enum": null,
+        "name": "check_name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns check runs with the specified `status`. Can be one of `queued`, `in_progress`, or `completed`.",
+        "enum": ["queued", "in_progress", "completed"],
+        "name": "status",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`.",
+        "enum": ["latest", "all"],
+        "name": "filter",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Rerequest check suite",
+    "scope": "checks",
+    "id": "rerequestSuite",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "check_suite_id parameter",
+        "enum": null,
+        "name": "check_suite_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List collaborators",
+    "scope": "repos",
+    "id": "listCollaborators",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/collaborators",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filter collaborators returned by their affiliation. Can be one of:  \n\\* `outside`: All outside collaborators of an organization-owned repository.  \n\\* `direct`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status.  \n\\* `all`: All collaborators the authenticated user can see.",
+        "enum": ["outside", "direct", "all"],
+        "name": "affiliation",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if a user is a collaborator",
+    "scope": "repos",
+    "id": "checkCollaborator",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/collaborators/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add user as a collaborator",
+    "scope": "repos",
+    "id": "addCollaborator",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/collaborators/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The permission to grant the collaborator. **Only valid on organization-owned repositories.** Can be one of:  \n\\* `pull` - can pull, but not push to or administer this repository.  \n\\* `push` - can pull and push, but not administer this repository.  \n\\* `admin` - can pull, push and administer this repository.",
+        "enum": ["pull", "push", "admin"],
+        "name": "permission",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove user as a collaborator",
+    "scope": "repos",
+    "id": "removeCollaborator",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/collaborators/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Review a user's permission level",
+    "scope": "repos",
+    "id": "getCollaboratorPermissionLevel",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/collaborators/{username}/permission",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List commit comments for a repository",
+    "scope": "repos",
+    "id": "listCommitComments",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single commit comment",
+    "scope": "repos",
+    "id": "getCommitComment",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update a commit comment",
+    "scope": "repos",
+    "id": "updateCommitComment",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the comment",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a commit comment",
+    "scope": "repos",
+    "id": "deleteCommitComment",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List reactions for a commit comment",
+    "scope": "reactions",
+    "id": "listForCommitComment",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/comments/{comment_id}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a commit comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create reaction for a commit comment",
+    "scope": "reactions",
+    "id": "createForCommitComment",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/comments/{comment_id}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the commit comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List commits on a repository",
+    "scope": "repos",
+    "id": "listCommits",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "SHA or branch to start listing commits from. Default: the repository’s default branch (usually `master`).",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only commits containing this file path will be returned.",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "GitHub login or email address by which to filter by commit author.",
+        "enum": null,
+        "name": "author",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only commits after this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only commits before this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "until",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List branches for HEAD commit",
+    "scope": "repos",
+    "id": "listBranchesForHeadCommit",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "commit_sha parameter",
+        "enum": null,
+        "name": "commit_sha",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List comments for a single commit",
+    "scope": "repos",
+    "id": "listCommentsForCommit",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{commit_sha}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "commit_sha parameter",
+        "enum": null,
+        "name": "commit_sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "commit_sha",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "ref",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create a commit comment",
+    "scope": "repos",
+    "id": "createCommitComment",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/commits/{commit_sha}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "commit_sha parameter",
+        "enum": null,
+        "name": "commit_sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the comment.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Relative path of the file to comment on.",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Line index in the diff to comment on.",
+        "enum": null,
+        "name": "position",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Deprecated**. Use **position** parameter instead. Line number in the file to comment on.",
+        "enum": null,
+        "name": "line",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "commit_sha",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "sha",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List pull requests associated with commit",
+    "scope": "repos",
+    "id": "listPullRequestsAssociatedWithCommit",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{commit_sha}/pulls",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "commit_sha parameter",
+        "enum": null,
+        "name": "commit_sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single commit",
+    "scope": "repos",
+    "id": "getCommit",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{ref}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "ref",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "sha",
+        "type": null,
+        "required": null
+      },
+      {
+        "alias": "ref",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "commit_sha",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List check runs for a specific ref",
+    "scope": "checks",
+    "id": "listForRef",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{ref}/check-runs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns check runs with the specified `name`.",
+        "enum": null,
+        "name": "check_name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns check runs with the specified `status`. Can be one of `queued`, `in_progress`, or `completed`.",
+        "enum": ["queued", "in_progress", "completed"],
+        "name": "status",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`.",
+        "enum": ["latest", "all"],
+        "name": "filter",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List check suites for a specific ref",
+    "scope": "checks",
+    "id": "listSuitesForRef",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{ref}/check-suites",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters check suites by GitHub App `id`.",
+        "enum": null,
+        "name": "app_id",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters checks suites by the name of the [check run](https://developer.github.com/v3/checks/runs/).",
+        "enum": null,
+        "name": "check_name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get the combined status for a specific ref",
+    "scope": "repos",
+    "id": "getCombinedStatusForRef",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{ref}/status",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List statuses for a specific ref",
+    "scope": "repos",
+    "id": "listStatusesForRef",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/commits/{ref}/statuses",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get the contents of a repository's code of conduct",
+    "scope": "codesOfConduct",
+    "id": "getForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/community/code_of_conduct",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Retrieve community profile metrics",
+    "scope": "repos",
+    "id": "retrieveCommunityProfileMetrics",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/community/profile",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Compare two commits",
+    "scope": "repos",
+    "id": "compareCommits",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/compare/{base}...{head}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "base parameter",
+        "enum": null,
+        "name": "base",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "head parameter",
+        "enum": null,
+        "name": "head",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get contents",
+    "scope": "repos",
+    "id": "getContents",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/contents/{path}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "path parameter",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`)",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create or update a file",
+    "scope": "repos",
+    "id": "createOrUpdateFile",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/contents/{path}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "path parameter",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The commit message.",
+        "enum": null,
+        "name": "message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new file content, using Base64 encoding.",
+        "enum": null,
+        "name": "content",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required if you are updating a file**. The blob SHA of the file being replaced.",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The branch name. Default: the repository’s default branch (usually `master`)",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The person that committed the file. Default: the authenticated user.",
+        "enum": null,
+        "name": "committer",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "committer.name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "committer.email",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.",
+        "enum": null,
+        "name": "author",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "author.name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "author.email",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create or update a file",
+    "scope": "repos",
+    "id": "createFile",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/contents/{path}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "path parameter",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The commit message.",
+        "enum": null,
+        "name": "message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new file content, using Base64 encoding.",
+        "enum": null,
+        "name": "content",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required if you are updating a file**. The blob SHA of the file being replaced.",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The branch name. Default: the repository’s default branch (usually `master`)",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The person that committed the file. Default: the authenticated user.",
+        "enum": null,
+        "name": "committer",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "committer.name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "committer.email",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.",
+        "enum": null,
+        "name": "author",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "author.name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "author.email",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create or update a file",
+    "scope": "repos",
+    "id": "updateFile",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/contents/{path}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "path parameter",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The commit message.",
+        "enum": null,
+        "name": "message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new file content, using Base64 encoding.",
+        "enum": null,
+        "name": "content",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required if you are updating a file**. The blob SHA of the file being replaced.",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The branch name. Default: the repository’s default branch (usually `master`)",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The person that committed the file. Default: the authenticated user.",
+        "enum": null,
+        "name": "committer",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "committer.name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "committer.email",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.",
+        "enum": null,
+        "name": "author",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "author.name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted.",
+        "enum": null,
+        "name": "author.email",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a file",
+    "scope": "repos",
+    "id": "deleteFile",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/contents/{path}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "path parameter",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The commit message.",
+        "enum": null,
+        "name": "message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The blob SHA of the file being replaced.",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The branch name. Default: the repository’s default branch (usually `master`)",
+        "enum": null,
+        "name": "branch",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "object containing information about the committer.",
+        "enum": null,
+        "name": "committer",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author (or committer) of the commit",
+        "enum": null,
+        "name": "committer.name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author (or committer) of the commit",
+        "enum": null,
+        "name": "committer.email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "object containing information about the author.",
+        "enum": null,
+        "name": "author",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author (or committer) of the commit",
+        "enum": null,
+        "name": "author.name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author (or committer) of the commit",
+        "enum": null,
+        "name": "author.email",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List contributors",
+    "scope": "repos",
+    "id": "listContributors",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/contributors",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Set to `1` or `true` to include anonymous contributors in results.",
+        "enum": null,
+        "name": "anon",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List deployments",
+    "scope": "repos",
+    "id": "listDeployments",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/deployments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA recorded at creation time.",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the ref. This can be a branch, tag, or SHA.",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the task for the deployment (e.g., `deploy` or `deploy:migrations`).",
+        "enum": null,
+        "name": "task",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the environment that was deployed to (e.g., `staging` or `production`).",
+        "enum": null,
+        "name": "environment",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a deployment",
+    "scope": "repos",
+    "id": "createDeployment",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/deployments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The ref to deploy. This can be a branch, tag, or SHA.",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies a task to execute (e.g., `deploy` or `deploy:migrations`).",
+        "enum": null,
+        "name": "task",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Attempts to automatically merge the default branch into the requested ref, if it's behind the default branch.",
+        "enum": null,
+        "name": "auto_merge",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [status](https://developer.github.com/v3/repos/statuses/) contexts to verify against commit status checks. If you omit this parameter, GitHub verifies all unique contexts before creating a deployment. To bypass checking entirely, pass an empty array. Defaults to all unique contexts.",
+        "enum": null,
+        "name": "required_contexts",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "JSON payload with extra information about the deployment.",
+        "enum": null,
+        "name": "payload",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Name for the target deployment environment (e.g., `production`, `staging`, `qa`).",
+        "enum": null,
+        "name": "environment",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Short description of the deployment.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies if the given environment is specific to the deployment and will no longer exist at some point in the future. Default: `false`  \n**Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.",
+        "enum": null,
+        "name": "transient_environment",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies if the given environment is one that end-users directly interact with. Default: `true` when `environment` is `production` and `false` otherwise.  \n**Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.",
+        "enum": null,
+        "name": "production_environment",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single deployment",
+    "scope": "repos",
+    "id": "getDeployment",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/deployments/{deployment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "deployment_id parameter",
+        "enum": null,
+        "name": "deployment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List deployment statuses",
+    "scope": "repos",
+    "id": "listDeploymentStatuses",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/deployments/{deployment_id}/statuses",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "deployment_id parameter",
+        "enum": null,
+        "name": "deployment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a deployment status",
+    "scope": "repos",
+    "id": "createDeploymentStatus",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/deployments/{deployment_id}/statuses",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "deployment_id parameter",
+        "enum": null,
+        "name": "deployment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The state of the status. Can be one of `error`, `failure`, `inactive`, `in_progress`, `queued` `pending`, or `success`. **Note:** To use the `inactive` state, you must provide the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. To use the `in_progress` and `queued` states, you must provide the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.",
+        "enum": [
+          "error",
+          "failure",
+          "inactive",
+          "in_progress",
+          "queued",
+          "pending",
+          "success"
+        ],
+        "name": "state",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The target URL to associate with this status. This URL should contain output to keep the user updated while the task is running or serve as historical information for what happened in the deployment. **Note:** It's recommended to use the `log_url` parameter, which replaces `target_url`.",
+        "enum": null,
+        "name": "target_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The full URL of the deployment's output. This parameter replaces `target_url`. We will continue to accept `target_url` to support legacy uses, but we recommend replacing `target_url` with `log_url`. Setting `log_url` will automatically set `target_url` to the same value. Default: `\"\"`  \n**Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.",
+        "enum": null,
+        "name": "log_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the status. The maximum description length is 140 characters.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Name for the target deployment environment, which can be changed when setting a deploy status. For example, `production`, `staging`, or `qa`. **Note:** This parameter requires you to use the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.",
+        "enum": ["production", "staging", "qa"],
+        "name": "environment",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sets the URL for accessing your environment. Default: `\"\"`  \n**Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.",
+        "enum": null,
+        "name": "environment_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Adds a new `inactive` status to all prior non-transient, non-production environment deployments with the same repository and `environment` name as the created status's deployment. An `inactive` status is only added to deployments that had a `success` state. Default: `true`  \n**Note:** To add an `inactive` status to `production` environments, you must use the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.  \n**Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.",
+        "enum": null,
+        "name": "auto_inactive",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single deployment status",
+    "scope": "repos",
+    "id": "getDeploymentStatus",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "deployment_id parameter",
+        "enum": null,
+        "name": "deployment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "status_id parameter",
+        "enum": null,
+        "name": "status_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a repository dispatch event",
+    "scope": "repos",
+    "id": "createDispatchEvent",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/dispatches",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required:** A custom webhook event name.",
+        "enum": null,
+        "name": "event_type",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List downloads for a repository",
+    "scope": "repos",
+    "id": "listDownloads",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/downloads",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single download",
+    "scope": "repos",
+    "id": "getDownload",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/downloads/{download_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "download_id parameter",
+        "enum": null,
+        "name": "download_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a download",
+    "scope": "repos",
+    "id": "deleteDownload",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/downloads/{download_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "download_id parameter",
+        "enum": null,
+        "name": "download_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List repository events",
+    "scope": "activity",
+    "id": "listRepoEvents",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List forks",
+    "scope": "repos",
+    "id": "listForks",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/forks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The sort order. Can be either `newest`, `oldest`, or `stargazers`.",
+        "enum": ["newest", "oldest", "stargazers"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a fork",
+    "scope": "repos",
+    "id": "createFork",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/forks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Optional parameter to specify the organization name if forking into an organization.",
+        "enum": null,
+        "name": "organization",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a blob",
+    "scope": "git",
+    "id": "createBlob",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/git/blobs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new blob's content.",
+        "enum": null,
+        "name": "content",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The encoding used for `content`. Currently, `\"utf-8\"` and `\"base64\"` are supported.",
+        "enum": null,
+        "name": "encoding",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a blob",
+    "scope": "git",
+    "id": "getBlob",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/git/blobs/{file_sha}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "file_sha parameter",
+        "enum": null,
+        "name": "file_sha",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a commit",
+    "scope": "git",
+    "id": "createCommit",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/git/commits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The commit message",
+        "enum": null,
+        "name": "message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA of the tree object this commit points to",
+        "enum": null,
+        "name": "tree",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided; for a merge commit, an array of more than one should be provided.",
+        "enum": null,
+        "name": "parents",
+        "type": "string[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Information about the author of the commit. By default, the `author` will be the authenticated user and the current date. See the `author` and `committer` object below for details.",
+        "enum": null,
+        "name": "author",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author (or committer) of the commit",
+        "enum": null,
+        "name": "author.name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author (or committer) of the commit",
+        "enum": null,
+        "name": "author.email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "author.date",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Information about the person who is making the commit. By default, `committer` will use the information set in `author`. See the `author` and `committer` object below for details.",
+        "enum": null,
+        "name": "committer",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author (or committer) of the commit",
+        "enum": null,
+        "name": "committer.name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author (or committer) of the commit",
+        "enum": null,
+        "name": "committer.email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "committer.date",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [PGP signature](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) of the commit. GitHub adds the signature to the `gpgsig` header of the created commit. For a commit signature to be verifiable by Git or GitHub, it must be an ASCII-armored detached PGP signature over the string commit as it would be written to the object database. To pass a `signature` parameter, you need to first manually create a valid PGP signature, which can be complicated. You may find it easier to [use the command line](https://git-scm.com/book/id/v2/Git-Tools-Signing-Your-Work) to create signed commits.",
+        "enum": null,
+        "name": "signature",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a commit",
+    "scope": "git",
+    "id": "getCommit",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/git/commits/{commit_sha}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "commit_sha parameter",
+        "enum": null,
+        "name": "commit_sha",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List matching references",
+    "scope": "git",
+    "id": "listMatchingRefs",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/git/matching-refs/{ref}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single reference",
+    "scope": "git",
+    "id": "getRef",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/git/ref/{ref}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a reference",
+    "scope": "git",
+    "id": "createRef",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/git/refs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the fully qualified reference (ie: `refs/heads/master`). If it doesn't start with 'refs' and have at least two slashes, it will be rejected.",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA1 value for this reference.",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update a reference",
+    "scope": "git",
+    "id": "updateRef",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/git/refs/{ref}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA1 value to set this reference to",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates whether to force the update or to make sure the update is a fast-forward update. Leaving this out or setting it to `false` will make sure you're not overwriting work.",
+        "enum": null,
+        "name": "force",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a reference",
+    "scope": "git",
+    "id": "deleteRef",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/git/refs/{ref}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a tag object",
+    "scope": "git",
+    "id": "createTag",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/git/tags",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The tag's name. This is typically a version (e.g., \"v0.0.1\").",
+        "enum": null,
+        "name": "tag",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The tag message.",
+        "enum": null,
+        "name": "message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA of the git object this is tagging.",
+        "enum": null,
+        "name": "object",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The type of the object we're tagging. Normally this is a `commit` but it can also be a `tree` or a `blob`.",
+        "enum": ["commit", "tree", "blob"],
+        "name": "type",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An object with information about the individual creating the tag.",
+        "enum": null,
+        "name": "tagger",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the author of the tag",
+        "enum": null,
+        "name": "tagger.name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The email of the author of the tag",
+        "enum": null,
+        "name": "tagger.email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "When this object was tagged. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "tagger.date",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a tag",
+    "scope": "git",
+    "id": "getTag",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/git/tags/{tag_sha}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "tag_sha parameter",
+        "enum": null,
+        "name": "tag_sha",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a tree",
+    "scope": "git",
+    "id": "createTree",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/git/trees",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Objects (of `path`, `mode`, `type`, and `sha`) specifying a tree structure.",
+        "enum": null,
+        "name": "tree",
+        "type": "object[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The file referenced in the tree.",
+        "enum": null,
+        "name": "tree[].path",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The file mode; one of `100644` for file (blob), `100755` for executable (blob), `040000` for subdirectory (tree), `160000` for submodule (commit), or `120000` for a blob that specifies the path of a symlink.",
+        "enum": ["100644", "100755", "040000", "160000", "120000"],
+        "name": "tree[].mode",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `blob`, `tree`, or `commit`.",
+        "enum": ["blob", "tree", "commit"],
+        "name": "tree[].type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA1 checksum ID of the object in the tree. Also called `tree.sha`.  \n  \n**Note:** Use either `tree.sha` or `content` to specify the contents of the entry. Using both `tree.sha` and `content` will return an error.",
+        "enum": null,
+        "name": "tree[].sha",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The content you want this file to have. GitHub will write this blob out and use that SHA for this entry. Use either this, or `tree.sha`.  \n  \n**Note:** Use either `tree.sha` or `content` to specify the contents of the entry. Using both `tree.sha` and `content` will return an error.",
+        "enum": null,
+        "name": "tree[].content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA1 of the tree you want to update with new data. If you don't set this, the commit will be created on top of everything; however, it will only contain your change, the rest of your files will show up as deleted.",
+        "enum": null,
+        "name": "base_tree",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a tree",
+    "scope": "git",
+    "id": "getTree",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/git/trees/{tree_sha}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "tree_sha parameter",
+        "enum": null,
+        "name": "tree_sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "recursive parameter",
+        "enum": ["1"],
+        "name": "recursive",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List hooks",
+    "scope": "repos",
+    "id": "listHooks",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/hooks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a hook",
+    "scope": "repos",
+    "id": "createHook",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/hooks",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Use `web` to create a webhook. Default: `web`. This parameter only accepts the value `web`.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/repos/hooks/#create-hook-config-params).",
+        "enum": null,
+        "name": "config",
+        "type": "object",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The URL to which the payloads will be delivered.",
+        "enum": null,
+        "name": "config.url",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`.",
+        "enum": null,
+        "name": "config.content_type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value in the [`X-Hub-Signature`](https://developer.github.com/webhooks/#delivery-headers) header.",
+        "enum": null,
+        "name": "config.secret",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.**",
+        "enum": null,
+        "name": "config.insecure_ssl",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.",
+        "enum": null,
+        "name": "events",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.",
+        "enum": null,
+        "name": "active",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get single hook",
+    "scope": "repos",
+    "id": "getHook",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/hooks/{hook_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a hook",
+    "scope": "repos",
+    "id": "updateHook",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/hooks/{hook_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/repos/hooks/#create-hook-config-params).",
+        "enum": null,
+        "name": "config",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The URL to which the payloads will be delivered.",
+        "enum": null,
+        "name": "config.url",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`.",
+        "enum": null,
+        "name": "config.content_type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value in the [`X-Hub-Signature`](https://developer.github.com/webhooks/#delivery-headers) header.",
+        "enum": null,
+        "name": "config.secret",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.**",
+        "enum": null,
+        "name": "config.insecure_ssl",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for. This replaces the entire array of events.",
+        "enum": null,
+        "name": "events",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines a list of events to be added to the list of events that the Hook triggers for.",
+        "enum": null,
+        "name": "add_events",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines a list of events to be removed from the list of events that the Hook triggers for.",
+        "enum": null,
+        "name": "remove_events",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.",
+        "enum": null,
+        "name": "active",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a hook",
+    "scope": "repos",
+    "id": "deleteHook",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/hooks/{hook_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Ping a hook",
+    "scope": "repos",
+    "id": "pingHook",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/hooks/{hook_id}/pings",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Test a push hook",
+    "scope": "repos",
+    "id": "testPushHook",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/hooks/{hook_id}/tests",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "hook_id parameter",
+        "enum": null,
+        "name": "hook_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Start an import",
+    "scope": "migrations",
+    "id": "startImport",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/import",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The URL of the originating repository.",
+        "enum": null,
+        "name": "vcs_url",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The originating VCS type. Can be one of `subversion`, `git`, `mercurial`, or `tfvc`. Please be aware that without this parameter, the import job will take additional time to detect the VCS type before beginning the import. This detection step will be reflected in the response.",
+        "enum": ["subversion", "git", "mercurial", "tfvc"],
+        "name": "vcs",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If authentication is required, the username to provide to `vcs_url`.",
+        "enum": null,
+        "name": "vcs_username",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If authentication is required, the password to provide to `vcs_url`.",
+        "enum": null,
+        "name": "vcs_password",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "For a tfvc import, the name of the project that is being imported.",
+        "enum": null,
+        "name": "tfvc_project",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get import progress",
+    "scope": "migrations",
+    "id": "getImportProgress",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/import",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update existing import",
+    "scope": "migrations",
+    "id": "updateImport",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/import",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The username to provide to the originating repository.",
+        "enum": null,
+        "name": "vcs_username",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The password to provide to the originating repository.",
+        "enum": null,
+        "name": "vcs_password",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Cancel an import",
+    "scope": "migrations",
+    "id": "cancelImport",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/import",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get commit authors",
+    "scope": "migrations",
+    "id": "getCommitAuthors",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/import/authors",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only authors found after this id are returned. Provide the highest author ID you've seen so far. New authors may be added to the list at any point while the importer is performing the `raw` step.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Map a commit author",
+    "scope": "migrations",
+    "id": "mapCommitAuthor",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/import/authors/{author_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "author_id parameter",
+        "enum": null,
+        "name": "author_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new Git author email.",
+        "enum": null,
+        "name": "email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new Git author name.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get large files",
+    "scope": "migrations",
+    "id": "getLargeFiles",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/import/large_files",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Set Git LFS preference",
+    "scope": "migrations",
+    "id": "setLfsPreference",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/import/lfs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `opt_in` (large files will be stored using Git LFS) or `opt_out` (large files will be removed during the import).",
+        "enum": ["opt_in", "opt_out"],
+        "name": "use_lfs",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a repository installation",
+    "scope": "apps",
+    "id": "getRepoInstallation",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/installation",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a repository installation",
+    "scope": "apps",
+    "id": "findRepoInstallation",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/installation",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get interaction restrictions for a repository",
+    "scope": "interactions",
+    "id": "getRestrictionsForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/interaction-limits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add or update interaction restrictions for a repository",
+    "scope": "interactions",
+    "id": "addOrUpdateRestrictionsForRepo",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/interaction-limits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies the group of GitHub users who can comment, open issues, or create pull requests for the given repository. Must be one of: `existing_users`, `contributors_only`, or `collaborators_only`.",
+        "enum": ["existing_users", "contributors_only", "collaborators_only"],
+        "name": "limit",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove interaction restrictions for a repository",
+    "scope": "interactions",
+    "id": "removeRestrictionsForRepo",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/interaction-limits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List invitations for a repository",
+    "scope": "repos",
+    "id": "listInvitations",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/invitations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a repository invitation",
+    "scope": "repos",
+    "id": "deleteInvitation",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/invitations/{invitation_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "invitation_id parameter",
+        "enum": null,
+        "name": "invitation_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update a repository invitation",
+    "scope": "repos",
+    "id": "updateInvitation",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/invitations/{invitation_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "invitation_id parameter",
+        "enum": null,
+        "name": "invitation_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The permissions that the associated user will have on the repository. Valid values are `read`, `write`, and `admin`.",
+        "enum": ["read", "write", "admin"],
+        "name": "permissions",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List issues for a repository",
+    "scope": "issues",
+    "id": "listForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If an `integer` is passed, it should refer to a milestone by its `number` field. If the string `*` is passed, issues with any milestone are accepted. If the string `none` is passed, issues without milestones are returned.",
+        "enum": null,
+        "name": "milestone",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be the name of a user. Pass in `none` for issues with no assigned user, and `*` for issues assigned to any user.",
+        "enum": null,
+        "name": "assignee",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The user that created the issue.",
+        "enum": null,
+        "name": "creator",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A user that's mentioned in the issue.",
+        "enum": null,
+        "name": "mentioned",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of comma separated label names. Example: `bug,ui,@high`",
+        "enum": null,
+        "name": "labels",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "What to sort results by. Can be either `created`, `updated`, `comments`.",
+        "enum": ["created", "updated", "comments"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The direction of the sort. Can be either `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create an issue",
+    "scope": "issues",
+    "id": "create",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/issues",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the issue.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the issue.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Login for the user that this issue should be assigned to. _NOTE: Only users with push access can set the assignee for new issues. The assignee is silently dropped otherwise. **This field is deprecated.**_",
+        "enum": null,
+        "name": "assignee",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The `number` of the milestone to associate this issue with. _NOTE: Only users with push access can set the milestone for new issues. The milestone is silently dropped otherwise._",
+        "enum": null,
+        "name": "milestone",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Labels to associate with this issue. _NOTE: Only users with push access can set labels for new issues. Labels are silently dropped otherwise._",
+        "enum": null,
+        "name": "labels",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Logins for Users to assign to this issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._",
+        "enum": null,
+        "name": "assignees",
+        "type": "string[]",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List comments in a repository",
+    "scope": "issues",
+    "id": "listCommentsForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `created` or `updated`.",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `asc` or `desc`. Ignored without the `sort` parameter.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only comments updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single comment",
+    "scope": "issues",
+    "id": "getComment",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Edit a comment",
+    "scope": "issues",
+    "id": "updateComment",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/issues/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the comment.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a comment",
+    "scope": "issues",
+    "id": "deleteComment",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/issues/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List reactions for an issue comment",
+    "scope": "reactions",
+    "id": "listForIssueComment",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to an issue comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create reaction for an issue comment",
+    "scope": "reactions",
+    "id": "createForIssueComment",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the issue comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List events for a repository",
+    "scope": "issues",
+    "id": "listEventsForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single event",
+    "scope": "issues",
+    "id": "getEvent",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/events/{event_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "event_id parameter",
+        "enum": null,
+        "name": "event_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single issue",
+    "scope": "issues",
+    "id": "get",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Edit an issue",
+    "scope": "issues",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the issue.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the issue.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Login for the user that this issue should be assigned to. **This field is deprecated.**",
+        "enum": null,
+        "name": "assignee",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "State of the issue. Either `open` or `closed`.",
+        "enum": ["open", "closed"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": true,
+        "deprecated": null,
+        "description": "The `number` of the milestone to associate this issue with or `null` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._",
+        "enum": null,
+        "name": "milestone",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (`[]`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._",
+        "enum": null,
+        "name": "labels",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (`[]`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._",
+        "enum": null,
+        "name": "assignees",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Add assignees to an issue",
+    "scope": "issues",
+    "id": "addAssignees",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/assignees",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Usernames of people to assign this issue to. _NOTE: Only users with push access can add assignees to an issue. Assignees are silently ignored otherwise._",
+        "enum": null,
+        "name": "assignees",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Remove assignees from an issue",
+    "scope": "issues",
+    "id": "removeAssignees",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/assignees",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Usernames of assignees to remove from an issue. _NOTE: Only users with push access can remove assignees from an issue. Assignees are silently ignored otherwise._",
+        "enum": null,
+        "name": "assignees",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List comments on an issue",
+    "scope": "issues",
+    "id": "listComments",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only comments updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create a comment",
+    "scope": "issues",
+    "id": "createComment",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the comment.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List events for an issue",
+    "scope": "issues",
+    "id": "listEvents",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List labels on an issue",
+    "scope": "issues",
+    "id": "listLabelsOnIssue",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Add labels to an issue",
+    "scope": "issues",
+    "id": "addLabels",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the label to add to the issue. Must contain at least one label. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.",
+        "enum": null,
+        "name": "labels",
+        "type": "string[]",
+        "required": true
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Replace all labels for an issue",
+    "scope": "issues",
+    "id": "replaceLabels",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The names of the labels to add to the issue. You can pass an empty array to remove all labels. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.",
+        "enum": null,
+        "name": "labels",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Remove all labels from an issue",
+    "scope": "issues",
+    "id": "removeLabels",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Remove a label from an issue",
+    "scope": "issues",
+    "id": "removeLabel",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/labels/{name}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "name parameter",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Lock an issue",
+    "scope": "issues",
+    "id": "lock",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/lock",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons:  \n\\* `off-topic`  \n\\* `too heated`  \n\\* `resolved`  \n\\* `spam`",
+        "enum": ["off-topic", "too heated", "resolved", "spam"],
+        "name": "lock_reason",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Unlock an issue",
+    "scope": "issues",
+    "id": "unlock",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/lock",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List reactions for an issue",
+    "scope": "reactions",
+    "id": "listForIssue",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to an issue.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create reaction for an issue",
+    "scope": "reactions",
+    "id": "createForIssue",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the issue.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List events for an issue",
+    "scope": "issues",
+    "id": "listEventsForTimeline",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/issues/{issue_number}/timeline",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "issue_number parameter",
+        "enum": null,
+        "name": "issue_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "issue_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List deploy keys",
+    "scope": "repos",
+    "id": "listDeployKeys",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Add a new deploy key",
+    "scope": "repos",
+    "id": "addDeployKey",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A name for the key.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the key.",
+        "enum": null,
+        "name": "key",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If `true`, the key will only be able to read repository contents. Otherwise, the key will be able to read and write.  \n  \nDeploy keys with write access can perform the same actions as an organization member with admin access, or a collaborator on a personal repository. For more information, see \"[Repository permission levels for an organization](https://help.github.com/articles/repository-permission-levels-for-an-organization/)\" and \"[Permission levels for a user account repository](https://help.github.com/articles/permission-levels-for-a-user-account-repository/).\"",
+        "enum": null,
+        "name": "read_only",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a deploy key",
+    "scope": "repos",
+    "id": "getDeployKey",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/keys/{key_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "key_id parameter",
+        "enum": null,
+        "name": "key_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove a deploy key",
+    "scope": "repos",
+    "id": "removeDeployKey",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/keys/{key_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "key_id parameter",
+        "enum": null,
+        "name": "key_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List all labels for this repository",
+    "scope": "issues",
+    "id": "listLabelsForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a label",
+    "scope": "issues",
+    "id": "createLabel",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing `:strawberry:` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png \":strawberry:\"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/).",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading `#`.",
+        "enum": null,
+        "name": "color",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the label.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single label",
+    "scope": "issues",
+    "id": "getLabel",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/labels/{name}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "name parameter",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update a label",
+    "scope": "issues",
+    "id": "updateLabel",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/labels/{name}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "name parameter",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing `:strawberry:` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png \":strawberry:\"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/).",
+        "enum": null,
+        "name": "new_name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading `#`.",
+        "enum": null,
+        "name": "color",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the label.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a label",
+    "scope": "issues",
+    "id": "deleteLabel",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/labels/{name}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "name parameter",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List languages",
+    "scope": "repos",
+    "id": "listLanguages",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/languages",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get the contents of a repository's license",
+    "scope": "licenses",
+    "id": "getForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/license",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Perform a merge",
+    "scope": "repos",
+    "id": "merge",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/merges",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the base branch that the head will be merged into.",
+        "enum": null,
+        "name": "base",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The head to merge. This can be a branch name or a commit SHA1.",
+        "enum": null,
+        "name": "head",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Commit message to use for the merge commit. If omitted, a default message will be used.",
+        "enum": null,
+        "name": "commit_message",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List milestones for a repository",
+    "scope": "issues",
+    "id": "listMilestonesForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/milestones",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The state of the milestone. Either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "What to sort results by. Either `due_on` or `completeness`.",
+        "enum": ["due_on", "completeness"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The direction of the sort. Either `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a milestone",
+    "scope": "issues",
+    "id": "createMilestone",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/milestones",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the milestone.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The state of the milestone. Either `open` or `closed`.",
+        "enum": ["open", "closed"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A description of the milestone.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "due_on",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single milestone",
+    "scope": "issues",
+    "id": "getMilestone",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/milestones/{milestone_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "milestone_number parameter",
+        "enum": null,
+        "name": "milestone_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "milestone_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Update a milestone",
+    "scope": "issues",
+    "id": "updateMilestone",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/milestones/{milestone_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "milestone_number parameter",
+        "enum": null,
+        "name": "milestone_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the milestone.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The state of the milestone. Either `open` or `closed`.",
+        "enum": ["open", "closed"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A description of the milestone.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "due_on",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": "milestone_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Delete a milestone",
+    "scope": "issues",
+    "id": "deleteMilestone",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/milestones/{milestone_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "milestone_number parameter",
+        "enum": null,
+        "name": "milestone_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "milestone_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Get labels for every issue in a milestone",
+    "scope": "issues",
+    "id": "listLabelsForMilestone",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/milestones/{milestone_number}/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "milestone_number parameter",
+        "enum": null,
+        "name": "milestone_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "milestone_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List your notifications in a repository",
+    "scope": "activity",
+    "id": "listNotificationsForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/notifications",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If `true`, show notifications marked as read.",
+        "enum": null,
+        "name": "all",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "If `true`, only shows notifications in which the user is directly participating or mentioned.",
+        "enum": null,
+        "name": "participating",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "before",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Mark notifications as read in a repository",
+    "scope": "activity",
+    "id": "markNotificationsAsReadForRepo",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/notifications",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Default: The current timestamp.",
+        "enum": null,
+        "name": "last_read_at",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get information about a Pages site",
+    "scope": "repos",
+    "id": "getPages",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pages",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Enable a Pages site",
+    "scope": "repos",
+    "id": "enablePagesSite",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pages",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "source parameter",
+        "enum": null,
+        "name": "source",
+        "type": "object",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The repository branch used to publish your [site's source files](https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/). Can be either `master` or `gh-pages`.",
+        "enum": ["master", "gh-pages"],
+        "name": "source.branch",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The repository directory that includes the source files for the Pages site. When `branch` is `master`, you can change `path` to `/docs`. When `branch` is `gh-pages`, you are unable to specify a `path` other than `/`.",
+        "enum": null,
+        "name": "source.path",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Disable a Pages site",
+    "scope": "repos",
+    "id": "disablePagesSite",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/pages",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Update information about a Pages site",
+    "scope": "repos",
+    "id": "updateInformationAboutPagesSite",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/pages",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specify a custom domain for the repository. Sending a `null` value will remove the custom domain. For more about custom domains, see \"[Using a custom domain with GitHub Pages](https://help.github.com/articles/using-a-custom-domain-with-github-pages/).\"",
+        "enum": null,
+        "name": "cname",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Update the source for the repository. Must include the branch name, and may optionally specify the subdirectory `/docs`. Possible values are `\"gh-pages\"`, `\"master\"`, and `\"master /docs\"`.",
+        "enum": ["\"gh-pages\"", "\"master\"", "\"master /docs\""],
+        "name": "source",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Request a page build",
+    "scope": "repos",
+    "id": "requestPageBuild",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pages/builds",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List Pages builds",
+    "scope": "repos",
+    "id": "listPagesBuilds",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pages/builds",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get latest Pages build",
+    "scope": "repos",
+    "id": "getLatestPagesBuild",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pages/builds/latest",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a specific Pages build",
+    "scope": "repos",
+    "id": "getPagesBuild",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pages/builds/{build_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "build_id parameter",
+        "enum": null,
+        "name": "build_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List repository projects",
+    "scope": "projects",
+    "id": "listForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/projects",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a repository project",
+    "scope": "projects",
+    "id": "createForRepo",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/projects",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the project.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The description of the project.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List pull requests",
+    "scope": "pulls",
+    "id": "list",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `open`, `closed`, or `all` to filter by state.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filter pulls by head user or head organization and branch name in the format of `user:ref-name` or `organization:ref-name`. For example: `github:new-script-format` or `octocat:test-branch`.",
+        "enum": null,
+        "name": "head",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filter pulls by base branch name. Example: `gh-pages`.",
+        "enum": null,
+        "name": "base",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "What to sort results by. Can be either `created`, `updated`, `popularity` (comment count) or `long-running` (age, filtering by pulls updated in the last month).",
+        "enum": ["created", "updated", "popularity", "long-running"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The direction of the sort. Can be either `asc` or `desc`. Default: `desc` when sort is `created` or sort is not specified, otherwise `asc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a pull request",
+    "scope": "pulls",
+    "id": "create",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the new pull request.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the branch where your changes are implemented. For cross-repository pull requests in the same network, namespace `head` with a user like this: `username:branch`.",
+        "enum": null,
+        "name": "head",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the branch you want the changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repository that requests a merge to a base of another repository.",
+        "enum": null,
+        "name": "base",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the pull request.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request.",
+        "enum": null,
+        "name": "maintainer_can_modify",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates whether the pull request is a draft. See \"[Draft Pull Requests](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests)\" in the GitHub Help documentation to learn more.",
+        "enum": null,
+        "name": "draft",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List comments in a repository",
+    "scope": "pulls",
+    "id": "listCommentsForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be either `created` or `updated` comments.",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be either `asc` or `desc`. Ignored without `sort` parameter.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only returns comments `updated` at or after this time.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single comment",
+    "scope": "pulls",
+    "id": "getComment",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a comment",
+    "scope": "pulls",
+    "id": "updateComment",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/pulls/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The text of the reply to the review comment.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a comment",
+    "scope": "pulls",
+    "id": "deleteComment",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/pulls/comments/{comment_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List reactions for a pull request review comment",
+    "scope": "reactions",
+    "id": "listForPullRequestReviewComment",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a pull request review comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create reaction for a pull request review comment",
+    "scope": "reactions",
+    "id": "createForPullRequestReviewComment",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the pull request review comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single pull request",
+    "scope": "pulls",
+    "id": "get",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Update a pull request",
+    "scope": "pulls",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The title of the pull request.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The contents of the pull request.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "State of this Pull Request. Either `open` or `closed`.",
+        "enum": ["open", "closed"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository.",
+        "enum": null,
+        "name": "base",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request.",
+        "enum": null,
+        "name": "maintainer_can_modify",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List comments on a pull request",
+    "scope": "pulls",
+    "id": "listComments",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be either `created` or `updated` comments.",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be either `asc` or `desc`. Ignored without `sort` parameter.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only returns comments `updated` at or after this time.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create a comment",
+    "scope": "pulls",
+    "id": "createComment",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The text of the review comment.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.",
+        "enum": null,
+        "name": "commit_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The relative path to the file that necessitates a comment.",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.",
+        "enum": null,
+        "name": "position",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see \"[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)\" in the GitHub Help documentation.",
+        "enum": ["LEFT", "RIGHT"],
+        "name": "side",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.",
+        "enum": null,
+        "name": "line",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see \"[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)\" in the GitHub Help documentation.",
+        "enum": null,
+        "name": "start_line",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see \"[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)\" in the GitHub Help documentation. See `side` in this table for additional context.",
+        "enum": ["LEFT", "RIGHT", "side"],
+        "name": "start_side",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      },
+      {
+        "alias": null,
+        "allowNull": null,
+        "deprecated": true,
+        "description": "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.",
+        "enum": null,
+        "name": "in_reply_to",
+        "type": "integer",
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create a comment",
+    "scope": "pulls",
+    "id": "createCommentReply",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The text of the review comment.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.",
+        "enum": null,
+        "name": "commit_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The relative path to the file that necessitates a comment.",
+        "enum": null,
+        "name": "path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.",
+        "enum": null,
+        "name": "position",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see \"[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)\" in the GitHub Help documentation.",
+        "enum": ["LEFT", "RIGHT"],
+        "name": "side",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.",
+        "enum": null,
+        "name": "line",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see \"[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)\" in the GitHub Help documentation.",
+        "enum": null,
+        "name": "start_line",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see \"[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)\" in the GitHub Help documentation. See `side` in this table for additional context.",
+        "enum": ["LEFT", "RIGHT", "side"],
+        "name": "start_side",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      },
+      {
+        "alias": null,
+        "allowNull": null,
+        "deprecated": true,
+        "description": "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.",
+        "enum": null,
+        "name": "in_reply_to",
+        "type": "integer",
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create a review comment reply",
+    "scope": "pulls",
+    "id": "createReviewCommentReply",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_id parameter",
+        "enum": null,
+        "name": "comment_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The text of the review comment.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List commits on a pull request",
+    "scope": "pulls",
+    "id": "listCommits",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/commits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List pull requests files",
+    "scope": "pulls",
+    "id": "listFiles",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/files",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Get if a pull request has been merged",
+    "scope": "pulls",
+    "id": "checkIfMerged",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/merge",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Merge a pull request (Merge Button)",
+    "scope": "pulls",
+    "id": "merge",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/merge",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Title for the automatic commit message.",
+        "enum": null,
+        "name": "commit_title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Extra detail to append to automatic commit message.",
+        "enum": null,
+        "name": "commit_message",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "SHA that pull request head must match to allow merge.",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Merge method to use. Possible values are `merge`, `squash` or `rebase`. Default is `merge`.",
+        "enum": ["merge", "squash", "rebase"],
+        "name": "merge_method",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List review requests",
+    "scope": "pulls",
+    "id": "listReviewRequests",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create a review request",
+    "scope": "pulls",
+    "id": "createReviewRequest",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An array of user `login`s that will be requested.",
+        "enum": null,
+        "name": "reviewers",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An array of team `slug`s that will be requested.",
+        "enum": null,
+        "name": "team_reviewers",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Delete a review request",
+    "scope": "pulls",
+    "id": "deleteReviewRequest",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An array of user `login`s that will be removed.",
+        "enum": null,
+        "name": "reviewers",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An array of team `slug`s that will be removed.",
+        "enum": null,
+        "name": "team_reviewers",
+        "type": "string[]",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "List reviews on a pull request",
+    "scope": "pulls",
+    "id": "listReviews",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Create a pull request review",
+    "scope": "pulls",
+    "id": "createReview",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment outdated if a subsequent commit modifies the line you specify as the `position`. Defaults to the most recent commit in the pull request when you do not specify a value.",
+        "enum": null,
+        "name": "commit_id",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required** when using `REQUEST_CHANGES` or `COMMENT` for the `event` parameter. The body text of the pull request review.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. By leaving this blank, you set the review action state to `PENDING`, which means you will need to [submit the pull request review](https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review) when you are ready.",
+        "enum": ["APPROVE", "REQUEST_CHANGES", "COMMENT"],
+        "name": "event",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Use the following table to specify the location, destination, and contents of the draft review comment.",
+        "enum": null,
+        "name": "comments",
+        "type": "object[]",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The relative path to the file that necessitates a review comment.",
+        "enum": null,
+        "name": "comments[].path",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note below.",
+        "enum": null,
+        "name": "comments[].position",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Text of the review comment.",
+        "enum": null,
+        "name": "comments[].body",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Get a single review",
+    "scope": "pulls",
+    "id": "getReview",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "review_id parameter",
+        "enum": null,
+        "name": "review_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Delete a pending review",
+    "scope": "pulls",
+    "id": "deletePendingReview",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "review_id parameter",
+        "enum": null,
+        "name": "review_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Update a pull request review",
+    "scope": "pulls",
+    "id": "updateReview",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "review_id parameter",
+        "enum": null,
+        "name": "review_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The body text of the pull request review.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Get comments for a single review",
+    "scope": "pulls",
+    "id": "getCommentsForReview",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "review_id parameter",
+        "enum": null,
+        "name": "review_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Dismiss a pull request review",
+    "scope": "pulls",
+    "id": "dismissReview",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "review_id parameter",
+        "enum": null,
+        "name": "review_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The message for the pull request review dismissal",
+        "enum": null,
+        "name": "message",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Submit a pull request review",
+    "scope": "pulls",
+    "id": "submitReview",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "review_id parameter",
+        "enum": null,
+        "name": "review_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The body text of the pull request review",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to `PENDING`, which means you will need to re-submit the pull request review using a review action.",
+        "enum": ["APPROVE", "REQUEST_CHANGES", "COMMENT"],
+        "name": "event",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": "pull_number",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "number",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Update a pull request branch",
+    "scope": "pulls",
+    "id": "updateBranch",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/pulls/{pull_number}/update-branch",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "pull_number parameter",
+        "enum": null,
+        "name": "pull_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The expected SHA of the pull request's HEAD ref. This is the most recent commit on the pull request's branch. If the expected SHA does not match the pull request's HEAD, you will receive a `422 Unprocessable Entity` status. You can use the \"[List commits on a repository](https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository)\" endpoint to find the most recent commit SHA. Default: SHA of the pull request's current HEAD ref.",
+        "enum": null,
+        "name": "expected_head_sha",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get the README",
+    "scope": "repos",
+    "id": "getReadme",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/readme",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`)",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List releases for a repository",
+    "scope": "repos",
+    "id": "listReleases",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/releases",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a release",
+    "scope": "repos",
+    "id": "createRelease",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/releases",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the tag.",
+        "enum": null,
+        "name": "tag_name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`).",
+        "enum": null,
+        "name": "target_commitish",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the release.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Text describing the contents of the tag.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "`true` to create a draft (unpublished) release, `false` to create a published one.",
+        "enum": null,
+        "name": "draft",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "`true` to identify the release as a prerelease. `false` to identify the release as a full release.",
+        "enum": null,
+        "name": "prerelease",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single release asset",
+    "scope": "repos",
+    "id": "getReleaseAsset",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/releases/assets/{asset_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "asset_id parameter",
+        "enum": null,
+        "name": "asset_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a release asset",
+    "scope": "repos",
+    "id": "updateReleaseAsset",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/releases/assets/{asset_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "asset_id parameter",
+        "enum": null,
+        "name": "asset_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The file name of the asset.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An alternate short description of the asset. Used in place of the filename.",
+        "enum": null,
+        "name": "label",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a release asset",
+    "scope": "repos",
+    "id": "deleteReleaseAsset",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/releases/assets/{asset_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "asset_id parameter",
+        "enum": null,
+        "name": "asset_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get the latest release",
+    "scope": "repos",
+    "id": "getLatestRelease",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/releases/latest",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a release by tag name",
+    "scope": "repos",
+    "id": "getReleaseByTag",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/releases/tags/{tag}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "tag parameter",
+        "enum": null,
+        "name": "tag",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single release",
+    "scope": "repos",
+    "id": "getRelease",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/releases/{release_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "release_id parameter",
+        "enum": null,
+        "name": "release_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a release",
+    "scope": "repos",
+    "id": "updateRelease",
+    "method": "PATCH",
+    "url": "/repos/{owner}/{repo}/releases/{release_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "release_id parameter",
+        "enum": null,
+        "name": "release_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the tag.",
+        "enum": null,
+        "name": "tag_name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`).",
+        "enum": null,
+        "name": "target_commitish",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the release.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Text describing the contents of the tag.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "`true` makes the release a draft, and `false` publishes the release.",
+        "enum": null,
+        "name": "draft",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "`true` to identify the release as a prerelease, `false` to identify the release as a full release.",
+        "enum": null,
+        "name": "prerelease",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a release",
+    "scope": "repos",
+    "id": "deleteRelease",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/releases/{release_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "release_id parameter",
+        "enum": null,
+        "name": "release_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List assets for a release",
+    "scope": "repos",
+    "id": "listAssetsForRelease",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/releases/{release_id}/assets",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "release_id parameter",
+        "enum": null,
+        "name": "release_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List Stargazers",
+    "scope": "activity",
+    "id": "listStargazersForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/stargazers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get the number of additions and deletions per week",
+    "scope": "repos",
+    "id": "getCodeFrequencyStats",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/stats/code_frequency",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get the last year of commit activity data",
+    "scope": "repos",
+    "id": "getCommitActivityStats",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/stats/commit_activity",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get contributors list with additions, deletions, and commit counts",
+    "scope": "repos",
+    "id": "getContributorsStats",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/stats/contributors",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get the weekly commit count for the repository owner and everyone else",
+    "scope": "repos",
+    "id": "getParticipationStats",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/stats/participation",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get the number of commits per hour in each day",
+    "scope": "repos",
+    "id": "getPunchCardStats",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/stats/punch_card",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create a status",
+    "scope": "repos",
+    "id": "createStatus",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/statuses/{sha}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "sha parameter",
+        "enum": null,
+        "name": "sha",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The state of the status. Can be one of `error`, `failure`, `pending`, or `success`.",
+        "enum": ["error", "failure", "pending", "success"],
+        "name": "state",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the source of the status.  \nFor example, if your continuous integration system is posting build status, you would want to provide the deep link for the build output for this specific SHA:  \n`http://ci.example.com/user/repo/build/sha`",
+        "enum": null,
+        "name": "target_url",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the status.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A string label to differentiate this status from the status of other systems.",
+        "enum": null,
+        "name": "context",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List watchers",
+    "scope": "activity",
+    "id": "listWatchersForRepo",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/subscribers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a Repository Subscription",
+    "scope": "activity",
+    "id": "getRepoSubscription",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/subscription",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Set a Repository Subscription",
+    "scope": "activity",
+    "id": "setRepoSubscription",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/subscription",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines if notifications should be received from this repository.",
+        "enum": null,
+        "name": "subscribed",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines if all notifications should be blocked from this repository.",
+        "enum": null,
+        "name": "ignored",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a Repository Subscription",
+    "scope": "activity",
+    "id": "deleteRepoSubscription",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/subscription",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List tags",
+    "scope": "repos",
+    "id": "listTags",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/tags",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List teams",
+    "scope": "repos",
+    "id": "listTeams",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all topics for a repository",
+    "scope": "repos",
+    "id": "listTopics",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/topics",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Replace all topics for a repository",
+    "scope": "repos",
+    "id": "replaceTopics",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/topics",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An array of topics to add to the repository. Pass one or more topics to _replace_ the set of existing topics. Send an empty array (`[]`) to clear all topics from the repository. **Note:** Topic `names` cannot contain uppercase letters.",
+        "enum": null,
+        "name": "names",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Clones",
+    "scope": "repos",
+    "id": "getClones",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/traffic/clones",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Must be one of: `day`, `week`.",
+        "enum": ["day", "week"],
+        "name": "per",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List paths",
+    "scope": "repos",
+    "id": "getTopPaths",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/traffic/popular/paths",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List referrers",
+    "scope": "repos",
+    "id": "getTopReferrers",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/traffic/popular/referrers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Views",
+    "scope": "repos",
+    "id": "getViews",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/traffic/views",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Must be one of: `day`, `week`.",
+        "enum": ["day", "week"],
+        "name": "per",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Transfer a repository",
+    "scope": "repos",
+    "id": "transfer",
+    "method": "POST",
+    "url": "/repos/{owner}/{repo}/transfer",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Required:** The username or organization name the repository will be transferred to.",
+        "enum": null,
+        "name": "new_owner",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.",
+        "enum": null,
+        "name": "team_ids",
+        "type": "integer[]",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if vulnerability alerts are enabled for a repository",
+    "scope": "repos",
+    "id": "checkVulnerabilityAlerts",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/vulnerability-alerts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Enable vulnerability alerts",
+    "scope": "repos",
+    "id": "enableVulnerabilityAlerts",
+    "method": "PUT",
+    "url": "/repos/{owner}/{repo}/vulnerability-alerts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Disable vulnerability alerts",
+    "scope": "repos",
+    "id": "disableVulnerabilityAlerts",
+    "method": "DELETE",
+    "url": "/repos/{owner}/{repo}/vulnerability-alerts",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get archive link",
+    "scope": "repos",
+    "id": "getArchiveLink",
+    "method": "GET",
+    "url": "/repos/{owner}/{repo}/{archive_format}/{ref}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "archive_format parameter",
+        "enum": null,
+        "name": "archive_format",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ref parameter",
+        "enum": null,
+        "name": "ref",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create repository using a repository template",
+    "scope": "repos",
+    "id": "createUsingTemplate",
+    "method": "POST",
+    "url": "/repos/{template_owner}/{template_repo}/generate",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "template_owner parameter",
+        "enum": null,
+        "name": "template_owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "template_repo parameter",
+        "enum": null,
+        "name": "template_repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The organization or person who will own the new repository. To create a new repository in an organization, the authenticated user must be a member of the specified organization.",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the new repository.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the new repository.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to create a new private repository or `false` to create a new public one.",
+        "enum": null,
+        "name": "private",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List all public repositories",
+    "scope": "repos",
+    "id": "listPublic",
+    "method": "GET",
+    "url": "/repositories",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The integer ID of the last Repository that you've seen.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a list of provisioned identities",
+    "scope": "scim",
+    "id": "listProvisionedIdentities",
+    "method": "GET",
+    "url": "/scim/v2/organizations/{org}/Users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Used for pagination: the index of the first result to return.",
+        "enum": null,
+        "name": "startIndex",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Used for pagination: the number of results to return.",
+        "enum": null,
+        "name": "count",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters results using the equals query parameter operator (`eq`). You can filter results that are equal to `id`, `userName`, `emails`, and `external_id`. For example, to search for an identity with the `userName` Octocat, you would use this query: `?filter=userName%20eq%20\\\"Octocat\\\"`.",
+        "enum": null,
+        "name": "filter",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Provision and invite users",
+    "scope": "scim",
+    "id": "provisionAndInviteUsers",
+    "method": "POST",
+    "url": "/scim/v2/organizations/{org}/Users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Provision and invite users",
+    "scope": "scim",
+    "id": "provisionInviteUsers",
+    "method": "POST",
+    "url": "/scim/v2/organizations/{org}/Users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get provisioning details for a single user",
+    "scope": "scim",
+    "id": "getProvisioningDetailsForUser",
+    "method": "GET",
+    "url": "/scim/v2/organizations/{org}/Users/{scim_user_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "scim_user_id parameter",
+        "enum": null,
+        "name": "scim_user_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "scim_user_id",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "external_identity_guid",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Replace a provisioned user's information",
+    "scope": "scim",
+    "id": "replaceProvisionedUserInformation",
+    "method": "PUT",
+    "url": "/scim/v2/organizations/{org}/Users/{scim_user_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "scim_user_id parameter",
+        "enum": null,
+        "name": "scim_user_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "scim_user_id",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "external_identity_guid",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Replace a provisioned user's information",
+    "scope": "scim",
+    "id": "updateProvisionedOrgMembership",
+    "method": "PUT",
+    "url": "/scim/v2/organizations/{org}/Users/{scim_user_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "scim_user_id parameter",
+        "enum": null,
+        "name": "scim_user_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "scim_user_id",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "external_identity_guid",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Update a user attribute",
+    "scope": "scim",
+    "id": "updateUserAttribute",
+    "method": "PATCH",
+    "url": "/scim/v2/organizations/{org}/Users/{scim_user_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "scim_user_id parameter",
+        "enum": null,
+        "name": "scim_user_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "scim_user_id",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "external_identity_guid",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Remove a user from the organization",
+    "scope": "scim",
+    "id": "removeUserFromOrg",
+    "method": "DELETE",
+    "url": "/scim/v2/organizations/{org}/Users/{scim_user_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "scim_user_id parameter",
+        "enum": null,
+        "name": "scim_user_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": "scim_user_id",
+        "allowNull": null,
+        "deprecated": true,
+        "description": null,
+        "enum": null,
+        "name": "external_identity_guid",
+        "type": null,
+        "required": null
+      }
+    ]
+  },
+  {
+    "name": "Search code",
+    "scope": "search",
+    "id": "code",
+    "method": "GET",
+    "url": "/search/code",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See \"[Searching code](https://help.github.com/articles/searching-code/)\" for a detailed list of qualifiers.",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the results of your query. Can only be `indexed`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)",
+        "enum": ["indexed"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.",
+        "enum": ["desc", "asc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Search commits",
+    "scope": "search",
+    "id": "commits",
+    "method": "GET",
+    "url": "/search/commits",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See \"[Searching commits](https://help.github.com/articles/searching-commits/)\" for a detailed list of qualifiers.",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the results of your query by `author-date` or `committer-date`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)",
+        "enum": ["author-date", "committer-date"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.",
+        "enum": ["desc", "asc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Search issues and pull requests",
+    "scope": "search",
+    "id": "issuesAndPullRequests",
+    "method": "GET",
+    "url": "/search/issues",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See \"[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)\" for a detailed list of qualifiers.",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the results of your query by the number of `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, or `interactions`. You can also sort results by how recently the items were `created` or `updated`, Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)",
+        "enum": [
+          "comments",
+          "reactions",
+          "reactions-+1",
+          "reactions--1",
+          "reactions-smile",
+          "reactions-thinking_face",
+          "reactions-heart",
+          "reactions-tada",
+          "interactions",
+          "created",
+          "updated"
+        ],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.",
+        "enum": ["desc", "asc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Search issues and pull requests",
+    "scope": "search",
+    "id": "issues",
+    "method": "GET",
+    "url": "/search/issues",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See \"[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)\" for a detailed list of qualifiers.",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the results of your query by the number of `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, or `interactions`. You can also sort results by how recently the items were `created` or `updated`, Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)",
+        "enum": [
+          "comments",
+          "reactions",
+          "reactions-+1",
+          "reactions--1",
+          "reactions-smile",
+          "reactions-thinking_face",
+          "reactions-heart",
+          "reactions-tada",
+          "interactions",
+          "created",
+          "updated"
+        ],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.",
+        "enum": ["desc", "asc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Search labels",
+    "scope": "search",
+    "id": "labels",
+    "method": "GET",
+    "url": "/search/labels",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The id of the repository.",
+        "enum": null,
+        "name": "repository_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The search keywords. This endpoint does not accept qualifiers in the query. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query).",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the results of your query by when the label was `created` or `updated`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.",
+        "enum": ["desc", "asc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Search repositories",
+    "scope": "search",
+    "id": "repos",
+    "method": "GET",
+    "url": "/search/repositories",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See \"[Searching for repositories](https://help.github.com/articles/searching-for-repositories/)\" for a detailed list of qualifiers.",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the results of your query by number of `stars`, `forks`, or `help-wanted-issues` or how recently the items were `updated`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)",
+        "enum": ["stars", "forks", "help-wanted-issues", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.",
+        "enum": ["desc", "asc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Search topics",
+    "scope": "search",
+    "id": "topics",
+    "method": "GET",
+    "url": "/search/topics",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query).",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Search users",
+    "scope": "search",
+    "id": "users",
+    "method": "GET",
+    "url": "/search/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See \"[Searching users](https://help.github.com/articles/searching-users/)\" for a detailed list of qualifiers.",
+        "enum": null,
+        "name": "q",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the results of your query by number of `followers` or `repositories`, or when the person `joined` GitHub. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)",
+        "enum": ["followers", "repositories", "joined"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.",
+        "enum": ["desc", "asc"],
+        "name": "order",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get team",
+    "scope": "teams",
+    "id": "get",
+    "method": "GET",
+    "url": "/teams/{team_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit team",
+    "scope": "teams",
+    "id": "update",
+    "method": "PATCH",
+    "url": "/teams/{team_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the team.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The description of the team.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The level of privacy this team should have. Editing teams without specifying this parameter leaves `privacy` intact. The options are:  \n**For a non-nested team:**  \n\\* `secret` - only visible to organization owners and members of this team.  \n\\* `closed` - visible to all members of this organization.  \n**For a parent or child team:**  \n\\* `closed` - visible to all members of this organization.",
+        "enum": ["secret", "closed"],
+        "name": "privacy",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "**Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of:  \n\\* `pull` - team members can pull, but not push to or administer newly-added repositories.  \n\\* `push` - team members can pull and push, but not administer newly-added repositories.  \n\\* `admin` - team members can pull, push and administer newly-added repositories.",
+        "enum": ["pull", "push", "admin"],
+        "name": "permission",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.",
+        "enum": null,
+        "name": "parent_team_id",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete team",
+    "scope": "teams",
+    "id": "delete",
+    "method": "DELETE",
+    "url": "/teams/{team_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List discussions",
+    "scope": "teams",
+    "id": "listDiscussions",
+    "method": "GET",
+    "url": "/teams/{team_id}/discussions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the discussion comments by the date they were created. To return the oldest comments first, set to `asc`. Can be one of `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a discussion",
+    "scope": "teams",
+    "id": "createDiscussion",
+    "method": "POST",
+    "url": "/teams/{team_id}/discussions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The discussion post's title.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The discussion post's body text.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Private posts are only visible to team members, organization owners, and team maintainers. Public posts are visible to all members of the organization. Set to `true` to create a private post.",
+        "enum": null,
+        "name": "private",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single discussion",
+    "scope": "teams",
+    "id": "getDiscussion",
+    "method": "GET",
+    "url": "/teams/{team_id}/discussions/{discussion_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a discussion",
+    "scope": "teams",
+    "id": "updateDiscussion",
+    "method": "PATCH",
+    "url": "/teams/{team_id}/discussions/{discussion_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The discussion post's title.",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The discussion post's body text.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Delete a discussion",
+    "scope": "teams",
+    "id": "deleteDiscussion",
+    "method": "DELETE",
+    "url": "/teams/{team_id}/discussions/{discussion_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List comments",
+    "scope": "teams",
+    "id": "listDiscussionComments",
+    "method": "GET",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Sorts the discussion comments by the date they were created. To return the oldest comments first, set to `asc`. Can be one of `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a comment",
+    "scope": "teams",
+    "id": "createDiscussionComment",
+    "method": "POST",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/comments",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The discussion comment's body text.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a single comment",
+    "scope": "teams",
+    "id": "getDiscussionComment",
+    "method": "GET",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_number parameter",
+        "enum": null,
+        "name": "comment_number",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit a comment",
+    "scope": "teams",
+    "id": "updateDiscussionComment",
+    "method": "PATCH",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_number parameter",
+        "enum": null,
+        "name": "comment_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The discussion comment's body text.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a comment",
+    "scope": "teams",
+    "id": "deleteDiscussionComment",
+    "method": "DELETE",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_number parameter",
+        "enum": null,
+        "name": "comment_number",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List reactions for a team discussion comment",
+    "scope": "reactions",
+    "id": "listForTeamDiscussionComment",
+    "method": "GET",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_number parameter",
+        "enum": null,
+        "name": "comment_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a team discussion comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create reaction for a team discussion comment",
+    "scope": "reactions",
+    "id": "createForTeamDiscussionComment",
+    "method": "POST",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "comment_number parameter",
+        "enum": null,
+        "name": "comment_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the team discussion comment.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List reactions for a team discussion",
+    "scope": "reactions",
+    "id": "listForTeamDiscussion",
+    "method": "GET",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a team discussion.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create reaction for a team discussion",
+    "scope": "reactions",
+    "id": "createForTeamDiscussion",
+    "method": "POST",
+    "url": "/teams/{team_id}/discussions/{discussion_number}/reactions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "discussion_number parameter",
+        "enum": null,
+        "name": "discussion_number",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the team discussion.",
+        "enum": [
+          "+1",
+          "-1",
+          "laugh",
+          "confused",
+          "heart",
+          "hooray",
+          "rocket",
+          "eyes"
+        ],
+        "name": "content",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List pending team invitations",
+    "scope": "teams",
+    "id": "listPendingInvitations",
+    "method": "GET",
+    "url": "/teams/{team_id}/invitations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List team members",
+    "scope": "teams",
+    "id": "listMembers",
+    "method": "GET",
+    "url": "/teams/{team_id}/members",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Filters members returned by their role in the team. Can be one of:  \n\\* `member` - normal members of the team.  \n\\* `maintainer` - team maintainers.  \n\\* `all` - all members of the team.",
+        "enum": ["member", "maintainer", "all"],
+        "name": "role",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get team member",
+    "scope": "teams",
+    "id": "getMember",
+    "method": "GET",
+    "url": "/teams/{team_id}/members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add team member",
+    "scope": "teams",
+    "id": "addMember",
+    "method": "PUT",
+    "url": "/teams/{team_id}/members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove team member",
+    "scope": "teams",
+    "id": "removeMember",
+    "method": "DELETE",
+    "url": "/teams/{team_id}/members/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get team membership",
+    "scope": "teams",
+    "id": "getMembership",
+    "method": "GET",
+    "url": "/teams/{team_id}/memberships/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add or update team membership",
+    "scope": "teams",
+    "id": "addOrUpdateMembership",
+    "method": "PUT",
+    "url": "/teams/{team_id}/memberships/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The role that this user should have in the team. Can be one of:  \n\\* `member` - a normal member of the team.  \n\\* `maintainer` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description.",
+        "enum": ["member", "maintainer"],
+        "name": "role",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove team membership",
+    "scope": "teams",
+    "id": "removeMembership",
+    "method": "DELETE",
+    "url": "/teams/{team_id}/memberships/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List team projects",
+    "scope": "teams",
+    "id": "listProjects",
+    "method": "GET",
+    "url": "/teams/{team_id}/projects",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Review a team project",
+    "scope": "teams",
+    "id": "reviewProject",
+    "method": "GET",
+    "url": "/teams/{team_id}/projects/{project_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add or update team project",
+    "scope": "teams",
+    "id": "addOrUpdateProject",
+    "method": "PUT",
+    "url": "/teams/{team_id}/projects/{project_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The permission to grant to the team for this project. Can be one of:  \n\\* `read` - team members can read, but not write to or administer this project.  \n\\* `write` - team members can read and write, but not administer this project.  \n\\* `admin` - team members can read, write and administer this project.  \nDefault: the team's `permission` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see \"[HTTP verbs](https://developer.github.com/v3/#http-verbs).\"  \n**Note**: If you pass the `hellcat-preview` media type, you can promote—but not demote—a `permission` attribute inherited from a parent team.",
+        "enum": ["read", "write", "admin"],
+        "name": "permission",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove team project",
+    "scope": "teams",
+    "id": "removeProject",
+    "method": "DELETE",
+    "url": "/teams/{team_id}/projects/{project_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "project_id parameter",
+        "enum": null,
+        "name": "project_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List team repos",
+    "scope": "teams",
+    "id": "listRepos",
+    "method": "GET",
+    "url": "/teams/{team_id}/repos",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if a team manages a repository",
+    "scope": "teams",
+    "id": "checkManagesRepo",
+    "method": "GET",
+    "url": "/teams/{team_id}/repos/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Add or update team repository",
+    "scope": "teams",
+    "id": "addOrUpdateRepo",
+    "method": "PUT",
+    "url": "/teams/{team_id}/repos/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The permission to grant the team on this repository. Can be one of:  \n\\* `pull` - team members can pull, but not push to or administer this repository.  \n\\* `push` - team members can pull and push, but not administer this repository.  \n\\* `admin` - team members can pull, push and administer this repository.  \n  \nIf no permission is specified, the team's `permission` attribute will be used to determine what permission to grant the team on this repository.  \n**Note**: If you pass the `hellcat-preview` media type, you can promote—but not demote—a `permission` attribute inherited through a parent team.",
+        "enum": ["pull", "push", "admin"],
+        "name": "permission",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Remove team repository",
+    "scope": "teams",
+    "id": "removeRepo",
+    "method": "DELETE",
+    "url": "/teams/{team_id}/repos/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List IdP groups for a team",
+    "scope": "teams",
+    "id": "listIdPGroups",
+    "method": "GET",
+    "url": "/teams/{team_id}/team-sync/group-mappings",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Create or update IdP group connections",
+    "scope": "teams",
+    "id": "createOrUpdateIdPGroupConnections",
+    "method": "PATCH",
+    "url": "/teams/{team_id}/team-sync/group-mappings",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The IdP groups you want to connect to a GitHub team. When updating, the new `groups` object will replace the original one. You must include any existing groups that you don't want to remove.",
+        "enum": null,
+        "name": "groups",
+        "type": "object[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "ID of the IdP group.",
+        "enum": null,
+        "name": "groups[].group_id",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Name of the IdP group.",
+        "enum": null,
+        "name": "groups[].group_name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Description of the IdP group.",
+        "enum": null,
+        "name": "groups[].group_description",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List child teams",
+    "scope": "teams",
+    "id": "listChild",
+    "method": "GET",
+    "url": "/teams/{team_id}/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "team_id parameter",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get the authenticated user",
+    "scope": "users",
+    "id": "getAuthenticated",
+    "method": "GET",
+    "url": "/user",
+    "parameters": []
+  },
+  {
+    "name": "Update the authenticated user",
+    "scope": "users",
+    "id": "updateAuthenticated",
+    "method": "PATCH",
+    "url": "/user",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new name of the user.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The publicly visible email address of the user.",
+        "enum": null,
+        "name": "email",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new blog URL of the user.",
+        "enum": null,
+        "name": "blog",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new company of the user.",
+        "enum": null,
+        "name": "company",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new location of the user.",
+        "enum": null,
+        "name": "location",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new hiring availability of the user.",
+        "enum": null,
+        "name": "hireable",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The new short biography of the user.",
+        "enum": null,
+        "name": "bio",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List blocked users",
+    "scope": "users",
+    "id": "listBlocked",
+    "method": "GET",
+    "url": "/user/blocks",
+    "parameters": []
+  },
+  {
+    "name": "Check whether you've blocked a user",
+    "scope": "users",
+    "id": "checkBlocked",
+    "method": "GET",
+    "url": "/user/blocks/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Block a user",
+    "scope": "users",
+    "id": "block",
+    "method": "PUT",
+    "url": "/user/blocks/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Unblock a user",
+    "scope": "users",
+    "id": "unblock",
+    "method": "DELETE",
+    "url": "/user/blocks/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Toggle primary email visibility",
+    "scope": "users",
+    "id": "togglePrimaryEmailVisibility",
+    "method": "PATCH",
+    "url": "/user/email/visibility",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Specify the _primary_ email address that needs a visibility change.",
+        "enum": null,
+        "name": "email",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Use `public` to enable an authenticated user to view the specified email address, or use `private` so this primary email address cannot be seen publicly.",
+        "enum": null,
+        "name": "visibility",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List email addresses for a user",
+    "scope": "users",
+    "id": "listEmails",
+    "method": "GET",
+    "url": "/user/emails",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Add email address(es)",
+    "scope": "users",
+    "id": "addEmails",
+    "method": "POST",
+    "url": "/user/emails",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Adds one or more email addresses to your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an `array` of emails addresses directly, but we recommend that you pass an object using the `emails` key.",
+        "enum": null,
+        "name": "emails",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete email address(es)",
+    "scope": "users",
+    "id": "deleteEmails",
+    "method": "DELETE",
+    "url": "/user/emails",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Deletes one or more email addresses from your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an `array` of emails addresses directly, but we recommend that you pass an object using the `emails` key.",
+        "enum": null,
+        "name": "emails",
+        "type": "string[]",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List the authenticated user's followers",
+    "scope": "users",
+    "id": "listFollowersForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/followers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List who the authenticated user is following",
+    "scope": "users",
+    "id": "listFollowingForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/following",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if you are following a user",
+    "scope": "users",
+    "id": "checkFollowing",
+    "method": "GET",
+    "url": "/user/following/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Follow a user",
+    "scope": "users",
+    "id": "follow",
+    "method": "PUT",
+    "url": "/user/following/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Unfollow a user",
+    "scope": "users",
+    "id": "unfollow",
+    "method": "DELETE",
+    "url": "/user/following/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List your GPG keys",
+    "scope": "users",
+    "id": "listGpgKeys",
+    "method": "GET",
+    "url": "/user/gpg_keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a GPG key",
+    "scope": "users",
+    "id": "createGpgKey",
+    "method": "POST",
+    "url": "/user/gpg_keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Your GPG key, generated in ASCII-armored format. See \"[Generating a new GPG key](https://help.github.com/articles/generating-a-new-gpg-key/)\" for help creating a GPG key.",
+        "enum": null,
+        "name": "armored_public_key",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single GPG key",
+    "scope": "users",
+    "id": "getGpgKey",
+    "method": "GET",
+    "url": "/user/gpg_keys/{gpg_key_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gpg_key_id parameter",
+        "enum": null,
+        "name": "gpg_key_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a GPG key",
+    "scope": "users",
+    "id": "deleteGpgKey",
+    "method": "DELETE",
+    "url": "/user/gpg_keys/{gpg_key_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "gpg_key_id parameter",
+        "enum": null,
+        "name": "gpg_key_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List installations for a user",
+    "scope": "apps",
+    "id": "listInstallationsForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/installations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List repositories accessible to the user for an installation",
+    "scope": "apps",
+    "id": "listInstallationReposForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/installations/{installation_id}/repositories",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "installation_id parameter",
+        "enum": null,
+        "name": "installation_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Add repository to installation",
+    "scope": "apps",
+    "id": "addRepoToInstallation",
+    "method": "PUT",
+    "url": "/user/installations/{installation_id}/repositories/{repository_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "installation_id parameter",
+        "enum": null,
+        "name": "installation_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repository_id parameter",
+        "enum": null,
+        "name": "repository_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Remove repository from installation",
+    "scope": "apps",
+    "id": "removeRepoFromInstallation",
+    "method": "DELETE",
+    "url": "/user/installations/{installation_id}/repositories/{repository_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "installation_id parameter",
+        "enum": null,
+        "name": "installation_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repository_id parameter",
+        "enum": null,
+        "name": "repository_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List all issues across owned and member repositories assigned to the authenticated user",
+    "scope": "issues",
+    "id": "listForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/issues",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates which sorts of issues to return. Can be one of:  \n\\* `assigned`: Issues assigned to you  \n\\* `created`: Issues created by you  \n\\* `mentioned`: Issues mentioning you  \n\\* `subscribed`: Issues you're subscribed to updates for  \n\\* `all`: All issues the authenticated user can see, regardless of participation or creation",
+        "enum": ["assigned", "created", "mentioned", "subscribed", "all"],
+        "name": "filter",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A list of comma separated label names. Example: `bug,ui,@high`",
+        "enum": null,
+        "name": "labels",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "What to sort results by. Can be either `created`, `updated`, `comments`.",
+        "enum": ["created", "updated", "comments"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The direction of the sort. Can be either `asc` or `desc`.",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List your public keys",
+    "scope": "users",
+    "id": "listPublicKeys",
+    "method": "GET",
+    "url": "/user/keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a public key",
+    "scope": "users",
+    "id": "createPublicKey",
+    "method": "POST",
+    "url": "/user/keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A descriptive name for the new key. Use a name that will help you recognize this key in your GitHub account. For example, if you're using a personal Mac, you might call this key \"Personal MacBook Air\".",
+        "enum": null,
+        "name": "title",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The public SSH key to add to your GitHub account. See \"[Generating a new SSH key](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)\" for guidance on how to create a public SSH key.",
+        "enum": null,
+        "name": "key",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single public key",
+    "scope": "users",
+    "id": "getPublicKey",
+    "method": "GET",
+    "url": "/user/keys/{key_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "key_id parameter",
+        "enum": null,
+        "name": "key_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a public key",
+    "scope": "users",
+    "id": "deletePublicKey",
+    "method": "DELETE",
+    "url": "/user/keys/{key_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "key_id parameter",
+        "enum": null,
+        "name": "key_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a user's Marketplace purchases",
+    "scope": "apps",
+    "id": "listMarketplacePurchasesForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/marketplace_purchases",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a user's Marketplace purchases (stubbed)",
+    "scope": "apps",
+    "id": "listMarketplacePurchasesForAuthenticatedUserStubbed",
+    "method": "GET",
+    "url": "/user/marketplace_purchases/stubbed",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List your organization memberships",
+    "scope": "orgs",
+    "id": "listMemberships",
+    "method": "GET",
+    "url": "/user/memberships/orgs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the memberships to return. Can be either `active` or `pending`. If not specified, the API returns both active and pending memberships.",
+        "enum": ["active", "pending"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get your organization membership",
+    "scope": "orgs",
+    "id": "getMembershipForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/memberships/orgs/{org}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Edit your organization membership",
+    "scope": "orgs",
+    "id": "updateMembership",
+    "method": "PATCH",
+    "url": "/user/memberships/orgs/{org}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The state that the membership should be in. Only `\"active\"` will be accepted.",
+        "enum": ["active"],
+        "name": "state",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Start a user migration",
+    "scope": "migrations",
+    "id": "startForAuthenticatedUser",
+    "method": "POST",
+    "url": "/user/migrations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "An array of repositories to include in the migration.",
+        "enum": null,
+        "name": "repositories",
+        "type": "string[]",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Locks the `repositories` to prevent changes during the migration when set to `true`.",
+        "enum": null,
+        "name": "lock_repositories",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Does not include attachments uploaded to GitHub.com in the migration data when set to `true`. Excluding attachments will reduce the migration archive file size.",
+        "enum": null,
+        "name": "exclude_attachments",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a list of user migrations",
+    "scope": "migrations",
+    "id": "listForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/migrations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get the status of a user migration",
+    "scope": "migrations",
+    "id": "getStatusForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/migrations/{migration_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Download a user migration archive",
+    "scope": "migrations",
+    "id": "getArchiveForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/migrations/{migration_id}/archive",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Delete a user migration archive",
+    "scope": "migrations",
+    "id": "deleteArchiveForAuthenticatedUser",
+    "method": "DELETE",
+    "url": "/user/migrations/{migration_id}/archive",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Unlock a user repository",
+    "scope": "migrations",
+    "id": "unlockRepoForAuthenticatedUser",
+    "method": "DELETE",
+    "url": "/user/migrations/{migration_id}/repos/{repo_name}/lock",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "migration_id parameter",
+        "enum": null,
+        "name": "migration_id",
+        "type": "integer",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo_name parameter",
+        "enum": null,
+        "name": "repo_name",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List your organizations",
+    "scope": "orgs",
+    "id": "listForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/orgs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Create a user project",
+    "scope": "projects",
+    "id": "createForAuthenticatedUser",
+    "method": "POST",
+    "url": "/user/projects",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the project.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The description of the project.",
+        "enum": null,
+        "name": "body",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List public email addresses for a user",
+    "scope": "users",
+    "id": "listPublicEmails",
+    "method": "GET",
+    "url": "/user/public_emails",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List your repositories",
+    "scope": "repos",
+    "id": "list",
+    "method": "GET",
+    "url": "/user/repos",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `all`, `public`, or `private`.",
+        "enum": ["all", "public", "private"],
+        "name": "visibility",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Comma-separated list of values. Can include:  \n\\* `owner`: Repositories that are owned by the authenticated user.  \n\\* `collaborator`: Repositories that the user has been added to as a collaborator.  \n\\* `organization_member`: Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on.",
+        "enum": null,
+        "name": "affiliation",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `all`, `owner`, `public`, `private`, `member`. Default: `all`  \n  \nWill cause a `422` error if used in the same request as **visibility** or **affiliation**. Will cause a `422` error if used in the same request as **visibility** or **affiliation**.",
+        "enum": ["all", "owner", "public", "private", "member"],
+        "name": "type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `created`, `updated`, `pushed`, `full_name`.",
+        "enum": ["created", "updated", "pushed", "full_name"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc`",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Creates a new repository for the authenticated user",
+    "scope": "repos",
+    "id": "createForAuthenticatedUser",
+    "method": "POST",
+    "url": "/user/repos",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The name of the repository.",
+        "enum": null,
+        "name": "name",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A short description of the repository.",
+        "enum": null,
+        "name": "description",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "A URL with more information about the repository.",
+        "enum": null,
+        "name": "homepage",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to create a private repository or `false` to create a public one. Creating private repositories requires a paid GitHub account.",
+        "enum": null,
+        "name": "private",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable issues for this repository or `false` to disable them.",
+        "enum": null,
+        "name": "has_issues",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.",
+        "enum": null,
+        "name": "has_projects",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to enable the wiki for this repository or `false` to disable it.",
+        "enum": null,
+        "name": "has_wiki",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to make this repo available as a template repository or `false` to prevent it.",
+        "enum": null,
+        "name": "is_template",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization.",
+        "enum": null,
+        "name": "team_id",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Pass `true` to create an initial commit with empty README.",
+        "enum": null,
+        "name": "auto_init",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, \"Haskell\".",
+        "enum": null,
+        "name": "gitignore_template",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the `license_template` string. For example, \"mit\" or \"mpl-2.0\".",
+        "enum": null,
+        "name": "license_template",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.",
+        "enum": null,
+        "name": "allow_squash_merge",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.",
+        "enum": null,
+        "name": "allow_merge_commit",
+        "type": "boolean",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.",
+        "enum": null,
+        "name": "allow_rebase_merge",
+        "type": "boolean",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List a user's repository invitations",
+    "scope": "repos",
+    "id": "listInvitationsForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/repository_invitations",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Accept a repository invitation",
+    "scope": "repos",
+    "id": "acceptInvitation",
+    "method": "PATCH",
+    "url": "/user/repository_invitations/{invitation_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "invitation_id parameter",
+        "enum": null,
+        "name": "invitation_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Decline a repository invitation",
+    "scope": "repos",
+    "id": "declineInvitation",
+    "method": "DELETE",
+    "url": "/user/repository_invitations/{invitation_id}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "invitation_id parameter",
+        "enum": null,
+        "name": "invitation_id",
+        "type": "integer",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List repositories being starred by the authenticated user",
+    "scope": "activity",
+    "id": "listReposStarredByAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/starred",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "One of `created` (when the repository was starred) or `updated` (when it was last pushed to).",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "One of `asc` (ascending) or `desc` (descending).",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if you are starring a repository",
+    "scope": "activity",
+    "id": "checkStarringRepo",
+    "method": "GET",
+    "url": "/user/starred/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Star a repository",
+    "scope": "activity",
+    "id": "starRepo",
+    "method": "PUT",
+    "url": "/user/starred/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Unstar a repository",
+    "scope": "activity",
+    "id": "unstarRepo",
+    "method": "DELETE",
+    "url": "/user/starred/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List repositories being watched by the authenticated user",
+    "scope": "activity",
+    "id": "listWatchedReposForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/subscriptions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if you are watching a repository (LEGACY)",
+    "scope": "activity",
+    "id": "checkWatchingRepoLegacy",
+    "method": "GET",
+    "url": "/user/subscriptions/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Watch a repository (LEGACY)",
+    "scope": "activity",
+    "id": "watchRepoLegacy",
+    "method": "PUT",
+    "url": "/user/subscriptions/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Stop watching a repository (LEGACY)",
+    "scope": "activity",
+    "id": "stopWatchingRepoLegacy",
+    "method": "DELETE",
+    "url": "/user/subscriptions/{owner}/{repo}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "owner parameter",
+        "enum": null,
+        "name": "owner",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "repo parameter",
+        "enum": null,
+        "name": "repo",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List user teams",
+    "scope": "teams",
+    "id": "listForAuthenticatedUser",
+    "method": "GET",
+    "url": "/user/teams",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get all users",
+    "scope": "users",
+    "id": "list",
+    "method": "GET",
+    "url": "/users",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "The integer ID of the last User that you've seen.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a single user",
+    "scope": "users",
+    "id": "getByUsername",
+    "method": "GET",
+    "url": "/users/{username}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List events performed by a user",
+    "scope": "activity",
+    "id": "listEventsForUser",
+    "method": "GET",
+    "url": "/users/{username}/events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List events for an organization",
+    "scope": "activity",
+    "id": "listEventsForOrg",
+    "method": "GET",
+    "url": "/users/{username}/events/orgs/{org}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "org parameter",
+        "enum": null,
+        "name": "org",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List public events performed by a user",
+    "scope": "activity",
+    "id": "listPublicEventsForUser",
+    "method": "GET",
+    "url": "/users/{username}/events/public",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List a user's followers",
+    "scope": "users",
+    "id": "listFollowersForUser",
+    "method": "GET",
+    "url": "/users/{username}/followers",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List who a user is following",
+    "scope": "users",
+    "id": "listFollowingForUser",
+    "method": "GET",
+    "url": "/users/{username}/following",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Check if one user follows another",
+    "scope": "users",
+    "id": "checkFollowingForUser",
+    "method": "GET",
+    "url": "/users/{username}/following/{target_user}",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "target_user parameter",
+        "enum": null,
+        "name": "target_user",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List public gists for the specified user",
+    "scope": "gists",
+    "id": "listPublicForUser",
+    "method": "GET",
+    "url": "/users/{username}/gists",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.",
+        "enum": null,
+        "name": "since",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List GPG keys for a user",
+    "scope": "users",
+    "id": "listGpgKeysForUser",
+    "method": "GET",
+    "url": "/users/{username}/gpg_keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get contextual information about a user",
+    "scope": "users",
+    "id": "getContextForUser",
+    "method": "GET",
+    "url": "/users/{username}/hovercard",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Identifies which additional information you'd like to receive about the person's hovercard. Can be `organization`, `repository`, `issue`, `pull_request`. **Required** when using `subject_id`.",
+        "enum": ["organization", "repository", "issue", "pull_request"],
+        "name": "subject_type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Uses the ID for the `subject_type` you specified. **Required** when using `subject_type`.",
+        "enum": null,
+        "name": "subject_id",
+        "type": "string",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "Get a user installation",
+    "scope": "apps",
+    "id": "getUserInstallation",
+    "method": "GET",
+    "url": "/users/{username}/installation",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "Get a user installation",
+    "scope": "apps",
+    "id": "findUserInstallation",
+    "method": "GET",
+    "url": "/users/{username}/installation",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      }
+    ]
+  },
+  {
+    "name": "List public keys for a user",
+    "scope": "users",
+    "id": "listPublicKeysForUser",
+    "method": "GET",
+    "url": "/users/{username}/keys",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List user organizations",
+    "scope": "orgs",
+    "id": "listForUser",
+    "method": "GET",
+    "url": "/users/{username}/orgs",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List user projects",
+    "scope": "projects",
+    "id": "listForUser",
+    "method": "GET",
+    "url": "/users/{username}/projects",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.",
+        "enum": ["open", "closed", "all"],
+        "name": "state",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List events that a user has received",
+    "scope": "activity",
+    "id": "listReceivedEventsForUser",
+    "method": "GET",
+    "url": "/users/{username}/received_events",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List public events that a user has received",
+    "scope": "activity",
+    "id": "listReceivedPublicEventsForUser",
+    "method": "GET",
+    "url": "/users/{username}/received_events/public",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List user repositories",
+    "scope": "repos",
+    "id": "listForUser",
+    "method": "GET",
+    "url": "/users/{username}/repos",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `all`, `owner`, `member`.",
+        "enum": ["all", "owner", "member"],
+        "name": "type",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `created`, `updated`, `pushed`, `full_name`.",
+        "enum": ["created", "updated", "pushed", "full_name"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc`",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List repositories being starred by a user",
+    "scope": "activity",
+    "id": "listReposStarredByUser",
+    "method": "GET",
+    "url": "/users/{username}/starred",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "One of `created` (when the repository was starred) or `updated` (when it was last pushed to).",
+        "enum": ["created", "updated"],
+        "name": "sort",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "One of `asc` (ascending) or `desc` (descending).",
+        "enum": ["asc", "desc"],
+        "name": "direction",
+        "type": "string",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  },
+  {
+    "name": "List repositories being watched by a user",
+    "scope": "activity",
+    "id": "listReposWatchedByUser",
+    "method": "GET",
+    "url": "/users/{username}/subscriptions",
+    "parameters": [
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "username parameter",
+        "enum": null,
+        "name": "username",
+        "type": "string",
+        "required": true
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Results per page (max 100)",
+        "enum": null,
+        "name": "per_page",
+        "type": "integer",
+        "required": false
+      },
+      {
+        "alias": null,
+        "allowNull": false,
+        "deprecated": null,
+        "description": "Page number of the results to fetch.",
+        "enum": null,
+        "name": "page",
+        "type": "integer",
+        "required": false
+      }
+    ]
+  }
+]
diff --git a/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/templates/endpoints.ts.template b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/templates/endpoints.ts.template
new file mode 100644
index 0000000..2eceb2f
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/templates/endpoints.ts.template
@@ -0,0 +1,33 @@
+// DO NOT EDIT THIS FILE
+import { RequestHeaders } from "../RequestHeaders";
+import { RequestRequestOptions } from "../RequestRequestOptions";
+import { Url } from "../Url";
+
+export interface Endpoints {
+  {{#each endpointsByRoute}}
+  "{{@key}}": [{{union this "optionsTypeName"}}, {{union this "requestOptionsTypeName"}}]
+  {{/each}}
+}
+
+{{#each options}}
+type {{in.name}} = {
+{{#each in.parameters}}
+  {{&jsdoc}}
+  {{{name this}}}: {{{type this}}}
+{{/each}}
+}
+type {{out.name}} = {
+  method: "{{out.method}}",
+  url: Url,
+  headers: RequestHeaders,
+  request: RequestRequestOptions
+}
+{{/each}}
+
+{{#childParams}}
+export type {{paramTypeName}} = {
+{{#params}}
+  {{{name this}}}: {{{type this}}}
+{{/params}}
+};
+{{/childParams}}
\ No newline at end of file
diff --git a/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/typescript.js b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/typescript.js
new file mode 100644
index 0000000..2095c6c
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/scripts/update-endpoints/typescript.js
@@ -0,0 +1,179 @@
+const { readFileSync, writeFileSync } = require("fs");
+const { resolve } = require("path");
+
+const Handlebars = require("handlebars");
+const set = require("lodash.set");
+const pascalCase = require("pascal-case");
+const prettier = require("prettier");
+const { stringToJsdocComment } = require("string-to-jsdoc-comment");
+const sortKeys = require("sort-keys");
+
+const ENDPOINTS = require("./generated/Endpoints.json");
+const ENDPOINTS_PATH = resolve(
+  process.cwd(),
+  "src",
+  "generated",
+  "Endpoints.ts"
+);
+const ENDPOINTS_TEMPLATE_PATH = resolve(
+  process.cwd(),
+  "scripts",
+  "update-endpoints",
+  "templates",
+  "endpoints.ts.template"
+);
+
+Handlebars.registerHelper("union", function(endpoints, key) {
+  return endpoints.map(endpoint => endpoint[key]).join(" | ");
+});
+Handlebars.registerHelper("name", function(parameter) {
+  let name = parameter.key;
+
+  if (/[.\[]/.test(name)) {
+    name = `"${name}"`;
+  }
+
+  if (parameter.required) {
+    return name;
+  }
+
+  return `${name}?`;
+});
+
+Handlebars.registerHelper("type", function(parameter) {
+  const type = typeMap[parameter.type] || parameter.type;
+
+  if (parameter.allowNull) {
+    return `${type} | null`;
+  }
+
+  return type;
+});
+const template = Handlebars.compile(
+  readFileSync(ENDPOINTS_TEMPLATE_PATH, "utf8")
+);
+
+const endpointsByRoute = {};
+
+const typeMap = {
+  integer: "number",
+  "integer[]": "number[]"
+};
+
+for (const endpoint of ENDPOINTS) {
+  const route = `${endpoint.method} ${endpoint.url.replace(
+    /\{([^}]+)}/g,
+    ":$1"
+  )}`;
+
+  if (!endpointsByRoute[route]) {
+    endpointsByRoute[route] = [];
+  }
+
+  endpointsByRoute[route].push({
+    optionsTypeName:
+      pascalCase(`${endpoint.scope} ${endpoint.id}`) + "Endpoint",
+    requestOptionsTypeName:
+      pascalCase(`${endpoint.scope} ${endpoint.id}`) + "RequestOptions"
+  });
+}
+
+const options = [];
+const childParams = {};
+
+for (const endpoint of ENDPOINTS) {
+  const { method, parameters } = endpoint;
+
+  const optionsTypeName =
+    pascalCase(`${endpoint.scope} ${endpoint.id}`) + "Endpoint";
+  const requestOptionsTypeName =
+    pascalCase(`${endpoint.scope} ${endpoint.id}`) + "RequestOptions";
+
+  options.push({
+    in: {
+      name: optionsTypeName,
+      parameters: parameters
+        .map(parameterize)
+        // handle "object" & "object[]" types
+        .map(parameter => {
+          if (parameter.deprecated) {
+            return;
+          }
+
+          const namespacedParamsName = pascalCase(
+            `${endpoint.scope}.${endpoint.id}.Params`
+          );
+
+          if (parameter.type === "object" || parameter.type === "object[]") {
+            const childParamsName = pascalCase(
+              `${namespacedParamsName}.${parameter.key}`
+            );
+
+            parameter.type = parameter.type.replace("object", childParamsName);
+
+            if (!childParams[childParamsName]) {
+              childParams[childParamsName] = {};
+            }
+          }
+
+          if (!/\./.test(parameter.key)) {
+            return parameter;
+          }
+
+          const childKey = parameter.key.split(".").pop();
+          const parentKey = parameter.key.replace(/\.[^.]+$/, "");
+
+          parameter.key = childKey;
+
+          const childParamsName = pascalCase(
+            `${namespacedParamsName}.${parentKey}`
+          );
+          set(childParams, `${childParamsName}.${childKey}`, parameter);
+        })
+        .filter(Boolean)
+    },
+    out: {
+      name: requestOptionsTypeName,
+      method
+    }
+  });
+}
+
+const result = template({
+  endpointsByRoute: sortKeys(endpointsByRoute, { deep: true }),
+  options,
+  childParams: Object.keys(childParams).map(key => {
+    if (key === "GistsCreateParamsFiles") {
+      debugger;
+    }
+    return {
+      paramTypeName: key,
+      params: Object.values(childParams[key])
+    };
+  })
+});
+
+writeFileSync(
+  ENDPOINTS_PATH,
+  prettier.format(result, { parser: "typescript" })
+);
+console.log(`${ENDPOINTS_PATH} updated.`);
+
+function parameterize(parameter) {
+  const key = parameter.name;
+  const type = typeMap[parameter.type] || parameter.type;
+  const enums = parameter.enum
+    ? parameter.enum.map(JSON.stringify).join("|")
+    : null;
+
+  return {
+    name: pascalCase(key),
+    key: key,
+    required: parameter.required,
+    type: enums || type,
+    alias: parameter.alias,
+    deprecated: parameter.deprecated,
+    allowNull: parameter.allowNull,
+    jsdoc: stringToJsdocComment(parameter.description)
+  };
+}
diff --git a/setup-maven/node_modules/@octokit/types/src/AuthInterface.ts b/setup-maven/node_modules/@octokit/types/src/AuthInterface.ts
new file mode 100644
index 0000000..8f58743
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/AuthInterface.ts
@@ -0,0 +1,43 @@
+import { EndpointOptions } from "./EndpointOptions";
+import { OctokitResponse } from "./OctokitResponse";
+import { RequestInterface } from "./RequestInterface";
+import { RequestParameters } from "./RequestParameters";
+import { Route } from "./Route";
+
+/**
+ * Interface to implement complex authentication strategies for Octokit.
+ * An object Implementing the AuthInterface can directly be passed as the
+ * `auth` option in the Octokit constructor.
+ *
+ * For the official implementations of the most common authentication
+ * strategies, see https://github.com/octokit/auth.js
+ */
+export interface AuthInterface<
+  AuthOptions extends any[],
+  Authentication extends any
+> {
+  (...args: AuthOptions): Promise<Authentication>;
+
+  hook: {
+    /**
+     * Sends a request using the passed `request` instance
+     *
+     * @param {object} endpoint Must set `method` and `url`. Plus URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+     */
+    <T = any>(request: RequestInterface, options: EndpointOptions): Promise<
+      OctokitResponse<T>
+    >;
+
+    /**
+     * Sends a request using the passed `request` instance
+     *
+     * @param {string} route Request method + URL. Example: `'GET /orgs/:org'`
+     * @param {object} [parameters] URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+     */
+    <T = any>(
+      request: RequestInterface,
+      route: Route,
+      parameters?: RequestParameters
+    ): Promise<OctokitResponse<T>>;
+  };
+}
diff --git a/setup-maven/node_modules/@octokit/types/src/EndpointDefaults.ts b/setup-maven/node_modules/@octokit/types/src/EndpointDefaults.ts
new file mode 100644
index 0000000..024f6eb
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/EndpointDefaults.ts
@@ -0,0 +1,22 @@
+import { RequestHeaders } from "./RequestHeaders";
+import { RequestMethod } from "./RequestMethod";
+import { RequestParameters } from "./RequestParameters";
+import { Url } from "./Url";
+
+/**
+ * The `.endpoint()` method is guaranteed to set all keys defined by RequestParameters
+ * as well as the method property.
+ */
+export type EndpointDefaults = RequestParameters & {
+  baseUrl: Url;
+  method: RequestMethod;
+  url?: Url;
+  headers: RequestHeaders & {
+    accept: string;
+    "user-agent": string;
+  };
+  mediaType: {
+    format: string;
+    previews: string[];
+  };
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/EndpointInterface.ts b/setup-maven/node_modules/@octokit/types/src/EndpointInterface.ts
new file mode 100644
index 0000000..fee78d6
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/EndpointInterface.ts
@@ -0,0 +1,74 @@
+import { EndpointDefaults } from "./EndpointDefaults";
+import { EndpointOptions } from "./EndpointOptions";
+import { RequestOptions } from "./RequestOptions";
+import { RequestParameters } from "./RequestParameters";
+import { Route } from "./Route";
+
+import { Endpoints } from "./generated/Endpoints";
+
+export interface EndpointInterface {
+  /**
+   * Transforms a GitHub REST API endpoint into generic request options
+   *
+   * @param {object} endpoint Must set `method` and `url`. Plus URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+   */
+  (options: EndpointOptions): RequestOptions;
+
+  /**
+   * Transforms a GitHub REST API endpoint into generic request options
+   *
+   * @param {string} route Request method + URL. Example: `'GET /orgs/:org'`
+   * @param {object} [parameters] URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+   */
+  <R extends Route>(
+    route: keyof Endpoints | R,
+    options?: R extends keyof Endpoints
+      ? Endpoints[R][0] & RequestParameters
+      : RequestParameters
+  ): R extends keyof Endpoints ? Endpoints[R][1] : RequestOptions;
+
+  /**
+   * Object with current default route and parameters
+   */
+  DEFAULTS: EndpointDefaults;
+
+  /**
+   * Returns a new `endpoint` with updated route and parameters
+   */
+  defaults: (newDefaults: RequestParameters) => EndpointInterface;
+
+  merge: {
+    /**
+     * Merges current endpoint defaults with passed route and parameters,
+     * without transforming them into request options.
+     *
+     * @param {string} route Request method + URL. Example: `'GET /orgs/:org'`
+     * @param {object} [parameters] URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+     *
+     */
+    (route: Route, parameters?: RequestParameters): EndpointDefaults;
+
+    /**
+     * Merges current endpoint defaults with passed route and parameters,
+     * without transforming them into request options.
+     *
+     * @param {object} endpoint Must set `method` and `url`. Plus URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+     */
+    (options: RequestParameters): EndpointDefaults;
+
+    /**
+     * Returns current default options.
+     *
+     * @deprecated use endpoint.DEFAULTS instead
+     */
+    (): EndpointDefaults;
+  };
+
+  /**
+   * Stateless method to turn endpoint options into request options.
+   * Calling `endpoint(options)` is the same as calling `endpoint.parse(endpoint.merge(options))`.
+   *
+   * @param {object} options `method`, `url`. Plus URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+   */
+  parse: (options: EndpointDefaults) => RequestOptions;
+}
diff --git a/setup-maven/node_modules/@octokit/types/src/EndpointOptions.ts b/setup-maven/node_modules/@octokit/types/src/EndpointOptions.ts
new file mode 100644
index 0000000..0170604
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/EndpointOptions.ts
@@ -0,0 +1,8 @@
+import { RequestMethod } from "./RequestMethod";
+import { Url } from "./Url";
+import { RequestParameters } from "./RequestParameters";
+
+export type EndpointOptions = RequestParameters & {
+  method: RequestMethod;
+  url: Url;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/Fetch.ts b/setup-maven/node_modules/@octokit/types/src/Fetch.ts
new file mode 100644
index 0000000..983c79b
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/Fetch.ts
@@ -0,0 +1,4 @@
+/**
+ * Browser's fetch method (or compatible such as fetch-mock)
+ */
+export type Fetch = any;
diff --git a/setup-maven/node_modules/@octokit/types/src/OctokitResponse.ts b/setup-maven/node_modules/@octokit/types/src/OctokitResponse.ts
new file mode 100644
index 0000000..4cec20d
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/OctokitResponse.ts
@@ -0,0 +1,18 @@
+import { ResponseHeaders } from "./ResponseHeaders";
+import { Url } from "./Url";
+
+export type OctokitResponse<T> = {
+  headers: ResponseHeaders;
+  /**
+   * http response code
+   */
+  status: number;
+  /**
+   * URL of response after all redirects
+   */
+  url: Url;
+  /**
+   *  This is the data you would see in https://developer.Octokit.com/v3/
+   */
+  data: T;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/RequestHeaders.ts b/setup-maven/node_modules/@octokit/types/src/RequestHeaders.ts
new file mode 100644
index 0000000..0df6636
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/RequestHeaders.ts
@@ -0,0 +1,15 @@
+export type RequestHeaders = {
+  /**
+   * Avoid setting `headers.accept`, use `mediaType.{format|previews}` option instead.
+   */
+  accept?: string;
+  /**
+   * Use `authorization` to send authenticated request, remember `token ` / `bearer ` prefixes. Example: `token 1234567890abcdef1234567890abcdef12345678`
+   */
+  authorization?: string;
+  /**
+   * `user-agent` is set do a default and can be overwritten as needed.
+   */
+  "user-agent"?: string;
+  [header: string]: string | number | undefined;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/RequestInterface.ts b/setup-maven/node_modules/@octokit/types/src/RequestInterface.ts
new file mode 100644
index 0000000..bc4c74f
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/RequestInterface.ts
@@ -0,0 +1,34 @@
+import { EndpointInterface } from "./EndpointInterface";
+import { EndpointOptions } from "./EndpointOptions";
+import { OctokitResponse } from "./OctokitResponse";
+import { RequestParameters } from "./RequestParameters";
+import { Route } from "./Route";
+
+export interface RequestInterface {
+  /**
+   * Sends a request based on endpoint options
+   *
+   * @param {object} endpoint Must set `method` and `url`. Plus URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+   */
+  <T = any>(options: EndpointOptions): Promise<OctokitResponse<T>>;
+
+  /**
+   * Sends a request based on endpoint options
+   *
+   * @param {string} route Request method + URL. Example: `'GET /orgs/:org'`
+   * @param {object} [parameters] URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
+   */
+  <T = any>(route: Route, parameters?: RequestParameters): Promise<
+    OctokitResponse<T>
+  >;
+
+  /**
+   * Returns a new `endpoint` with updated route and parameters
+   */
+  defaults: (newDefaults: RequestParameters) => RequestInterface;
+
+  /**
+   * Octokit endpoint API, see {@link https://github.com/octokit/endpoint.js|@octokit/endpoint}
+   */
+  endpoint: EndpointInterface;
+}
diff --git a/setup-maven/node_modules/@octokit/types/src/RequestMethod.ts b/setup-maven/node_modules/@octokit/types/src/RequestMethod.ts
new file mode 100644
index 0000000..2910435
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/RequestMethod.ts
@@ -0,0 +1,10 @@
+/**
+ * HTTP Verb supported by GitHub's REST API
+ */
+export type RequestMethod =
+  | "DELETE"
+  | "GET"
+  | "HEAD"
+  | "PATCH"
+  | "POST"
+  | "PUT";
diff --git a/setup-maven/node_modules/@octokit/types/src/RequestOptions.ts b/setup-maven/node_modules/@octokit/types/src/RequestOptions.ts
new file mode 100644
index 0000000..4d765c0
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/RequestOptions.ts
@@ -0,0 +1,15 @@
+import { RequestHeaders } from "./RequestHeaders";
+import { RequestMethod } from "./RequestMethod";
+import { RequestRequestOptions } from "./RequestRequestOptions";
+import { Url } from "./Url";
+
+/**
+ * Generic request options as they are returned by the `endpoint()` method
+ */
+export type RequestOptions = {
+  method: RequestMethod;
+  url: Url;
+  headers: RequestHeaders;
+  body?: any;
+  request?: RequestRequestOptions;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/RequestParameters.ts b/setup-maven/node_modules/@octokit/types/src/RequestParameters.ts
new file mode 100644
index 0000000..9766be0
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/RequestParameters.ts
@@ -0,0 +1,46 @@
+import { RequestRequestOptions } from "./RequestRequestOptions";
+import { RequestHeaders } from "./RequestHeaders";
+import { Url } from "./Url";
+
+/**
+ * Parameters that can be passed into `request(route, parameters)` or `endpoint(route, parameters)` methods
+ */
+export type RequestParameters = {
+  /**
+   * Base URL to be used when a relative URL is passed, such as `/orgs/:org`.
+   * If `baseUrl` is `https://enterprise.acme-inc.com/api/v3`, then the request
+   * will be sent to `https://enterprise.acme-inc.com/api/v3/orgs/:org`.
+   */
+  baseUrl?: Url;
+  /**
+   * HTTP headers. Use lowercase keys.
+   */
+  headers?: RequestHeaders;
+  /**
+   * Media type options, see {@link https://developer.github.com/v3/media/|GitHub Developer Guide}
+   */
+  mediaType?: {
+    /**
+     * `json` by default. Can be `raw`, `text`, `html`, `full`, `diff`, `patch`, `sha`, `base64`. Depending on endpoint
+     */
+    format?: string;
+    /**
+     * Custom media type names of {@link https://developer.github.com/v3/media/|API Previews} without the `-preview` suffix.
+     * Example for single preview: `['squirrel-girl']`.
+     * Example for multiple previews: `['squirrel-girl', 'mister-fantastic']`.
+     */
+    previews?: string[];
+  };
+  /**
+   * Pass custom meta information for the request. The `request` object will be returned as is.
+   */
+  request?: RequestRequestOptions;
+  /**
+   * Any additional parameter will be passed as follows
+   * 1. URL parameter if `':parameter'` or `{parameter}` is part of `url`
+   * 2. Query parameter if `method` is `'GET'` or `'HEAD'`
+   * 3. Request body if `parameter` is `'data'`
+   * 4. JSON in the request body in the form of `body[parameter]` unless `parameter` key is `'data'`
+   */
+  [parameter: string]: any;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/RequestRequestOptions.ts b/setup-maven/node_modules/@octokit/types/src/RequestRequestOptions.ts
new file mode 100644
index 0000000..028d6f7
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/RequestRequestOptions.ts
@@ -0,0 +1,27 @@
+import { Agent } from "http";
+import { Fetch } from "./Fetch";
+import { Signal } from "./Signal";
+
+/**
+ * Octokit-specific request options which are ignored for the actual request, but can be used by Octokit or plugins to manipulate how the request is sent or how a response is handled
+ */
+export type RequestRequestOptions = {
+  /**
+   * Node only. Useful for custom proxy, certificate, or dns lookup.
+   */
+  agent?: Agent;
+  /**
+   * Custom replacement for built-in fetch method. Useful for testing or request hooks.
+   */
+  fetch?: Fetch;
+  /**
+   * Use an `AbortController` instance to cancel a request. In node you can only cancel streamed requests.
+   */
+  signal?: Signal;
+  /**
+   * Node only. Request/response timeout in ms, it resets on redirect. 0 to disable (OS limit applies). `options.request.signal` is recommended instead.
+   */
+  timeout?: number;
+
+  [option: string]: any;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/ResponseHeaders.ts b/setup-maven/node_modules/@octokit/types/src/ResponseHeaders.ts
new file mode 100644
index 0000000..17267b6
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/ResponseHeaders.ts
@@ -0,0 +1,21 @@
+export type ResponseHeaders = {
+  "cache-control"?: string;
+  "content-length"?: number;
+  "content-type"?: string;
+  date?: string;
+  etag?: string;
+  "last-modified"?: string;
+  link?: string;
+  location?: string;
+  server?: string;
+  status?: string;
+  vary?: string;
+  "x-github-mediatype"?: string;
+  "x-github-request-id"?: string;
+  "x-oauth-scopes"?: string;
+  "x-ratelimit-limit"?: string;
+  "x-ratelimit-remaining"?: string;
+  "x-ratelimit-reset"?: string;
+
+  [header: string]: string | number | undefined;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/Route.ts b/setup-maven/node_modules/@octokit/types/src/Route.ts
new file mode 100644
index 0000000..c5229a8
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/Route.ts
@@ -0,0 +1,4 @@
+/**
+ * String consisting of an optional HTTP method and relative path or absolute URL. Examples: `'/orgs/:org'`, `'PUT /orgs/:org'`, `GET https://example.com/foo/bar`
+ */
+export type Route = string;
diff --git a/setup-maven/node_modules/@octokit/types/src/Signal.ts b/setup-maven/node_modules/@octokit/types/src/Signal.ts
new file mode 100644
index 0000000..bdf9700
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/Signal.ts
@@ -0,0 +1,6 @@
+/**
+ * Abort signal
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
+ */
+export type Signal = any;
diff --git a/setup-maven/node_modules/@octokit/types/src/StrategyInterface.ts b/setup-maven/node_modules/@octokit/types/src/StrategyInterface.ts
new file mode 100644
index 0000000..60a55ad
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/StrategyInterface.ts
@@ -0,0 +1,9 @@
+import { AuthInterface } from "./AuthInterface";
+
+export interface StrategyInterface<
+  StrategyOptions extends any[],
+  AuthOptions extends any[],
+  Authentication extends object
+> {
+  (...args: StrategyOptions): AuthInterface<AuthOptions, Authentication>;
+}
diff --git a/setup-maven/node_modules/@octokit/types/src/Url.ts b/setup-maven/node_modules/@octokit/types/src/Url.ts
new file mode 100644
index 0000000..9d228cb
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/Url.ts
@@ -0,0 +1,4 @@
+/**
+ * Relative or absolute URL. Examples: `'/orgs/:org'`, `https://example.com/foo/bar`
+ */
+export type Url = string;
diff --git a/setup-maven/node_modules/@octokit/types/src/VERSION.ts b/setup-maven/node_modules/@octokit/types/src/VERSION.ts
new file mode 100644
index 0000000..6c49faf
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/VERSION.ts
@@ -0,0 +1 @@
+export const VERSION = "2.0.2";
diff --git a/setup-maven/node_modules/@octokit/types/src/generated/Endpoints.ts b/setup-maven/node_modules/@octokit/types/src/generated/Endpoints.ts
new file mode 100644
index 0000000..3aec914
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/generated/Endpoints.ts
@@ -0,0 +1,14190 @@
+// DO NOT EDIT THIS FILE
+import { RequestHeaders } from "../RequestHeaders";
+import { RequestRequestOptions } from "../RequestRequestOptions";
+import { Url } from "../Url";
+
+export interface Endpoints {
+  "DELETE /app/installations/:installation_id": [
+    AppsDeleteInstallationEndpoint,
+    AppsDeleteInstallationRequestOptions
+  ];
+  "DELETE /applications/:client_id/grants/:access_token": [
+    OauthAuthorizationsRevokeGrantForApplicationEndpoint,
+    OauthAuthorizationsRevokeGrantForApplicationRequestOptions
+  ];
+  "DELETE /applications/:client_id/tokens/:access_token": [
+    OauthAuthorizationsRevokeAuthorizationForApplicationEndpoint,
+    OauthAuthorizationsRevokeAuthorizationForApplicationRequestOptions
+  ];
+  "DELETE /applications/grants/:grant_id": [
+    OauthAuthorizationsDeleteGrantEndpoint,
+    OauthAuthorizationsDeleteGrantRequestOptions
+  ];
+  "DELETE /authorizations/:authorization_id": [
+    OauthAuthorizationsDeleteAuthorizationEndpoint,
+    OauthAuthorizationsDeleteAuthorizationRequestOptions
+  ];
+  "DELETE /gists/:gist_id": [GistsDeleteEndpoint, GistsDeleteRequestOptions];
+  "DELETE /gists/:gist_id/comments/:comment_id": [
+    GistsDeleteCommentEndpoint,
+    GistsDeleteCommentRequestOptions
+  ];
+  "DELETE /gists/:gist_id/star": [
+    GistsUnstarEndpoint,
+    GistsUnstarRequestOptions
+  ];
+  "DELETE /notifications/threads/:thread_id/subscription": [
+    ActivityDeleteThreadSubscriptionEndpoint,
+    ActivityDeleteThreadSubscriptionRequestOptions
+  ];
+  "DELETE /orgs/:org/blocks/:username": [
+    OrgsUnblockUserEndpoint,
+    OrgsUnblockUserRequestOptions
+  ];
+  "DELETE /orgs/:org/credential-authorizations/:credential_id": [
+    OrgsRemoveCredentialAuthorizationEndpoint,
+    OrgsRemoveCredentialAuthorizationRequestOptions
+  ];
+  "DELETE /orgs/:org/hooks/:hook_id": [
+    OrgsDeleteHookEndpoint,
+    OrgsDeleteHookRequestOptions
+  ];
+  "DELETE /orgs/:org/interaction-limits": [
+    InteractionsRemoveRestrictionsForOrgEndpoint,
+    InteractionsRemoveRestrictionsForOrgRequestOptions
+  ];
+  "DELETE /orgs/:org/members/:username": [
+    OrgsRemoveMemberEndpoint,
+    OrgsRemoveMemberRequestOptions
+  ];
+  "DELETE /orgs/:org/memberships/:username": [
+    OrgsRemoveMembershipEndpoint,
+    OrgsRemoveMembershipRequestOptions
+  ];
+  "DELETE /orgs/:org/migrations/:migration_id/archive": [
+    MigrationsDeleteArchiveForOrgEndpoint,
+    MigrationsDeleteArchiveForOrgRequestOptions
+  ];
+  "DELETE /orgs/:org/migrations/:migration_id/repos/:repo_name/lock": [
+    MigrationsUnlockRepoForOrgEndpoint,
+    MigrationsUnlockRepoForOrgRequestOptions
+  ];
+  "DELETE /orgs/:org/outside_collaborators/:username": [
+    OrgsRemoveOutsideCollaboratorEndpoint,
+    OrgsRemoveOutsideCollaboratorRequestOptions
+  ];
+  "DELETE /orgs/:org/public_members/:username": [
+    OrgsConcealMembershipEndpoint,
+    OrgsConcealMembershipRequestOptions
+  ];
+  "DELETE /projects/:project_id": [
+    ProjectsDeleteEndpoint,
+    ProjectsDeleteRequestOptions
+  ];
+  "DELETE /projects/:project_id/collaborators/:username": [
+    ProjectsRemoveCollaboratorEndpoint,
+    ProjectsRemoveCollaboratorRequestOptions
+  ];
+  "DELETE /projects/columns/:column_id": [
+    ProjectsDeleteColumnEndpoint,
+    ProjectsDeleteColumnRequestOptions
+  ];
+  "DELETE /projects/columns/cards/:card_id": [
+    ProjectsDeleteCardEndpoint,
+    ProjectsDeleteCardRequestOptions
+  ];
+  "DELETE /reactions/:reaction_id": [
+    ReactionsDeleteEndpoint,
+    ReactionsDeleteRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo": [
+    ReposDeleteEndpoint,
+    ReposDeleteRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/automated-security-fixes": [
+    ReposDisableAutomatedSecurityFixesEndpoint,
+    ReposDisableAutomatedSecurityFixesRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection": [
+    ReposRemoveBranchProtectionEndpoint,
+    ReposRemoveBranchProtectionRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/enforce_admins": [
+    ReposRemoveProtectedBranchAdminEnforcementEndpoint,
+    ReposRemoveProtectedBranchAdminEnforcementRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews": [
+    ReposRemoveProtectedBranchPullRequestReviewEnforcementEndpoint,
+    ReposRemoveProtectedBranchPullRequestReviewEnforcementRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/required_signatures": [
+    ReposRemoveProtectedBranchRequiredSignaturesEndpoint,
+    ReposRemoveProtectedBranchRequiredSignaturesRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/required_status_checks": [
+    ReposRemoveProtectedBranchRequiredStatusChecksEndpoint,
+    ReposRemoveProtectedBranchRequiredStatusChecksRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts": [
+    ReposRemoveProtectedBranchRequiredStatusChecksContextsEndpoint,
+    ReposRemoveProtectedBranchRequiredStatusChecksContextsRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/restrictions": [
+    ReposRemoveProtectedBranchRestrictionsEndpoint,
+    ReposRemoveProtectedBranchRestrictionsRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/restrictions/apps": [
+    ReposRemoveProtectedBranchAppRestrictionsEndpoint,
+    ReposRemoveProtectedBranchAppRestrictionsRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/restrictions/teams": [
+    ReposRemoveProtectedBranchTeamRestrictionsEndpoint,
+    ReposRemoveProtectedBranchTeamRestrictionsRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/branches/:branch/protection/restrictions/users": [
+    ReposRemoveProtectedBranchUserRestrictionsEndpoint,
+    ReposRemoveProtectedBranchUserRestrictionsRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/collaborators/:username": [
+    ReposRemoveCollaboratorEndpoint,
+    ReposRemoveCollaboratorRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/comments/:comment_id": [
+    ReposDeleteCommitCommentEndpoint,
+    ReposDeleteCommitCommentRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/contents/:path": [
+    ReposDeleteFileEndpoint,
+    ReposDeleteFileRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/downloads/:download_id": [
+    ReposDeleteDownloadEndpoint,
+    ReposDeleteDownloadRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/git/refs/:ref": [
+    GitDeleteRefEndpoint,
+    GitDeleteRefRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/hooks/:hook_id": [
+    ReposDeleteHookEndpoint,
+    ReposDeleteHookRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/import": [
+    MigrationsCancelImportEndpoint,
+    MigrationsCancelImportRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/interaction-limits": [
+    InteractionsRemoveRestrictionsForRepoEndpoint,
+    InteractionsRemoveRestrictionsForRepoRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/invitations/:invitation_id": [
+    ReposDeleteInvitationEndpoint,
+    ReposDeleteInvitationRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/issues/:issue_number/assignees": [
+    IssuesRemoveAssigneesEndpoint,
+    IssuesRemoveAssigneesRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/issues/:issue_number/labels": [
+    IssuesRemoveLabelsEndpoint,
+    IssuesRemoveLabelsRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/issues/:issue_number/labels/:name": [
+    IssuesRemoveLabelEndpoint,
+    IssuesRemoveLabelRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/issues/:issue_number/lock": [
+    IssuesUnlockEndpoint,
+    IssuesUnlockRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/issues/comments/:comment_id": [
+    IssuesDeleteCommentEndpoint,
+    IssuesDeleteCommentRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/keys/:key_id": [
+    ReposRemoveDeployKeyEndpoint,
+    ReposRemoveDeployKeyRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/labels/:name": [
+    IssuesDeleteLabelEndpoint,
+    IssuesDeleteLabelRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/milestones/:milestone_number": [
+    IssuesDeleteMilestoneEndpoint,
+    IssuesDeleteMilestoneRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/pages": [
+    ReposDisablePagesSiteEndpoint,
+    ReposDisablePagesSiteRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/pulls/:pull_number/requested_reviewers": [
+    PullsDeleteReviewRequestEndpoint,
+    PullsDeleteReviewRequestRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/pulls/:pull_number/reviews/:review_id": [
+    PullsDeletePendingReviewEndpoint,
+    PullsDeletePendingReviewRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/pulls/comments/:comment_id": [
+    PullsDeleteCommentEndpoint,
+    PullsDeleteCommentRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/releases/:release_id": [
+    ReposDeleteReleaseEndpoint,
+    ReposDeleteReleaseRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/releases/assets/:asset_id": [
+    ReposDeleteReleaseAssetEndpoint,
+    ReposDeleteReleaseAssetRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/subscription": [
+    ActivityDeleteRepoSubscriptionEndpoint,
+    ActivityDeleteRepoSubscriptionRequestOptions
+  ];
+  "DELETE /repos/:owner/:repo/vulnerability-alerts": [
+    ReposDisableVulnerabilityAlertsEndpoint,
+    ReposDisableVulnerabilityAlertsRequestOptions
+  ];
+  "DELETE /scim/v2/organizations/:org/Users/:scim_user_id": [
+    ScimRemoveUserFromOrgEndpoint,
+    ScimRemoveUserFromOrgRequestOptions
+  ];
+  "DELETE /teams/:team_id": [TeamsDeleteEndpoint, TeamsDeleteRequestOptions];
+  "DELETE /teams/:team_id/discussions/:discussion_number": [
+    TeamsDeleteDiscussionEndpoint,
+    TeamsDeleteDiscussionRequestOptions
+  ];
+  "DELETE /teams/:team_id/discussions/:discussion_number/comments/:comment_number": [
+    TeamsDeleteDiscussionCommentEndpoint,
+    TeamsDeleteDiscussionCommentRequestOptions
+  ];
+  "DELETE /teams/:team_id/members/:username": [
+    TeamsRemoveMemberEndpoint,
+    TeamsRemoveMemberRequestOptions
+  ];
+  "DELETE /teams/:team_id/memberships/:username": [
+    TeamsRemoveMembershipEndpoint,
+    TeamsRemoveMembershipRequestOptions
+  ];
+  "DELETE /teams/:team_id/projects/:project_id": [
+    TeamsRemoveProjectEndpoint,
+    TeamsRemoveProjectRequestOptions
+  ];
+  "DELETE /teams/:team_id/repos/:owner/:repo": [
+    TeamsRemoveRepoEndpoint,
+    TeamsRemoveRepoRequestOptions
+  ];
+  "DELETE /user/blocks/:username": [
+    UsersUnblockEndpoint,
+    UsersUnblockRequestOptions
+  ];
+  "DELETE /user/emails": [
+    UsersDeleteEmailsEndpoint,
+    UsersDeleteEmailsRequestOptions
+  ];
+  "DELETE /user/following/:username": [
+    UsersUnfollowEndpoint,
+    UsersUnfollowRequestOptions
+  ];
+  "DELETE /user/gpg_keys/:gpg_key_id": [
+    UsersDeleteGpgKeyEndpoint,
+    UsersDeleteGpgKeyRequestOptions
+  ];
+  "DELETE /user/installations/:installation_id/repositories/:repository_id": [
+    AppsRemoveRepoFromInstallationEndpoint,
+    AppsRemoveRepoFromInstallationRequestOptions
+  ];
+  "DELETE /user/keys/:key_id": [
+    UsersDeletePublicKeyEndpoint,
+    UsersDeletePublicKeyRequestOptions
+  ];
+  "DELETE /user/migrations/:migration_id/archive": [
+    MigrationsDeleteArchiveForAuthenticatedUserEndpoint,
+    MigrationsDeleteArchiveForAuthenticatedUserRequestOptions
+  ];
+  "DELETE /user/migrations/:migration_id/repos/:repo_name/lock": [
+    MigrationsUnlockRepoForAuthenticatedUserEndpoint,
+    MigrationsUnlockRepoForAuthenticatedUserRequestOptions
+  ];
+  "DELETE /user/repository_invitations/:invitation_id": [
+    ReposDeclineInvitationEndpoint,
+    ReposDeclineInvitationRequestOptions
+  ];
+  "DELETE /user/starred/:owner/:repo": [
+    ActivityUnstarRepoEndpoint,
+    ActivityUnstarRepoRequestOptions
+  ];
+  "DELETE /user/subscriptions/:owner/:repo": [
+    ActivityStopWatchingRepoLegacyEndpoint,
+    ActivityStopWatchingRepoLegacyRequestOptions
+  ];
+  "GET /app": [
+    AppsGetAuthenticatedEndpoint,
+    AppsGetAuthenticatedRequestOptions
+  ];
+  "GET /app/installations": [
+    AppsListInstallationsEndpoint,
+    AppsListInstallationsRequestOptions
+  ];
+  "GET /app/installations/:installation_id": [
+    AppsGetInstallationEndpoint,
+    AppsGetInstallationRequestOptions
+  ];
+  "GET /applications/:client_id/tokens/:access_token": [
+    OauthAuthorizationsCheckAuthorizationEndpoint,
+    OauthAuthorizationsCheckAuthorizationRequestOptions
+  ];
+  "GET /applications/grants": [
+    OauthAuthorizationsListGrantsEndpoint,
+    OauthAuthorizationsListGrantsRequestOptions
+  ];
+  "GET /applications/grants/:grant_id": [
+    OauthAuthorizationsGetGrantEndpoint,
+    OauthAuthorizationsGetGrantRequestOptions
+  ];
+  "GET /apps/:app_slug": [AppsGetBySlugEndpoint, AppsGetBySlugRequestOptions];
+  "GET /authorizations": [
+    OauthAuthorizationsListAuthorizationsEndpoint,
+    OauthAuthorizationsListAuthorizationsRequestOptions
+  ];
+  "GET /authorizations/:authorization_id": [
+    OauthAuthorizationsGetAuthorizationEndpoint,
+    OauthAuthorizationsGetAuthorizationRequestOptions
+  ];
+  "GET /codes_of_conduct": [
+    CodesOfConductListConductCodesEndpoint,
+    CodesOfConductListConductCodesRequestOptions
+  ];
+  "GET /codes_of_conduct/:key": [
+    CodesOfConductGetConductCodeEndpoint,
+    CodesOfConductGetConductCodeRequestOptions
+  ];
+  "GET /emojis": [EmojisGetEndpoint, EmojisGetRequestOptions];
+  "GET /events": [
+    ActivityListPublicEventsEndpoint,
+    ActivityListPublicEventsRequestOptions
+  ];
+  "GET /feeds": [ActivityListFeedsEndpoint, ActivityListFeedsRequestOptions];
+  "GET /gists": [GistsListEndpoint, GistsListRequestOptions];
+  "GET /gists/:gist_id": [GistsGetEndpoint, GistsGetRequestOptions];
+  "GET /gists/:gist_id/:sha": [
+    GistsGetRevisionEndpoint,
+    GistsGetRevisionRequestOptions
+  ];
+  "GET /gists/:gist_id/comments": [
+    GistsListCommentsEndpoint,
+    GistsListCommentsRequestOptions
+  ];
+  "GET /gists/:gist_id/comments/:comment_id": [
+    GistsGetCommentEndpoint,
+    GistsGetCommentRequestOptions
+  ];
+  "GET /gists/:gist_id/commits": [
+    GistsListCommitsEndpoint,
+    GistsListCommitsRequestOptions
+  ];
+  "GET /gists/:gist_id/forks": [
+    GistsListForksEndpoint,
+    GistsListForksRequestOptions
+  ];
+  "GET /gists/:gist_id/star": [
+    GistsCheckIsStarredEndpoint,
+    GistsCheckIsStarredRequestOptions
+  ];
+  "GET /gists/public": [GistsListPublicEndpoint, GistsListPublicRequestOptions];
+  "GET /gists/starred": [
+    GistsListStarredEndpoint,
+    GistsListStarredRequestOptions
+  ];
+  "GET /gitignore/templates": [
+    GitignoreListTemplatesEndpoint,
+    GitignoreListTemplatesRequestOptions
+  ];
+  "GET /gitignore/templates/:name": [
+    GitignoreGetTemplateEndpoint,
+    GitignoreGetTemplateRequestOptions
+  ];
+  "GET /installation/repositories": [
+    AppsListReposEndpoint,
+    AppsListReposRequestOptions
+  ];
+  "GET /issues": [IssuesListEndpoint, IssuesListRequestOptions];
+  "GET /legacy/issues/search/:owner/:repository/:state/:keyword": [
+    SearchIssuesLegacyEndpoint,
+    SearchIssuesLegacyRequestOptions
+  ];
+  "GET /legacy/repos/search/:keyword": [
+    SearchReposLegacyEndpoint,
+    SearchReposLegacyRequestOptions
+  ];
+  "GET /legacy/user/email/:email": [
+    SearchEmailLegacyEndpoint,
+    SearchEmailLegacyRequestOptions
+  ];
+  "GET /legacy/user/search/:keyword": [
+    SearchUsersLegacyEndpoint,
+    SearchUsersLegacyRequestOptions
+  ];
+  "GET /licenses": [
+    LicensesListCommonlyUsedEndpoint | LicensesListEndpoint,
+    LicensesListCommonlyUsedRequestOptions | LicensesListRequestOptions
+  ];
+  "GET /licenses/:license": [LicensesGetEndpoint, LicensesGetRequestOptions];
+  "GET /marketplace_listing/accounts/:account_id": [
+    AppsCheckAccountIsAssociatedWithAnyEndpoint,
+    AppsCheckAccountIsAssociatedWithAnyRequestOptions
+  ];
+  "GET /marketplace_listing/plans": [
+    AppsListPlansEndpoint,
+    AppsListPlansRequestOptions
+  ];
+  "GET /marketplace_listing/plans/:plan_id/accounts": [
+    AppsListAccountsUserOrOrgOnPlanEndpoint,
+    AppsListAccountsUserOrOrgOnPlanRequestOptions
+  ];
+  "GET /marketplace_listing/stubbed/accounts/:account_id": [
+    AppsCheckAccountIsAssociatedWithAnyStubbedEndpoint,
+    AppsCheckAccountIsAssociatedWithAnyStubbedRequestOptions
+  ];
+  "GET /marketplace_listing/stubbed/plans": [
+    AppsListPlansStubbedEndpoint,
+    AppsListPlansStubbedRequestOptions
+  ];
+  "GET /marketplace_listing/stubbed/plans/:plan_id/accounts": [
+    AppsListAccountsUserOrOrgOnPlanStubbedEndpoint,
+    AppsListAccountsUserOrOrgOnPlanStubbedRequestOptions
+  ];
+  "GET /meta": [MetaGetEndpoint, MetaGetRequestOptions];
+  "GET /networks/:owner/:repo/events": [
+    ActivityListPublicEventsForRepoNetworkEndpoint,
+    ActivityListPublicEventsForRepoNetworkRequestOptions
+  ];
+  "GET /notifications": [
+    ActivityListNotificationsEndpoint,
+    ActivityListNotificationsRequestOptions
+  ];
+  "GET /notifications/threads/:thread_id": [
+    ActivityGetThreadEndpoint,
+    ActivityGetThreadRequestOptions
+  ];
+  "GET /notifications/threads/:thread_id/subscription": [
+    ActivityGetThreadSubscriptionEndpoint,
+    ActivityGetThreadSubscriptionRequestOptions
+  ];
+  "GET /organizations": [OrgsListEndpoint, OrgsListRequestOptions];
+  "GET /orgs/:org": [OrgsGetEndpoint, OrgsGetRequestOptions];
+  "GET /orgs/:org/blocks": [
+    OrgsListBlockedUsersEndpoint,
+    OrgsListBlockedUsersRequestOptions
+  ];
+  "GET /orgs/:org/blocks/:username": [
+    OrgsCheckBlockedUserEndpoint,
+    OrgsCheckBlockedUserRequestOptions
+  ];
+  "GET /orgs/:org/credential-authorizations": [
+    OrgsListCredentialAuthorizationsEndpoint,
+    OrgsListCredentialAuthorizationsRequestOptions
+  ];
+  "GET /orgs/:org/events": [
+    ActivityListPublicEventsForOrgEndpoint,
+    ActivityListPublicEventsForOrgRequestOptions
+  ];
+  "GET /orgs/:org/hooks": [OrgsListHooksEndpoint, OrgsListHooksRequestOptions];
+  "GET /orgs/:org/hooks/:hook_id": [
+    OrgsGetHookEndpoint,
+    OrgsGetHookRequestOptions
+  ];
+  "GET /orgs/:org/installation": [
+    AppsGetOrgInstallationEndpoint | AppsFindOrgInstallationEndpoint,
+    AppsGetOrgInstallationRequestOptions | AppsFindOrgInstallationRequestOptions
+  ];
+  "GET /orgs/:org/interaction-limits": [
+    InteractionsGetRestrictionsForOrgEndpoint,
+    InteractionsGetRestrictionsForOrgRequestOptions
+  ];
+  "GET /orgs/:org/invitations": [
+    OrgsListPendingInvitationsEndpoint,
+    OrgsListPendingInvitationsRequestOptions
+  ];
+  "GET /orgs/:org/invitations/:invitation_id/teams": [
+    OrgsListInvitationTeamsEndpoint,
+    OrgsListInvitationTeamsRequestOptions
+  ];
+  "GET /orgs/:org/issues": [
+    IssuesListForOrgEndpoint,
+    IssuesListForOrgRequestOptions
+  ];
+  "GET /orgs/:org/members": [
+    OrgsListMembersEndpoint,
+    OrgsListMembersRequestOptions
+  ];
+  "GET /orgs/:org/members/:username": [
+    OrgsCheckMembershipEndpoint,
+    OrgsCheckMembershipRequestOptions
+  ];
+  "GET /orgs/:org/memberships/:username": [
+    OrgsGetMembershipEndpoint,
+    OrgsGetMembershipRequestOptions
+  ];
+  "GET /orgs/:org/migrations": [
+    MigrationsListForOrgEndpoint,
+    MigrationsListForOrgRequestOptions
+  ];
+  "GET /orgs/:org/migrations/:migration_id": [
+    MigrationsGetStatusForOrgEndpoint,
+    MigrationsGetStatusForOrgRequestOptions
+  ];
+  "GET /orgs/:org/migrations/:migration_id/archive": [
+    MigrationsGetArchiveForOrgEndpoint,
+    MigrationsGetArchiveForOrgRequestOptions
+  ];
+  "GET /orgs/:org/outside_collaborators": [
+    OrgsListOutsideCollaboratorsEndpoint,
+    OrgsListOutsideCollaboratorsRequestOptions
+  ];
+  "GET /orgs/:org/projects": [
+    ProjectsListForOrgEndpoint,
+    ProjectsListForOrgRequestOptions
+  ];
+  "GET /orgs/:org/public_members": [
+    OrgsListPublicMembersEndpoint,
+    OrgsListPublicMembersRequestOptions
+  ];
+  "GET /orgs/:org/public_members/:username": [
+    OrgsCheckPublicMembershipEndpoint,
+    OrgsCheckPublicMembershipRequestOptions
+  ];
+  "GET /orgs/:org/repos": [
+    ReposListForOrgEndpoint,
+    ReposListForOrgRequestOptions
+  ];
+  "GET /orgs/:org/team-sync/groups": [
+    TeamsListIdPGroupsForOrgEndpoint,
+    TeamsListIdPGroupsForOrgRequestOptions
+  ];
+  "GET /orgs/:org/teams": [TeamsListEndpoint, TeamsListRequestOptions];
+  "GET /orgs/:org/teams/:team_slug": [
+    TeamsGetByNameEndpoint,
+    TeamsGetByNameRequestOptions
+  ];
+  "GET /projects/:project_id": [ProjectsGetEndpoint, ProjectsGetRequestOptions];
+  "GET /projects/:project_id/collaborators": [
+    ProjectsListCollaboratorsEndpoint,
+    ProjectsListCollaboratorsRequestOptions
+  ];
+  "GET /projects/:project_id/collaborators/:username/permission": [
+    ProjectsReviewUserPermissionLevelEndpoint,
+    ProjectsReviewUserPermissionLevelRequestOptions
+  ];
+  "GET /projects/:project_id/columns": [
+    ProjectsListColumnsEndpoint,
+    ProjectsListColumnsRequestOptions
+  ];
+  "GET /projects/columns/:column_id": [
+    ProjectsGetColumnEndpoint,
+    ProjectsGetColumnRequestOptions
+  ];
+  "GET /projects/columns/:column_id/cards": [
+    ProjectsListCardsEndpoint,
+    ProjectsListCardsRequestOptions
+  ];
+  "GET /projects/columns/cards/:card_id": [
+    ProjectsGetCardEndpoint,
+    ProjectsGetCardRequestOptions
+  ];
+  "GET /rate_limit": [RateLimitGetEndpoint, RateLimitGetRequestOptions];
+  "GET /repos/:owner/:repo": [ReposGetEndpoint, ReposGetRequestOptions];
+  "GET /repos/:owner/:repo/:archive_format/:ref": [
+    ReposGetArchiveLinkEndpoint,
+    ReposGetArchiveLinkRequestOptions
+  ];
+  "GET /repos/:owner/:repo/assignees": [
+    IssuesListAssigneesEndpoint,
+    IssuesListAssigneesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/assignees/:assignee": [
+    IssuesCheckAssigneeEndpoint,
+    IssuesCheckAssigneeRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches": [
+    ReposListBranchesEndpoint,
+    ReposListBranchesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch": [
+    ReposGetBranchEndpoint,
+    ReposGetBranchRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection": [
+    ReposGetBranchProtectionEndpoint,
+    ReposGetBranchProtectionRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/enforce_admins": [
+    ReposGetProtectedBranchAdminEnforcementEndpoint,
+    ReposGetProtectedBranchAdminEnforcementRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews": [
+    ReposGetProtectedBranchPullRequestReviewEnforcementEndpoint,
+    ReposGetProtectedBranchPullRequestReviewEnforcementRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/required_signatures": [
+    ReposGetProtectedBranchRequiredSignaturesEndpoint,
+    ReposGetProtectedBranchRequiredSignaturesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/required_status_checks": [
+    ReposGetProtectedBranchRequiredStatusChecksEndpoint,
+    ReposGetProtectedBranchRequiredStatusChecksRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts": [
+    ReposListProtectedBranchRequiredStatusChecksContextsEndpoint,
+    ReposListProtectedBranchRequiredStatusChecksContextsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/restrictions": [
+    ReposGetProtectedBranchRestrictionsEndpoint,
+    ReposGetProtectedBranchRestrictionsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/restrictions/apps": [
+
+      | ReposGetAppsWithAccessToProtectedBranchEndpoint
+      | ReposListAppsWithAccessToProtectedBranchEndpoint,
+
+      | ReposGetAppsWithAccessToProtectedBranchRequestOptions
+      | ReposListAppsWithAccessToProtectedBranchRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/restrictions/teams": [
+
+      | ReposGetTeamsWithAccessToProtectedBranchEndpoint
+      | ReposListProtectedBranchTeamRestrictionsEndpoint
+      | ReposListTeamsWithAccessToProtectedBranchEndpoint,
+
+      | ReposGetTeamsWithAccessToProtectedBranchRequestOptions
+      | ReposListProtectedBranchTeamRestrictionsRequestOptions
+      | ReposListTeamsWithAccessToProtectedBranchRequestOptions
+  ];
+  "GET /repos/:owner/:repo/branches/:branch/protection/restrictions/users": [
+
+      | ReposGetUsersWithAccessToProtectedBranchEndpoint
+      | ReposListProtectedBranchUserRestrictionsEndpoint
+      | ReposListUsersWithAccessToProtectedBranchEndpoint,
+
+      | ReposGetUsersWithAccessToProtectedBranchRequestOptions
+      | ReposListProtectedBranchUserRestrictionsRequestOptions
+      | ReposListUsersWithAccessToProtectedBranchRequestOptions
+  ];
+  "GET /repos/:owner/:repo/check-runs/:check_run_id": [
+    ChecksGetEndpoint,
+    ChecksGetRequestOptions
+  ];
+  "GET /repos/:owner/:repo/check-runs/:check_run_id/annotations": [
+    ChecksListAnnotationsEndpoint,
+    ChecksListAnnotationsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/check-suites/:check_suite_id": [
+    ChecksGetSuiteEndpoint,
+    ChecksGetSuiteRequestOptions
+  ];
+  "GET /repos/:owner/:repo/check-suites/:check_suite_id/check-runs": [
+    ChecksListForSuiteEndpoint,
+    ChecksListForSuiteRequestOptions
+  ];
+  "GET /repos/:owner/:repo/collaborators": [
+    ReposListCollaboratorsEndpoint,
+    ReposListCollaboratorsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/collaborators/:username": [
+    ReposCheckCollaboratorEndpoint,
+    ReposCheckCollaboratorRequestOptions
+  ];
+  "GET /repos/:owner/:repo/collaborators/:username/permission": [
+    ReposGetCollaboratorPermissionLevelEndpoint,
+    ReposGetCollaboratorPermissionLevelRequestOptions
+  ];
+  "GET /repos/:owner/:repo/comments": [
+    ReposListCommitCommentsEndpoint,
+    ReposListCommitCommentsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/comments/:comment_id": [
+    ReposGetCommitCommentEndpoint,
+    ReposGetCommitCommentRequestOptions
+  ];
+  "GET /repos/:owner/:repo/comments/:comment_id/reactions": [
+    ReactionsListForCommitCommentEndpoint,
+    ReactionsListForCommitCommentRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits": [
+    ReposListCommitsEndpoint,
+    ReposListCommitsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:commit_sha/branches-where-head": [
+    ReposListBranchesForHeadCommitEndpoint,
+    ReposListBranchesForHeadCommitRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:commit_sha/comments": [
+    ReposListCommentsForCommitEndpoint,
+    ReposListCommentsForCommitRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:commit_sha/pulls": [
+    ReposListPullRequestsAssociatedWithCommitEndpoint,
+    ReposListPullRequestsAssociatedWithCommitRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:ref": [
+    ReposGetCommitEndpoint,
+    ReposGetCommitRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:ref/check-runs": [
+    ChecksListForRefEndpoint,
+    ChecksListForRefRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:ref/check-suites": [
+    ChecksListSuitesForRefEndpoint,
+    ChecksListSuitesForRefRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:ref/status": [
+    ReposGetCombinedStatusForRefEndpoint,
+    ReposGetCombinedStatusForRefRequestOptions
+  ];
+  "GET /repos/:owner/:repo/commits/:ref/statuses": [
+    ReposListStatusesForRefEndpoint,
+    ReposListStatusesForRefRequestOptions
+  ];
+  "GET /repos/:owner/:repo/community/code_of_conduct": [
+    CodesOfConductGetForRepoEndpoint,
+    CodesOfConductGetForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/community/profile": [
+    ReposRetrieveCommunityProfileMetricsEndpoint,
+    ReposRetrieveCommunityProfileMetricsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/compare/:base...:head": [
+    ReposCompareCommitsEndpoint,
+    ReposCompareCommitsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/contents/:path": [
+    ReposGetContentsEndpoint,
+    ReposGetContentsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/contributors": [
+    ReposListContributorsEndpoint,
+    ReposListContributorsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/deployments": [
+    ReposListDeploymentsEndpoint,
+    ReposListDeploymentsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/deployments/:deployment_id": [
+    ReposGetDeploymentEndpoint,
+    ReposGetDeploymentRequestOptions
+  ];
+  "GET /repos/:owner/:repo/deployments/:deployment_id/statuses": [
+    ReposListDeploymentStatusesEndpoint,
+    ReposListDeploymentStatusesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id": [
+    ReposGetDeploymentStatusEndpoint,
+    ReposGetDeploymentStatusRequestOptions
+  ];
+  "GET /repos/:owner/:repo/downloads": [
+    ReposListDownloadsEndpoint,
+    ReposListDownloadsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/downloads/:download_id": [
+    ReposGetDownloadEndpoint,
+    ReposGetDownloadRequestOptions
+  ];
+  "GET /repos/:owner/:repo/events": [
+    ActivityListRepoEventsEndpoint,
+    ActivityListRepoEventsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/forks": [
+    ReposListForksEndpoint,
+    ReposListForksRequestOptions
+  ];
+  "GET /repos/:owner/:repo/git/blobs/:file_sha": [
+    GitGetBlobEndpoint,
+    GitGetBlobRequestOptions
+  ];
+  "GET /repos/:owner/:repo/git/commits/:commit_sha": [
+    GitGetCommitEndpoint,
+    GitGetCommitRequestOptions
+  ];
+  "GET /repos/:owner/:repo/git/matching-refs/:ref": [
+    GitListMatchingRefsEndpoint,
+    GitListMatchingRefsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/git/ref/:ref": [
+    GitGetRefEndpoint,
+    GitGetRefRequestOptions
+  ];
+  "GET /repos/:owner/:repo/git/tags/:tag_sha": [
+    GitGetTagEndpoint,
+    GitGetTagRequestOptions
+  ];
+  "GET /repos/:owner/:repo/git/trees/:tree_sha": [
+    GitGetTreeEndpoint,
+    GitGetTreeRequestOptions
+  ];
+  "GET /repos/:owner/:repo/hooks": [
+    ReposListHooksEndpoint,
+    ReposListHooksRequestOptions
+  ];
+  "GET /repos/:owner/:repo/hooks/:hook_id": [
+    ReposGetHookEndpoint,
+    ReposGetHookRequestOptions
+  ];
+  "GET /repos/:owner/:repo/import": [
+    MigrationsGetImportProgressEndpoint,
+    MigrationsGetImportProgressRequestOptions
+  ];
+  "GET /repos/:owner/:repo/import/authors": [
+    MigrationsGetCommitAuthorsEndpoint,
+    MigrationsGetCommitAuthorsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/import/large_files": [
+    MigrationsGetLargeFilesEndpoint,
+    MigrationsGetLargeFilesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/installation": [
+    AppsGetRepoInstallationEndpoint | AppsFindRepoInstallationEndpoint,
+
+      | AppsGetRepoInstallationRequestOptions
+      | AppsFindRepoInstallationRequestOptions
+  ];
+  "GET /repos/:owner/:repo/interaction-limits": [
+    InteractionsGetRestrictionsForRepoEndpoint,
+    InteractionsGetRestrictionsForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/invitations": [
+    ReposListInvitationsEndpoint,
+    ReposListInvitationsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues": [
+    IssuesListForRepoEndpoint,
+    IssuesListForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/:issue_number": [
+    IssuesGetEndpoint,
+    IssuesGetRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/:issue_number/comments": [
+    IssuesListCommentsEndpoint,
+    IssuesListCommentsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/:issue_number/events": [
+    IssuesListEventsEndpoint,
+    IssuesListEventsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/:issue_number/labels": [
+    IssuesListLabelsOnIssueEndpoint,
+    IssuesListLabelsOnIssueRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/:issue_number/reactions": [
+    ReactionsListForIssueEndpoint,
+    ReactionsListForIssueRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/:issue_number/timeline": [
+    IssuesListEventsForTimelineEndpoint,
+    IssuesListEventsForTimelineRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/comments": [
+    IssuesListCommentsForRepoEndpoint,
+    IssuesListCommentsForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/comments/:comment_id": [
+    IssuesGetCommentEndpoint,
+    IssuesGetCommentRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/comments/:comment_id/reactions": [
+    ReactionsListForIssueCommentEndpoint,
+    ReactionsListForIssueCommentRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/events": [
+    IssuesListEventsForRepoEndpoint,
+    IssuesListEventsForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/issues/events/:event_id": [
+    IssuesGetEventEndpoint,
+    IssuesGetEventRequestOptions
+  ];
+  "GET /repos/:owner/:repo/keys": [
+    ReposListDeployKeysEndpoint,
+    ReposListDeployKeysRequestOptions
+  ];
+  "GET /repos/:owner/:repo/keys/:key_id": [
+    ReposGetDeployKeyEndpoint,
+    ReposGetDeployKeyRequestOptions
+  ];
+  "GET /repos/:owner/:repo/labels": [
+    IssuesListLabelsForRepoEndpoint,
+    IssuesListLabelsForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/labels/:name": [
+    IssuesGetLabelEndpoint,
+    IssuesGetLabelRequestOptions
+  ];
+  "GET /repos/:owner/:repo/languages": [
+    ReposListLanguagesEndpoint,
+    ReposListLanguagesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/license": [
+    LicensesGetForRepoEndpoint,
+    LicensesGetForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/milestones": [
+    IssuesListMilestonesForRepoEndpoint,
+    IssuesListMilestonesForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/milestones/:milestone_number": [
+    IssuesGetMilestoneEndpoint,
+    IssuesGetMilestoneRequestOptions
+  ];
+  "GET /repos/:owner/:repo/milestones/:milestone_number/labels": [
+    IssuesListLabelsForMilestoneEndpoint,
+    IssuesListLabelsForMilestoneRequestOptions
+  ];
+  "GET /repos/:owner/:repo/notifications": [
+    ActivityListNotificationsForRepoEndpoint,
+    ActivityListNotificationsForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pages": [
+    ReposGetPagesEndpoint,
+    ReposGetPagesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pages/builds": [
+    ReposListPagesBuildsEndpoint,
+    ReposListPagesBuildsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pages/builds/:build_id": [
+    ReposGetPagesBuildEndpoint,
+    ReposGetPagesBuildRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pages/builds/latest": [
+    ReposGetLatestPagesBuildEndpoint,
+    ReposGetLatestPagesBuildRequestOptions
+  ];
+  "GET /repos/:owner/:repo/projects": [
+    ProjectsListForRepoEndpoint,
+    ProjectsListForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls": [PullsListEndpoint, PullsListRequestOptions];
+  "GET /repos/:owner/:repo/pulls/:pull_number": [
+    PullsGetEndpoint,
+    PullsGetRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/comments": [
+    PullsListCommentsEndpoint,
+    PullsListCommentsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/commits": [
+    PullsListCommitsEndpoint,
+    PullsListCommitsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/files": [
+    PullsListFilesEndpoint,
+    PullsListFilesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/merge": [
+    PullsCheckIfMergedEndpoint,
+    PullsCheckIfMergedRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/requested_reviewers": [
+    PullsListReviewRequestsEndpoint,
+    PullsListReviewRequestsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/reviews": [
+    PullsListReviewsEndpoint,
+    PullsListReviewsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/reviews/:review_id": [
+    PullsGetReviewEndpoint,
+    PullsGetReviewRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments": [
+    PullsGetCommentsForReviewEndpoint,
+    PullsGetCommentsForReviewRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/comments": [
+    PullsListCommentsForRepoEndpoint,
+    PullsListCommentsForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/comments/:comment_id": [
+    PullsGetCommentEndpoint,
+    PullsGetCommentRequestOptions
+  ];
+  "GET /repos/:owner/:repo/pulls/comments/:comment_id/reactions": [
+    ReactionsListForPullRequestReviewCommentEndpoint,
+    ReactionsListForPullRequestReviewCommentRequestOptions
+  ];
+  "GET /repos/:owner/:repo/readme": [
+    ReposGetReadmeEndpoint,
+    ReposGetReadmeRequestOptions
+  ];
+  "GET /repos/:owner/:repo/releases": [
+    ReposListReleasesEndpoint,
+    ReposListReleasesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/releases/:release_id": [
+    ReposGetReleaseEndpoint,
+    ReposGetReleaseRequestOptions
+  ];
+  "GET /repos/:owner/:repo/releases/:release_id/assets": [
+    ReposListAssetsForReleaseEndpoint,
+    ReposListAssetsForReleaseRequestOptions
+  ];
+  "GET /repos/:owner/:repo/releases/assets/:asset_id": [
+    ReposGetReleaseAssetEndpoint,
+    ReposGetReleaseAssetRequestOptions
+  ];
+  "GET /repos/:owner/:repo/releases/latest": [
+    ReposGetLatestReleaseEndpoint,
+    ReposGetLatestReleaseRequestOptions
+  ];
+  "GET /repos/:owner/:repo/releases/tags/:tag": [
+    ReposGetReleaseByTagEndpoint,
+    ReposGetReleaseByTagRequestOptions
+  ];
+  "GET /repos/:owner/:repo/stargazers": [
+    ActivityListStargazersForRepoEndpoint,
+    ActivityListStargazersForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/stats/code_frequency": [
+    ReposGetCodeFrequencyStatsEndpoint,
+    ReposGetCodeFrequencyStatsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/stats/commit_activity": [
+    ReposGetCommitActivityStatsEndpoint,
+    ReposGetCommitActivityStatsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/stats/contributors": [
+    ReposGetContributorsStatsEndpoint,
+    ReposGetContributorsStatsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/stats/participation": [
+    ReposGetParticipationStatsEndpoint,
+    ReposGetParticipationStatsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/stats/punch_card": [
+    ReposGetPunchCardStatsEndpoint,
+    ReposGetPunchCardStatsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/subscribers": [
+    ActivityListWatchersForRepoEndpoint,
+    ActivityListWatchersForRepoRequestOptions
+  ];
+  "GET /repos/:owner/:repo/subscription": [
+    ActivityGetRepoSubscriptionEndpoint,
+    ActivityGetRepoSubscriptionRequestOptions
+  ];
+  "GET /repos/:owner/:repo/tags": [
+    ReposListTagsEndpoint,
+    ReposListTagsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/teams": [
+    ReposListTeamsEndpoint,
+    ReposListTeamsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/topics": [
+    ReposListTopicsEndpoint,
+    ReposListTopicsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/traffic/clones": [
+    ReposGetClonesEndpoint,
+    ReposGetClonesRequestOptions
+  ];
+  "GET /repos/:owner/:repo/traffic/popular/paths": [
+    ReposGetTopPathsEndpoint,
+    ReposGetTopPathsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/traffic/popular/referrers": [
+    ReposGetTopReferrersEndpoint,
+    ReposGetTopReferrersRequestOptions
+  ];
+  "GET /repos/:owner/:repo/traffic/views": [
+    ReposGetViewsEndpoint,
+    ReposGetViewsRequestOptions
+  ];
+  "GET /repos/:owner/:repo/vulnerability-alerts": [
+    ReposCheckVulnerabilityAlertsEndpoint,
+    ReposCheckVulnerabilityAlertsRequestOptions
+  ];
+  "GET /repositories": [ReposListPublicEndpoint, ReposListPublicRequestOptions];
+  "GET /scim/v2/organizations/:org/Users": [
+    ScimListProvisionedIdentitiesEndpoint,
+    ScimListProvisionedIdentitiesRequestOptions
+  ];
+  "GET /scim/v2/organizations/:org/Users/:scim_user_id": [
+    ScimGetProvisioningDetailsForUserEndpoint,
+    ScimGetProvisioningDetailsForUserRequestOptions
+  ];
+  "GET /search/code": [SearchCodeEndpoint, SearchCodeRequestOptions];
+  "GET /search/commits": [SearchCommitsEndpoint, SearchCommitsRequestOptions];
+  "GET /search/issues": [
+    SearchIssuesAndPullRequestsEndpoint | SearchIssuesEndpoint,
+    SearchIssuesAndPullRequestsRequestOptions | SearchIssuesRequestOptions
+  ];
+  "GET /search/labels": [SearchLabelsEndpoint, SearchLabelsRequestOptions];
+  "GET /search/repositories": [SearchReposEndpoint, SearchReposRequestOptions];
+  "GET /search/topics": [SearchTopicsEndpoint, SearchTopicsRequestOptions];
+  "GET /search/users": [SearchUsersEndpoint, SearchUsersRequestOptions];
+  "GET /teams/:team_id": [TeamsGetEndpoint, TeamsGetRequestOptions];
+  "GET /teams/:team_id/discussions": [
+    TeamsListDiscussionsEndpoint,
+    TeamsListDiscussionsRequestOptions
+  ];
+  "GET /teams/:team_id/discussions/:discussion_number": [
+    TeamsGetDiscussionEndpoint,
+    TeamsGetDiscussionRequestOptions
+  ];
+  "GET /teams/:team_id/discussions/:discussion_number/comments": [
+    TeamsListDiscussionCommentsEndpoint,
+    TeamsListDiscussionCommentsRequestOptions
+  ];
+  "GET /teams/:team_id/discussions/:discussion_number/comments/:comment_number": [
+    TeamsGetDiscussionCommentEndpoint,
+    TeamsGetDiscussionCommentRequestOptions
+  ];
+  "GET /teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions": [
+    ReactionsListForTeamDiscussionCommentEndpoint,
+    ReactionsListForTeamDiscussionCommentRequestOptions
+  ];
+  "GET /teams/:team_id/discussions/:discussion_number/reactions": [
+    ReactionsListForTeamDiscussionEndpoint,
+    ReactionsListForTeamDiscussionRequestOptions
+  ];
+  "GET /teams/:team_id/invitations": [
+    TeamsListPendingInvitationsEndpoint,
+    TeamsListPendingInvitationsRequestOptions
+  ];
+  "GET /teams/:team_id/members": [
+    TeamsListMembersEndpoint,
+    TeamsListMembersRequestOptions
+  ];
+  "GET /teams/:team_id/members/:username": [
+    TeamsGetMemberEndpoint,
+    TeamsGetMemberRequestOptions
+  ];
+  "GET /teams/:team_id/memberships/:username": [
+    TeamsGetMembershipEndpoint,
+    TeamsGetMembershipRequestOptions
+  ];
+  "GET /teams/:team_id/projects": [
+    TeamsListProjectsEndpoint,
+    TeamsListProjectsRequestOptions
+  ];
+  "GET /teams/:team_id/projects/:project_id": [
+    TeamsReviewProjectEndpoint,
+    TeamsReviewProjectRequestOptions
+  ];
+  "GET /teams/:team_id/repos": [
+    TeamsListReposEndpoint,
+    TeamsListReposRequestOptions
+  ];
+  "GET /teams/:team_id/repos/:owner/:repo": [
+    TeamsCheckManagesRepoEndpoint,
+    TeamsCheckManagesRepoRequestOptions
+  ];
+  "GET /teams/:team_id/team-sync/group-mappings": [
+    TeamsListIdPGroupsEndpoint,
+    TeamsListIdPGroupsRequestOptions
+  ];
+  "GET /teams/:team_id/teams": [
+    TeamsListChildEndpoint,
+    TeamsListChildRequestOptions
+  ];
+  "GET /user": [
+    UsersGetAuthenticatedEndpoint,
+    UsersGetAuthenticatedRequestOptions
+  ];
+  "GET /user/blocks": [
+    UsersListBlockedEndpoint,
+    UsersListBlockedRequestOptions
+  ];
+  "GET /user/blocks/:username": [
+    UsersCheckBlockedEndpoint,
+    UsersCheckBlockedRequestOptions
+  ];
+  "GET /user/emails": [UsersListEmailsEndpoint, UsersListEmailsRequestOptions];
+  "GET /user/followers": [
+    UsersListFollowersForAuthenticatedUserEndpoint,
+    UsersListFollowersForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/following": [
+    UsersListFollowingForAuthenticatedUserEndpoint,
+    UsersListFollowingForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/following/:username": [
+    UsersCheckFollowingEndpoint,
+    UsersCheckFollowingRequestOptions
+  ];
+  "GET /user/gpg_keys": [
+    UsersListGpgKeysEndpoint,
+    UsersListGpgKeysRequestOptions
+  ];
+  "GET /user/gpg_keys/:gpg_key_id": [
+    UsersGetGpgKeyEndpoint,
+    UsersGetGpgKeyRequestOptions
+  ];
+  "GET /user/installations": [
+    AppsListInstallationsForAuthenticatedUserEndpoint,
+    AppsListInstallationsForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/installations/:installation_id/repositories": [
+    AppsListInstallationReposForAuthenticatedUserEndpoint,
+    AppsListInstallationReposForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/issues": [
+    IssuesListForAuthenticatedUserEndpoint,
+    IssuesListForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/keys": [
+    UsersListPublicKeysEndpoint,
+    UsersListPublicKeysRequestOptions
+  ];
+  "GET /user/keys/:key_id": [
+    UsersGetPublicKeyEndpoint,
+    UsersGetPublicKeyRequestOptions
+  ];
+  "GET /user/marketplace_purchases": [
+    AppsListMarketplacePurchasesForAuthenticatedUserEndpoint,
+    AppsListMarketplacePurchasesForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/marketplace_purchases/stubbed": [
+    AppsListMarketplacePurchasesForAuthenticatedUserStubbedEndpoint,
+    AppsListMarketplacePurchasesForAuthenticatedUserStubbedRequestOptions
+  ];
+  "GET /user/memberships/orgs": [
+    OrgsListMembershipsEndpoint,
+    OrgsListMembershipsRequestOptions
+  ];
+  "GET /user/memberships/orgs/:org": [
+    OrgsGetMembershipForAuthenticatedUserEndpoint,
+    OrgsGetMembershipForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/migrations": [
+    MigrationsListForAuthenticatedUserEndpoint,
+    MigrationsListForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/migrations/:migration_id": [
+    MigrationsGetStatusForAuthenticatedUserEndpoint,
+    MigrationsGetStatusForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/migrations/:migration_id/archive": [
+    MigrationsGetArchiveForAuthenticatedUserEndpoint,
+    MigrationsGetArchiveForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/orgs": [
+    OrgsListForAuthenticatedUserEndpoint,
+    OrgsListForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/public_emails": [
+    UsersListPublicEmailsEndpoint,
+    UsersListPublicEmailsRequestOptions
+  ];
+  "GET /user/repos": [ReposListEndpoint, ReposListRequestOptions];
+  "GET /user/repository_invitations": [
+    ReposListInvitationsForAuthenticatedUserEndpoint,
+    ReposListInvitationsForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/starred": [
+    ActivityListReposStarredByAuthenticatedUserEndpoint,
+    ActivityListReposStarredByAuthenticatedUserRequestOptions
+  ];
+  "GET /user/starred/:owner/:repo": [
+    ActivityCheckStarringRepoEndpoint,
+    ActivityCheckStarringRepoRequestOptions
+  ];
+  "GET /user/subscriptions": [
+    ActivityListWatchedReposForAuthenticatedUserEndpoint,
+    ActivityListWatchedReposForAuthenticatedUserRequestOptions
+  ];
+  "GET /user/subscriptions/:owner/:repo": [
+    ActivityCheckWatchingRepoLegacyEndpoint,
+    ActivityCheckWatchingRepoLegacyRequestOptions
+  ];
+  "GET /user/teams": [
+    TeamsListForAuthenticatedUserEndpoint,
+    TeamsListForAuthenticatedUserRequestOptions
+  ];
+  "GET /users": [UsersListEndpoint, UsersListRequestOptions];
+  "GET /users/:username": [
+    UsersGetByUsernameEndpoint,
+    UsersGetByUsernameRequestOptions
+  ];
+  "GET /users/:username/events": [
+    ActivityListEventsForUserEndpoint,
+    ActivityListEventsForUserRequestOptions
+  ];
+  "GET /users/:username/events/orgs/:org": [
+    ActivityListEventsForOrgEndpoint,
+    ActivityListEventsForOrgRequestOptions
+  ];
+  "GET /users/:username/events/public": [
+    ActivityListPublicEventsForUserEndpoint,
+    ActivityListPublicEventsForUserRequestOptions
+  ];
+  "GET /users/:username/followers": [
+    UsersListFollowersForUserEndpoint,
+    UsersListFollowersForUserRequestOptions
+  ];
+  "GET /users/:username/following": [
+    UsersListFollowingForUserEndpoint,
+    UsersListFollowingForUserRequestOptions
+  ];
+  "GET /users/:username/following/:target_user": [
+    UsersCheckFollowingForUserEndpoint,
+    UsersCheckFollowingForUserRequestOptions
+  ];
+  "GET /users/:username/gists": [
+    GistsListPublicForUserEndpoint,
+    GistsListPublicForUserRequestOptions
+  ];
+  "GET /users/:username/gpg_keys": [
+    UsersListGpgKeysForUserEndpoint,
+    UsersListGpgKeysForUserRequestOptions
+  ];
+  "GET /users/:username/hovercard": [
+    UsersGetContextForUserEndpoint,
+    UsersGetContextForUserRequestOptions
+  ];
+  "GET /users/:username/installation": [
+    AppsGetUserInstallationEndpoint | AppsFindUserInstallationEndpoint,
+
+      | AppsGetUserInstallationRequestOptions
+      | AppsFindUserInstallationRequestOptions
+  ];
+  "GET /users/:username/keys": [
+    UsersListPublicKeysForUserEndpoint,
+    UsersListPublicKeysForUserRequestOptions
+  ];
+  "GET /users/:username/orgs": [
+    OrgsListForUserEndpoint,
+    OrgsListForUserRequestOptions
+  ];
+  "GET /users/:username/projects": [
+    ProjectsListForUserEndpoint,
+    ProjectsListForUserRequestOptions
+  ];
+  "GET /users/:username/received_events": [
+    ActivityListReceivedEventsForUserEndpoint,
+    ActivityListReceivedEventsForUserRequestOptions
+  ];
+  "GET /users/:username/received_events/public": [
+    ActivityListReceivedPublicEventsForUserEndpoint,
+    ActivityListReceivedPublicEventsForUserRequestOptions
+  ];
+  "GET /users/:username/repos": [
+    ReposListForUserEndpoint,
+    ReposListForUserRequestOptions
+  ];
+  "GET /users/:username/starred": [
+    ActivityListReposStarredByUserEndpoint,
+    ActivityListReposStarredByUserRequestOptions
+  ];
+  "GET /users/:username/subscriptions": [
+    ActivityListReposWatchedByUserEndpoint,
+    ActivityListReposWatchedByUserRequestOptions
+  ];
+  "PATCH /authorizations/:authorization_id": [
+    OauthAuthorizationsUpdateAuthorizationEndpoint,
+    OauthAuthorizationsUpdateAuthorizationRequestOptions
+  ];
+  "PATCH /gists/:gist_id": [GistsUpdateEndpoint, GistsUpdateRequestOptions];
+  "PATCH /gists/:gist_id/comments/:comment_id": [
+    GistsUpdateCommentEndpoint,
+    GistsUpdateCommentRequestOptions
+  ];
+  "PATCH /notifications/threads/:thread_id": [
+    ActivityMarkThreadAsReadEndpoint,
+    ActivityMarkThreadAsReadRequestOptions
+  ];
+  "PATCH /orgs/:org": [OrgsUpdateEndpoint, OrgsUpdateRequestOptions];
+  "PATCH /orgs/:org/hooks/:hook_id": [
+    OrgsUpdateHookEndpoint,
+    OrgsUpdateHookRequestOptions
+  ];
+  "PATCH /projects/:project_id": [
+    ProjectsUpdateEndpoint,
+    ProjectsUpdateRequestOptions
+  ];
+  "PATCH /projects/columns/:column_id": [
+    ProjectsUpdateColumnEndpoint,
+    ProjectsUpdateColumnRequestOptions
+  ];
+  "PATCH /projects/columns/cards/:card_id": [
+    ProjectsUpdateCardEndpoint,
+    ProjectsUpdateCardRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo": [ReposUpdateEndpoint, ReposUpdateRequestOptions];
+  "PATCH /repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews": [
+    ReposUpdateProtectedBranchPullRequestReviewEnforcementEndpoint,
+    ReposUpdateProtectedBranchPullRequestReviewEnforcementRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/branches/:branch/protection/required_status_checks": [
+    ReposUpdateProtectedBranchRequiredStatusChecksEndpoint,
+    ReposUpdateProtectedBranchRequiredStatusChecksRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/check-runs/:check_run_id": [
+    ChecksUpdateEndpoint,
+    ChecksUpdateRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/check-suites/preferences": [
+    ChecksSetSuitesPreferencesEndpoint,
+    ChecksSetSuitesPreferencesRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/comments/:comment_id": [
+    ReposUpdateCommitCommentEndpoint,
+    ReposUpdateCommitCommentRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/git/refs/:ref": [
+    GitUpdateRefEndpoint,
+    GitUpdateRefRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/hooks/:hook_id": [
+    ReposUpdateHookEndpoint,
+    ReposUpdateHookRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/import": [
+    MigrationsUpdateImportEndpoint,
+    MigrationsUpdateImportRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/import/authors/:author_id": [
+    MigrationsMapCommitAuthorEndpoint,
+    MigrationsMapCommitAuthorRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/import/lfs": [
+    MigrationsSetLfsPreferenceEndpoint,
+    MigrationsSetLfsPreferenceRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/invitations/:invitation_id": [
+    ReposUpdateInvitationEndpoint,
+    ReposUpdateInvitationRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/issues/:issue_number": [
+    IssuesUpdateEndpoint,
+    IssuesUpdateRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/issues/comments/:comment_id": [
+    IssuesUpdateCommentEndpoint,
+    IssuesUpdateCommentRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/labels/:name": [
+    IssuesUpdateLabelEndpoint,
+    IssuesUpdateLabelRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/milestones/:milestone_number": [
+    IssuesUpdateMilestoneEndpoint,
+    IssuesUpdateMilestoneRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/pulls/:pull_number": [
+    PullsUpdateEndpoint,
+    PullsUpdateRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/pulls/comments/:comment_id": [
+    PullsUpdateCommentEndpoint,
+    PullsUpdateCommentRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/releases/:release_id": [
+    ReposUpdateReleaseEndpoint,
+    ReposUpdateReleaseRequestOptions
+  ];
+  "PATCH /repos/:owner/:repo/releases/assets/:asset_id": [
+    ReposUpdateReleaseAssetEndpoint,
+    ReposUpdateReleaseAssetRequestOptions
+  ];
+  "PATCH /scim/v2/organizations/:org/Users/:scim_user_id": [
+    ScimUpdateUserAttributeEndpoint,
+    ScimUpdateUserAttributeRequestOptions
+  ];
+  "PATCH /teams/:team_id": [TeamsUpdateEndpoint, TeamsUpdateRequestOptions];
+  "PATCH /teams/:team_id/discussions/:discussion_number": [
+    TeamsUpdateDiscussionEndpoint,
+    TeamsUpdateDiscussionRequestOptions
+  ];
+  "PATCH /teams/:team_id/discussions/:discussion_number/comments/:comment_number": [
+    TeamsUpdateDiscussionCommentEndpoint,
+    TeamsUpdateDiscussionCommentRequestOptions
+  ];
+  "PATCH /teams/:team_id/team-sync/group-mappings": [
+    TeamsCreateOrUpdateIdPGroupConnectionsEndpoint,
+    TeamsCreateOrUpdateIdPGroupConnectionsRequestOptions
+  ];
+  "PATCH /user": [
+    UsersUpdateAuthenticatedEndpoint,
+    UsersUpdateAuthenticatedRequestOptions
+  ];
+  "PATCH /user/email/visibility": [
+    UsersTogglePrimaryEmailVisibilityEndpoint,
+    UsersTogglePrimaryEmailVisibilityRequestOptions
+  ];
+  "PATCH /user/memberships/orgs/:org": [
+    OrgsUpdateMembershipEndpoint,
+    OrgsUpdateMembershipRequestOptions
+  ];
+  "PATCH /user/repository_invitations/:invitation_id": [
+    ReposAcceptInvitationEndpoint,
+    ReposAcceptInvitationRequestOptions
+  ];
+  "POST /app-manifests/:code/conversions": [
+    AppsCreateFromManifestEndpoint,
+    AppsCreateFromManifestRequestOptions
+  ];
+  "POST /app/installations/:installation_id/access_tokens": [
+    AppsCreateInstallationTokenEndpoint,
+    AppsCreateInstallationTokenRequestOptions
+  ];
+  "POST /applications/:client_id/tokens/:access_token": [
+    OauthAuthorizationsResetAuthorizationEndpoint,
+    OauthAuthorizationsResetAuthorizationRequestOptions
+  ];
+  "POST /authorizations": [
+    OauthAuthorizationsCreateAuthorizationEndpoint,
+    OauthAuthorizationsCreateAuthorizationRequestOptions
+  ];
+  "POST /content_references/:content_reference_id/attachments": [
+    AppsCreateContentAttachmentEndpoint,
+    AppsCreateContentAttachmentRequestOptions
+  ];
+  "POST /gists": [GistsCreateEndpoint, GistsCreateRequestOptions];
+  "POST /gists/:gist_id/comments": [
+    GistsCreateCommentEndpoint,
+    GistsCreateCommentRequestOptions
+  ];
+  "POST /gists/:gist_id/forks": [GistsForkEndpoint, GistsForkRequestOptions];
+  "POST /markdown": [MarkdownRenderEndpoint, MarkdownRenderRequestOptions];
+  "POST /markdown/raw": [
+    MarkdownRenderRawEndpoint,
+    MarkdownRenderRawRequestOptions
+  ];
+  "POST /orgs/:org/hooks": [
+    OrgsCreateHookEndpoint,
+    OrgsCreateHookRequestOptions
+  ];
+  "POST /orgs/:org/hooks/:hook_id/pings": [
+    OrgsPingHookEndpoint,
+    OrgsPingHookRequestOptions
+  ];
+  "POST /orgs/:org/invitations": [
+    OrgsCreateInvitationEndpoint,
+    OrgsCreateInvitationRequestOptions
+  ];
+  "POST /orgs/:org/migrations": [
+    MigrationsStartForOrgEndpoint,
+    MigrationsStartForOrgRequestOptions
+  ];
+  "POST /orgs/:org/projects": [
+    ProjectsCreateForOrgEndpoint,
+    ProjectsCreateForOrgRequestOptions
+  ];
+  "POST /orgs/:org/repos": [
+    ReposCreateInOrgEndpoint,
+    ReposCreateInOrgRequestOptions
+  ];
+  "POST /orgs/:org/teams": [TeamsCreateEndpoint, TeamsCreateRequestOptions];
+  "POST /projects/:project_id/columns": [
+    ProjectsCreateColumnEndpoint,
+    ProjectsCreateColumnRequestOptions
+  ];
+  "POST /projects/columns/:column_id/cards": [
+    ProjectsCreateCardEndpoint,
+    ProjectsCreateCardRequestOptions
+  ];
+  "POST /projects/columns/:column_id/moves": [
+    ProjectsMoveColumnEndpoint,
+    ProjectsMoveColumnRequestOptions
+  ];
+  "POST /projects/columns/cards/:card_id/moves": [
+    ProjectsMoveCardEndpoint,
+    ProjectsMoveCardRequestOptions
+  ];
+  "POST /repos/:owner/:repo/branches/:branch/protection/enforce_admins": [
+    ReposAddProtectedBranchAdminEnforcementEndpoint,
+    ReposAddProtectedBranchAdminEnforcementRequestOptions
+  ];
+  "POST /repos/:owner/:repo/branches/:branch/protection/required_signatures": [
+    ReposAddProtectedBranchRequiredSignaturesEndpoint,
+    ReposAddProtectedBranchRequiredSignaturesRequestOptions
+  ];
+  "POST /repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts": [
+    ReposAddProtectedBranchRequiredStatusChecksContextsEndpoint,
+    ReposAddProtectedBranchRequiredStatusChecksContextsRequestOptions
+  ];
+  "POST /repos/:owner/:repo/branches/:branch/protection/restrictions/apps": [
+    ReposAddProtectedBranchAppRestrictionsEndpoint,
+    ReposAddProtectedBranchAppRestrictionsRequestOptions
+  ];
+  "POST /repos/:owner/:repo/branches/:branch/protection/restrictions/teams": [
+    ReposAddProtectedBranchTeamRestrictionsEndpoint,
+    ReposAddProtectedBranchTeamRestrictionsRequestOptions
+  ];
+  "POST /repos/:owner/:repo/branches/:branch/protection/restrictions/users": [
+    ReposAddProtectedBranchUserRestrictionsEndpoint,
+    ReposAddProtectedBranchUserRestrictionsRequestOptions
+  ];
+  "POST /repos/:owner/:repo/check-runs": [
+    ChecksCreateEndpoint,
+    ChecksCreateRequestOptions
+  ];
+  "POST /repos/:owner/:repo/check-suites": [
+    ChecksCreateSuiteEndpoint,
+    ChecksCreateSuiteRequestOptions
+  ];
+  "POST /repos/:owner/:repo/check-suites/:check_suite_id/rerequest": [
+    ChecksRerequestSuiteEndpoint,
+    ChecksRerequestSuiteRequestOptions
+  ];
+  "POST /repos/:owner/:repo/comments/:comment_id/reactions": [
+    ReactionsCreateForCommitCommentEndpoint,
+    ReactionsCreateForCommitCommentRequestOptions
+  ];
+  "POST /repos/:owner/:repo/commits/:commit_sha/comments": [
+    ReposCreateCommitCommentEndpoint,
+    ReposCreateCommitCommentRequestOptions
+  ];
+  "POST /repos/:owner/:repo/deployments": [
+    ReposCreateDeploymentEndpoint,
+    ReposCreateDeploymentRequestOptions
+  ];
+  "POST /repos/:owner/:repo/deployments/:deployment_id/statuses": [
+    ReposCreateDeploymentStatusEndpoint,
+    ReposCreateDeploymentStatusRequestOptions
+  ];
+  "POST /repos/:owner/:repo/dispatches": [
+    ReposCreateDispatchEventEndpoint,
+    ReposCreateDispatchEventRequestOptions
+  ];
+  "POST /repos/:owner/:repo/forks": [
+    ReposCreateForkEndpoint,
+    ReposCreateForkRequestOptions
+  ];
+  "POST /repos/:owner/:repo/git/blobs": [
+    GitCreateBlobEndpoint,
+    GitCreateBlobRequestOptions
+  ];
+  "POST /repos/:owner/:repo/git/commits": [
+    GitCreateCommitEndpoint,
+    GitCreateCommitRequestOptions
+  ];
+  "POST /repos/:owner/:repo/git/refs": [
+    GitCreateRefEndpoint,
+    GitCreateRefRequestOptions
+  ];
+  "POST /repos/:owner/:repo/git/tags": [
+    GitCreateTagEndpoint,
+    GitCreateTagRequestOptions
+  ];
+  "POST /repos/:owner/:repo/git/trees": [
+    GitCreateTreeEndpoint,
+    GitCreateTreeRequestOptions
+  ];
+  "POST /repos/:owner/:repo/hooks": [
+    ReposCreateHookEndpoint,
+    ReposCreateHookRequestOptions
+  ];
+  "POST /repos/:owner/:repo/hooks/:hook_id/pings": [
+    ReposPingHookEndpoint,
+    ReposPingHookRequestOptions
+  ];
+  "POST /repos/:owner/:repo/hooks/:hook_id/tests": [
+    ReposTestPushHookEndpoint,
+    ReposTestPushHookRequestOptions
+  ];
+  "POST /repos/:owner/:repo/issues": [
+    IssuesCreateEndpoint,
+    IssuesCreateRequestOptions
+  ];
+  "POST /repos/:owner/:repo/issues/:issue_number/assignees": [
+    IssuesAddAssigneesEndpoint,
+    IssuesAddAssigneesRequestOptions
+  ];
+  "POST /repos/:owner/:repo/issues/:issue_number/comments": [
+    IssuesCreateCommentEndpoint,
+    IssuesCreateCommentRequestOptions
+  ];
+  "POST /repos/:owner/:repo/issues/:issue_number/labels": [
+    IssuesAddLabelsEndpoint,
+    IssuesAddLabelsRequestOptions
+  ];
+  "POST /repos/:owner/:repo/issues/:issue_number/reactions": [
+    ReactionsCreateForIssueEndpoint,
+    ReactionsCreateForIssueRequestOptions
+  ];
+  "POST /repos/:owner/:repo/issues/comments/:comment_id/reactions": [
+    ReactionsCreateForIssueCommentEndpoint,
+    ReactionsCreateForIssueCommentRequestOptions
+  ];
+  "POST /repos/:owner/:repo/keys": [
+    ReposAddDeployKeyEndpoint,
+    ReposAddDeployKeyRequestOptions
+  ];
+  "POST /repos/:owner/:repo/labels": [
+    IssuesCreateLabelEndpoint,
+    IssuesCreateLabelRequestOptions
+  ];
+  "POST /repos/:owner/:repo/merges": [
+    ReposMergeEndpoint,
+    ReposMergeRequestOptions
+  ];
+  "POST /repos/:owner/:repo/milestones": [
+    IssuesCreateMilestoneEndpoint,
+    IssuesCreateMilestoneRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pages": [
+    ReposEnablePagesSiteEndpoint,
+    ReposEnablePagesSiteRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pages/builds": [
+    ReposRequestPageBuildEndpoint,
+    ReposRequestPageBuildRequestOptions
+  ];
+  "POST /repos/:owner/:repo/projects": [
+    ProjectsCreateForRepoEndpoint,
+    ProjectsCreateForRepoRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pulls": [
+    PullsCreateEndpoint,
+    PullsCreateRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pulls/:pull_number/comments": [
+    PullsCreateCommentEndpoint | PullsCreateCommentReplyEndpoint,
+    PullsCreateCommentRequestOptions | PullsCreateCommentReplyRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies": [
+    PullsCreateReviewCommentReplyEndpoint,
+    PullsCreateReviewCommentReplyRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pulls/:pull_number/requested_reviewers": [
+    PullsCreateReviewRequestEndpoint,
+    PullsCreateReviewRequestRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pulls/:pull_number/reviews": [
+    PullsCreateReviewEndpoint,
+    PullsCreateReviewRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events": [
+    PullsSubmitReviewEndpoint,
+    PullsSubmitReviewRequestOptions
+  ];
+  "POST /repos/:owner/:repo/pulls/comments/:comment_id/reactions": [
+    ReactionsCreateForPullRequestReviewCommentEndpoint,
+    ReactionsCreateForPullRequestReviewCommentRequestOptions
+  ];
+  "POST /repos/:owner/:repo/releases": [
+    ReposCreateReleaseEndpoint,
+    ReposCreateReleaseRequestOptions
+  ];
+  "POST /repos/:owner/:repo/statuses/:sha": [
+    ReposCreateStatusEndpoint,
+    ReposCreateStatusRequestOptions
+  ];
+  "POST /repos/:owner/:repo/transfer": [
+    ReposTransferEndpoint,
+    ReposTransferRequestOptions
+  ];
+  "POST /repos/:template_owner/:template_repo/generate": [
+    ReposCreateUsingTemplateEndpoint,
+    ReposCreateUsingTemplateRequestOptions
+  ];
+  "POST /scim/v2/organizations/:org/Users": [
+    ScimProvisionAndInviteUsersEndpoint | ScimProvisionInviteUsersEndpoint,
+
+      | ScimProvisionAndInviteUsersRequestOptions
+      | ScimProvisionInviteUsersRequestOptions
+  ];
+  "POST /teams/:team_id/discussions": [
+    TeamsCreateDiscussionEndpoint,
+    TeamsCreateDiscussionRequestOptions
+  ];
+  "POST /teams/:team_id/discussions/:discussion_number/comments": [
+    TeamsCreateDiscussionCommentEndpoint,
+    TeamsCreateDiscussionCommentRequestOptions
+  ];
+  "POST /teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions": [
+    ReactionsCreateForTeamDiscussionCommentEndpoint,
+    ReactionsCreateForTeamDiscussionCommentRequestOptions
+  ];
+  "POST /teams/:team_id/discussions/:discussion_number/reactions": [
+    ReactionsCreateForTeamDiscussionEndpoint,
+    ReactionsCreateForTeamDiscussionRequestOptions
+  ];
+  "POST /user/emails": [UsersAddEmailsEndpoint, UsersAddEmailsRequestOptions];
+  "POST /user/gpg_keys": [
+    UsersCreateGpgKeyEndpoint,
+    UsersCreateGpgKeyRequestOptions
+  ];
+  "POST /user/keys": [
+    UsersCreatePublicKeyEndpoint,
+    UsersCreatePublicKeyRequestOptions
+  ];
+  "POST /user/migrations": [
+    MigrationsStartForAuthenticatedUserEndpoint,
+    MigrationsStartForAuthenticatedUserRequestOptions
+  ];
+  "POST /user/projects": [
+    ProjectsCreateForAuthenticatedUserEndpoint,
+    ProjectsCreateForAuthenticatedUserRequestOptions
+  ];
+  "POST /user/repos": [
+    ReposCreateForAuthenticatedUserEndpoint,
+    ReposCreateForAuthenticatedUserRequestOptions
+  ];
+  "PUT /authorizations/clients/:client_id": [
+    OauthAuthorizationsGetOrCreateAuthorizationForAppEndpoint,
+    OauthAuthorizationsGetOrCreateAuthorizationForAppRequestOptions
+  ];
+  "PUT /authorizations/clients/:client_id/:fingerprint": [
+
+      | OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintEndpoint
+      | OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintEndpoint,
+
+      | OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintRequestOptions
+      | OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintRequestOptions
+  ];
+  "PUT /gists/:gist_id/star": [GistsStarEndpoint, GistsStarRequestOptions];
+  "PUT /notifications": [
+    ActivityMarkAsReadEndpoint,
+    ActivityMarkAsReadRequestOptions
+  ];
+  "PUT /notifications/threads/:thread_id/subscription": [
+    ActivitySetThreadSubscriptionEndpoint,
+    ActivitySetThreadSubscriptionRequestOptions
+  ];
+  "PUT /orgs/:org/blocks/:username": [
+    OrgsBlockUserEndpoint,
+    OrgsBlockUserRequestOptions
+  ];
+  "PUT /orgs/:org/interaction-limits": [
+    InteractionsAddOrUpdateRestrictionsForOrgEndpoint,
+    InteractionsAddOrUpdateRestrictionsForOrgRequestOptions
+  ];
+  "PUT /orgs/:org/memberships/:username": [
+    OrgsAddOrUpdateMembershipEndpoint,
+    OrgsAddOrUpdateMembershipRequestOptions
+  ];
+  "PUT /orgs/:org/outside_collaborators/:username": [
+    OrgsConvertMemberToOutsideCollaboratorEndpoint,
+    OrgsConvertMemberToOutsideCollaboratorRequestOptions
+  ];
+  "PUT /orgs/:org/public_members/:username": [
+    OrgsPublicizeMembershipEndpoint,
+    OrgsPublicizeMembershipRequestOptions
+  ];
+  "PUT /projects/:project_id/collaborators/:username": [
+    ProjectsAddCollaboratorEndpoint,
+    ProjectsAddCollaboratorRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/automated-security-fixes": [
+    ReposEnableAutomatedSecurityFixesEndpoint,
+    ReposEnableAutomatedSecurityFixesRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/branches/:branch/protection": [
+    ReposUpdateBranchProtectionEndpoint,
+    ReposUpdateBranchProtectionRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts": [
+    ReposReplaceProtectedBranchRequiredStatusChecksContextsEndpoint,
+    ReposReplaceProtectedBranchRequiredStatusChecksContextsRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/branches/:branch/protection/restrictions/apps": [
+    ReposReplaceProtectedBranchAppRestrictionsEndpoint,
+    ReposReplaceProtectedBranchAppRestrictionsRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/branches/:branch/protection/restrictions/teams": [
+    ReposReplaceProtectedBranchTeamRestrictionsEndpoint,
+    ReposReplaceProtectedBranchTeamRestrictionsRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/branches/:branch/protection/restrictions/users": [
+    ReposReplaceProtectedBranchUserRestrictionsEndpoint,
+    ReposReplaceProtectedBranchUserRestrictionsRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/collaborators/:username": [
+    ReposAddCollaboratorEndpoint,
+    ReposAddCollaboratorRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/contents/:path": [
+
+      | ReposCreateOrUpdateFileEndpoint
+      | ReposCreateFileEndpoint
+      | ReposUpdateFileEndpoint,
+
+      | ReposCreateOrUpdateFileRequestOptions
+      | ReposCreateFileRequestOptions
+      | ReposUpdateFileRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/import": [
+    MigrationsStartImportEndpoint,
+    MigrationsStartImportRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/interaction-limits": [
+    InteractionsAddOrUpdateRestrictionsForRepoEndpoint,
+    InteractionsAddOrUpdateRestrictionsForRepoRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/issues/:issue_number/labels": [
+    IssuesReplaceLabelsEndpoint,
+    IssuesReplaceLabelsRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/issues/:issue_number/lock": [
+    IssuesLockEndpoint,
+    IssuesLockRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/notifications": [
+    ActivityMarkNotificationsAsReadForRepoEndpoint,
+    ActivityMarkNotificationsAsReadForRepoRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/pages": [
+    ReposUpdateInformationAboutPagesSiteEndpoint,
+    ReposUpdateInformationAboutPagesSiteRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/pulls/:pull_number/merge": [
+    PullsMergeEndpoint,
+    PullsMergeRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/pulls/:pull_number/reviews/:review_id": [
+    PullsUpdateReviewEndpoint,
+    PullsUpdateReviewRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals": [
+    PullsDismissReviewEndpoint,
+    PullsDismissReviewRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/pulls/:pull_number/update-branch": [
+    PullsUpdateBranchEndpoint,
+    PullsUpdateBranchRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/subscription": [
+    ActivitySetRepoSubscriptionEndpoint,
+    ActivitySetRepoSubscriptionRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/topics": [
+    ReposReplaceTopicsEndpoint,
+    ReposReplaceTopicsRequestOptions
+  ];
+  "PUT /repos/:owner/:repo/vulnerability-alerts": [
+    ReposEnableVulnerabilityAlertsEndpoint,
+    ReposEnableVulnerabilityAlertsRequestOptions
+  ];
+  "PUT /scim/v2/organizations/:org/Users/:scim_user_id": [
+
+      | ScimReplaceProvisionedUserInformationEndpoint
+      | ScimUpdateProvisionedOrgMembershipEndpoint,
+
+      | ScimReplaceProvisionedUserInformationRequestOptions
+      | ScimUpdateProvisionedOrgMembershipRequestOptions
+  ];
+  "PUT /teams/:team_id/members/:username": [
+    TeamsAddMemberEndpoint,
+    TeamsAddMemberRequestOptions
+  ];
+  "PUT /teams/:team_id/memberships/:username": [
+    TeamsAddOrUpdateMembershipEndpoint,
+    TeamsAddOrUpdateMembershipRequestOptions
+  ];
+  "PUT /teams/:team_id/projects/:project_id": [
+    TeamsAddOrUpdateProjectEndpoint,
+    TeamsAddOrUpdateProjectRequestOptions
+  ];
+  "PUT /teams/:team_id/repos/:owner/:repo": [
+    TeamsAddOrUpdateRepoEndpoint,
+    TeamsAddOrUpdateRepoRequestOptions
+  ];
+  "PUT /user/blocks/:username": [UsersBlockEndpoint, UsersBlockRequestOptions];
+  "PUT /user/following/:username": [
+    UsersFollowEndpoint,
+    UsersFollowRequestOptions
+  ];
+  "PUT /user/installations/:installation_id/repositories/:repository_id": [
+    AppsAddRepoToInstallationEndpoint,
+    AppsAddRepoToInstallationRequestOptions
+  ];
+  "PUT /user/starred/:owner/:repo": [
+    ActivityStarRepoEndpoint,
+    ActivityStarRepoRequestOptions
+  ];
+  "PUT /user/subscriptions/:owner/:repo": [
+    ActivityWatchRepoLegacyEndpoint,
+    ActivityWatchRepoLegacyRequestOptions
+  ];
+}
+
+type AppsGetAuthenticatedEndpoint = {};
+type AppsGetAuthenticatedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsCreateFromManifestEndpoint = {
+  /**
+   * code parameter
+   */
+  code: string;
+};
+type AppsCreateFromManifestRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListInstallationsEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListInstallationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsGetInstallationEndpoint = {
+  /**
+   * installation_id parameter
+   */
+  installation_id: number;
+};
+type AppsGetInstallationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsDeleteInstallationEndpoint = {
+  /**
+   * installation_id parameter
+   */
+  installation_id: number;
+};
+type AppsDeleteInstallationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsCreateInstallationTokenEndpoint = {
+  /**
+   * installation_id parameter
+   */
+  installation_id: number;
+  /**
+   * The `id`s of the repositories that the installation token can access. Providing repository `id`s restricts the access of an installation token to specific repositories. You can use the "[List repositories](https://developer.github.com/v3/apps/installations/#list-repositories)" endpoint to get the `id` of all repositories that an installation can access. For example, you can select specific repositories when creating an installation token to restrict the number of repositories that can be cloned using the token.
+   */
+  repository_ids?: number[];
+  /**
+   * The permissions granted to the access token. The permissions object includes the permission names and their access type. For a complete list of permissions and allowable values, see "[GitHub App permissions](https://developer.github.com/apps/building-github-apps/creating-github-apps-using-url-parameters/#github-app-permissions)."
+   */
+  permissions?: AppsCreateInstallationTokenParamsPermissions;
+};
+type AppsCreateInstallationTokenRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsListGrantsEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OauthAuthorizationsListGrantsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsGetGrantEndpoint = {
+  /**
+   * grant_id parameter
+   */
+  grant_id: number;
+};
+type OauthAuthorizationsGetGrantRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsDeleteGrantEndpoint = {
+  /**
+   * grant_id parameter
+   */
+  grant_id: number;
+};
+type OauthAuthorizationsDeleteGrantRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsRevokeGrantForApplicationEndpoint = {
+  /**
+   * client_id parameter
+   */
+  client_id: string;
+  /**
+   * access_token parameter
+   */
+  access_token: string;
+};
+type OauthAuthorizationsRevokeGrantForApplicationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsCheckAuthorizationEndpoint = {
+  /**
+   * client_id parameter
+   */
+  client_id: string;
+  /**
+   * access_token parameter
+   */
+  access_token: string;
+};
+type OauthAuthorizationsCheckAuthorizationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsResetAuthorizationEndpoint = {
+  /**
+   * client_id parameter
+   */
+  client_id: string;
+  /**
+   * access_token parameter
+   */
+  access_token: string;
+};
+type OauthAuthorizationsResetAuthorizationRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsRevokeAuthorizationForApplicationEndpoint = {
+  /**
+   * client_id parameter
+   */
+  client_id: string;
+  /**
+   * access_token parameter
+   */
+  access_token: string;
+};
+type OauthAuthorizationsRevokeAuthorizationForApplicationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsGetBySlugEndpoint = {
+  /**
+   * app_slug parameter
+   */
+  app_slug: string;
+};
+type AppsGetBySlugRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsListAuthorizationsEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OauthAuthorizationsListAuthorizationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsCreateAuthorizationEndpoint = {
+  /**
+   * A list of scopes that this authorization is in.
+   */
+  scopes?: string[];
+  /**
+   * A note to remind you what the OAuth token is for. Tokens not associated with a specific OAuth application (i.e. personal access tokens) must have a unique note.
+   */
+  note: string;
+  /**
+   * A URL to remind you what app the OAuth token is for.
+   */
+  note_url?: string;
+  /**
+   * The 20 character OAuth app client key for which to create the token.
+   */
+  client_id?: string;
+  /**
+   * The 40 character OAuth app client secret for which to create the token.
+   */
+  client_secret?: string;
+  /**
+   * A unique string to distinguish an authorization from others created for the same client ID and user.
+   */
+  fingerprint?: string;
+};
+type OauthAuthorizationsCreateAuthorizationRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsGetOrCreateAuthorizationForAppEndpoint = {
+  /**
+   * client_id parameter
+   */
+  client_id: string;
+  /**
+   * The 40 character OAuth app client secret associated with the client ID specified in the URL.
+   */
+  client_secret: string;
+  /**
+   * A list of scopes that this authorization is in.
+   */
+  scopes?: string[];
+  /**
+   * A note to remind you what the OAuth token is for.
+   */
+  note?: string;
+  /**
+   * A URL to remind you what app the OAuth token is for.
+   */
+  note_url?: string;
+  /**
+   * A unique string to distinguish an authorization from others created for the same client and user. If provided, this API is functionally equivalent to [Get-or-create an authorization for a specific app and fingerprint](https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint).
+   */
+  fingerprint?: string;
+};
+type OauthAuthorizationsGetOrCreateAuthorizationForAppRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintEndpoint = {
+  /**
+   * client_id parameter
+   */
+  client_id: string;
+  /**
+   * fingerprint parameter
+   */
+  fingerprint: string;
+  /**
+   * The 40 character OAuth app client secret associated with the client ID specified in the URL.
+   */
+  client_secret: string;
+  /**
+   * A list of scopes that this authorization is in.
+   */
+  scopes?: string[];
+  /**
+   * A note to remind you what the OAuth token is for.
+   */
+  note?: string;
+  /**
+   * A URL to remind you what app the OAuth token is for.
+   */
+  note_url?: string;
+};
+type OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintEndpoint = {
+  /**
+   * client_id parameter
+   */
+  client_id: string;
+  /**
+   * fingerprint parameter
+   */
+  fingerprint: string;
+  /**
+   * The 40 character OAuth app client secret associated with the client ID specified in the URL.
+   */
+  client_secret: string;
+  /**
+   * A list of scopes that this authorization is in.
+   */
+  scopes?: string[];
+  /**
+   * A note to remind you what the OAuth token is for.
+   */
+  note?: string;
+  /**
+   * A URL to remind you what app the OAuth token is for.
+   */
+  note_url?: string;
+};
+type OauthAuthorizationsGetOrCreateAuthorizationForAppFingerprintRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsGetAuthorizationEndpoint = {
+  /**
+   * authorization_id parameter
+   */
+  authorization_id: number;
+};
+type OauthAuthorizationsGetAuthorizationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsUpdateAuthorizationEndpoint = {
+  /**
+   * authorization_id parameter
+   */
+  authorization_id: number;
+  /**
+   * Replaces the authorization scopes with these.
+   */
+  scopes?: string[];
+  /**
+   * A list of scopes to add to this authorization.
+   */
+  add_scopes?: string[];
+  /**
+   * A list of scopes to remove from this authorization.
+   */
+  remove_scopes?: string[];
+  /**
+   * A note to remind you what the OAuth token is for. Tokens not associated with a specific OAuth application (i.e. personal access tokens) must have a unique note.
+   */
+  note?: string;
+  /**
+   * A URL to remind you what app the OAuth token is for.
+   */
+  note_url?: string;
+  /**
+   * A unique string to distinguish an authorization from others created for the same client ID and user.
+   */
+  fingerprint?: string;
+};
+type OauthAuthorizationsUpdateAuthorizationRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OauthAuthorizationsDeleteAuthorizationEndpoint = {
+  /**
+   * authorization_id parameter
+   */
+  authorization_id: number;
+};
+type OauthAuthorizationsDeleteAuthorizationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type CodesOfConductListConductCodesEndpoint = {};
+type CodesOfConductListConductCodesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type CodesOfConductGetConductCodeEndpoint = {
+  /**
+   * key parameter
+   */
+  key: string;
+};
+type CodesOfConductGetConductCodeRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsCreateContentAttachmentEndpoint = {
+  /**
+   * content_reference_id parameter
+   */
+  content_reference_id: number;
+  /**
+   * The title of the content attachment displayed in the body or comment of an issue or pull request.
+   */
+  title: string;
+  /**
+   * The body text of the content attachment displayed in the body or comment of an issue or pull request. This parameter supports markdown.
+   */
+  body: string;
+};
+type AppsCreateContentAttachmentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type EmojisGetEndpoint = {};
+type EmojisGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListPublicEventsEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListPublicEventsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListFeedsEndpoint = {};
+type ActivityListFeedsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsListEndpoint = {
+  /**
+   * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GistsListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsCreateEndpoint = {
+  /**
+   * The filenames and content of each file in the gist. The keys in the `files` object represent the filename and have the type `string`.
+   */
+  files: GistsCreateParamsFiles;
+  /**
+   * A descriptive name for this gist.
+   */
+  description?: string;
+  /**
+   * When `true`, the gist will be public and available for anyone to see.
+   */
+  public?: boolean;
+};
+type GistsCreateRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsListPublicEndpoint = {
+  /**
+   * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GistsListPublicRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsListStarredEndpoint = {
+  /**
+   * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GistsListStarredRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsGetEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+};
+type GistsGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsUpdateEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * A descriptive name for this gist.
+   */
+  description?: string;
+  /**
+   * The filenames and content that make up this gist.
+   */
+  files?: GistsUpdateParamsFiles;
+};
+type GistsUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsDeleteEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+};
+type GistsDeleteRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsListCommentsEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GistsListCommentsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsCreateCommentEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * The comment text.
+   */
+  body: string;
+};
+type GistsCreateCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsGetCommentEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+};
+type GistsGetCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsUpdateCommentEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The comment text.
+   */
+  body: string;
+};
+type GistsUpdateCommentRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsDeleteCommentEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+};
+type GistsDeleteCommentRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsListCommitsEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GistsListCommitsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsForkEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+};
+type GistsForkRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsListForksEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GistsListForksRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsStarEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+};
+type GistsStarRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsUnstarEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+};
+type GistsUnstarRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsCheckIsStarredEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+};
+type GistsCheckIsStarredRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsGetRevisionEndpoint = {
+  /**
+   * gist_id parameter
+   */
+  gist_id: string;
+  /**
+   * sha parameter
+   */
+  sha: string;
+};
+type GistsGetRevisionRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitignoreListTemplatesEndpoint = {};
+type GitignoreListTemplatesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitignoreGetTemplateEndpoint = {
+  /**
+   * name parameter
+   */
+  name: string;
+};
+type GitignoreGetTemplateRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListReposEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListReposRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListEndpoint = {
+  /**
+   * Indicates which sorts of issues to return. Can be one of:
+   * \* `assigned`: Issues assigned to you
+   * \* `created`: Issues created by you
+   * \* `mentioned`: Issues mentioning you
+   * \* `subscribed`: Issues you're subscribed to updates for
+   * \* `all`: All issues the authenticated user can see, regardless of participation or creation
+   */
+  filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all";
+  /**
+   * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * A list of comma separated label names. Example: `bug,ui,@high`
+   */
+  labels?: string;
+  /**
+   * What to sort results by. Can be either `created`, `updated`, `comments`.
+   */
+  sort?: "created" | "updated" | "comments";
+  /**
+   * The direction of the sort. Can be either `asc` or `desc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchIssuesLegacyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repository parameter
+   */
+  repository: string;
+  /**
+   * Indicates the state of the issues to return. Can be either `open` or `closed`.
+   */
+  state: "open" | "closed";
+  /**
+   * The search term.
+   */
+  keyword: string;
+};
+type SearchIssuesLegacyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchReposLegacyEndpoint = {
+  /**
+   * The search term.
+   */
+  keyword: string;
+  /**
+   * Filter results by language.
+   */
+  language?: string;
+  /**
+   * The page number to fetch.
+   */
+  start_page?: string;
+  /**
+   * The sort field. One of `stars`, `forks`, or `updated`. Default: results are sorted by best match.
+   */
+  sort?: "stars" | "forks" | "updated";
+  /**
+   * The sort field. if `sort` param is provided. Can be either `asc` or `desc`.
+   */
+  order?: "asc" | "desc";
+};
+type SearchReposLegacyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchEmailLegacyEndpoint = {
+  /**
+   * The email address.
+   */
+  email: string;
+};
+type SearchEmailLegacyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchUsersLegacyEndpoint = {
+  /**
+   * The search term.
+   */
+  keyword: string;
+  /**
+   * The page number to fetch.
+   */
+  start_page?: string;
+  /**
+   * The sort field. One of `stars`, `forks`, or `updated`. Default: results are sorted by best match.
+   */
+  sort?: "stars" | "forks" | "updated";
+  /**
+   * The sort field. if `sort` param is provided. Can be either `asc` or `desc`.
+   */
+  order?: "asc" | "desc";
+};
+type SearchUsersLegacyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type LicensesListCommonlyUsedEndpoint = {};
+type LicensesListCommonlyUsedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type LicensesListEndpoint = {};
+type LicensesListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type LicensesGetEndpoint = {
+  /**
+   * license parameter
+   */
+  license: string;
+};
+type LicensesGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MarkdownRenderEndpoint = {
+  /**
+   * The Markdown text to render in HTML. Markdown content must be 400 KB or less.
+   */
+  text: string;
+  /**
+   * The rendering mode. Can be either:
+   * \* `markdown` to render a document in plain Markdown, just like README.md files are rendered.
+   * \* `gfm` to render a document in [GitHub Flavored Markdown](https://github.github.com/gfm/), which creates links for user mentions as well as references to SHA-1 hashes, issues, and pull requests.
+   */
+  mode?: "markdown" | "gfm";
+  /**
+   * The repository context to use when creating references in `gfm` mode. Omit this parameter when using `markdown` mode.
+   */
+  context?: string;
+};
+type MarkdownRenderRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MarkdownRenderRawEndpoint = {
+  /**
+   * data parameter
+   */
+  data: string;
+};
+type MarkdownRenderRawRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsCheckAccountIsAssociatedWithAnyEndpoint = {
+  /**
+   * account_id parameter
+   */
+  account_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsCheckAccountIsAssociatedWithAnyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListPlansEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListPlansRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListAccountsUserOrOrgOnPlanEndpoint = {
+  /**
+   * plan_id parameter
+   */
+  plan_id: number;
+  /**
+   * Sorts the GitHub accounts by the date they were created or last updated. Can be one of `created` or `updated`.
+   */
+  sort?: "created" | "updated";
+  /**
+   * To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListAccountsUserOrOrgOnPlanRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsCheckAccountIsAssociatedWithAnyStubbedEndpoint = {
+  /**
+   * account_id parameter
+   */
+  account_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsCheckAccountIsAssociatedWithAnyStubbedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListPlansStubbedEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListPlansStubbedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListAccountsUserOrOrgOnPlanStubbedEndpoint = {
+  /**
+   * plan_id parameter
+   */
+  plan_id: number;
+  /**
+   * Sorts the GitHub accounts by the date they were created or last updated. Can be one of `created` or `updated`.
+   */
+  sort?: "created" | "updated";
+  /**
+   * To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListAccountsUserOrOrgOnPlanStubbedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MetaGetEndpoint = {};
+type MetaGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListPublicEventsForRepoNetworkEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListPublicEventsForRepoNetworkRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListNotificationsEndpoint = {
+  /**
+   * If `true`, show notifications marked as read.
+   */
+  all?: boolean;
+  /**
+   * If `true`, only shows notifications in which the user is directly participating or mentioned.
+   */
+  participating?: boolean;
+  /**
+   * Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  before?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListNotificationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityMarkAsReadEndpoint = {
+  /**
+   * Describes the last point that notifications were checked. Anything updated since this time will not be updated. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Default: The current timestamp.
+   */
+  last_read_at?: string;
+};
+type ActivityMarkAsReadRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityGetThreadEndpoint = {
+  /**
+   * thread_id parameter
+   */
+  thread_id: number;
+};
+type ActivityGetThreadRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityMarkThreadAsReadEndpoint = {
+  /**
+   * thread_id parameter
+   */
+  thread_id: number;
+};
+type ActivityMarkThreadAsReadRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityGetThreadSubscriptionEndpoint = {
+  /**
+   * thread_id parameter
+   */
+  thread_id: number;
+};
+type ActivityGetThreadSubscriptionRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivitySetThreadSubscriptionEndpoint = {
+  /**
+   * thread_id parameter
+   */
+  thread_id: number;
+  /**
+   * Unsubscribes and subscribes you to a conversation. Set `ignored` to `true` to block all notifications from this thread.
+   */
+  ignored?: boolean;
+};
+type ActivitySetThreadSubscriptionRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityDeleteThreadSubscriptionEndpoint = {
+  /**
+   * thread_id parameter
+   */
+  thread_id: number;
+};
+type ActivityDeleteThreadSubscriptionRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListEndpoint = {
+  /**
+   * The integer ID of the last Organization that you've seen.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsGetEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type OrgsGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsUpdateEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Billing email address. This address is not publicized.
+   */
+  billing_email?: string;
+  /**
+   * The company name.
+   */
+  company?: string;
+  /**
+   * The publicly visible email address.
+   */
+  email?: string;
+  /**
+   * The location.
+   */
+  location?: string;
+  /**
+   * The shorthand name of the company.
+   */
+  name?: string;
+  /**
+   * The description of the company.
+   */
+  description?: string;
+  /**
+   * Toggles whether organization projects are enabled for the organization.
+   */
+  has_organization_projects?: boolean;
+  /**
+   * Toggles whether repository projects are enabled for repositories that belong to the organization.
+   */
+  has_repository_projects?: boolean;
+  /**
+   * Default permission level members have for organization repositories:
+   * \* `read` - can pull, but not push to or administer this repository.
+   * \* `write` - can pull and push, but not administer this repository.
+   * \* `admin` - can pull, push, and administer this repository.
+   * \* `none` - no permissions granted by default.
+   */
+  default_repository_permission?: "read" | "write" | "admin" | "none";
+  /**
+   * Toggles the ability of non-admin organization members to create repositories. Can be one of:
+   * \* `true` - all organization members can create repositories.
+   * \* `false` - only admin members can create repositories.
+   * Default: `true`
+   * **Note:** Another parameter can override the this parameter. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details. **Note:** Another parameter can override the this parameter. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details.
+   */
+  members_can_create_repositories?: boolean;
+  /**
+   * Specifies which types of repositories non-admin organization members can create. Can be one of:
+   * \* `all` - all organization members can create public and private repositories.
+   * \* `private` - members can create private repositories. This option is only available to repositories that are part of an organization on [GitHub Business Cloud](https://github.com/pricing/business-cloud).
+   * \* `none` - only admin members can create repositories.
+   * **Note:** Using this parameter will override values set in `members_can_create_repositories`. See [this note](https://developer.github.com/v3/orgs/#members_can_create_repositories) for details.
+   */
+  members_allowed_repository_creation_type?: "all" | "private" | "none";
+};
+type OrgsUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListBlockedUsersEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type OrgsListBlockedUsersRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsCheckBlockedUserEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsCheckBlockedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsBlockUserEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsBlockUserRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsUnblockUserEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsUnblockUserRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListCredentialAuthorizationsEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type OrgsListCredentialAuthorizationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsRemoveCredentialAuthorizationEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * credential_id parameter
+   */
+  credential_id: number;
+};
+type OrgsRemoveCredentialAuthorizationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListPublicEventsForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListPublicEventsForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListHooksEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListHooksRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsCreateHookEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Must be passed as "web".
+   */
+  name: string;
+  /**
+   * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/orgs/hooks/#create-hook-config-params).
+   */
+  config: OrgsCreateHookParamsConfig;
+  /**
+   * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.
+   */
+  events?: string[];
+  /**
+   * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+   */
+  active?: boolean;
+};
+type OrgsCreateHookRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsGetHookEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+};
+type OrgsGetHookRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsUpdateHookEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+  /**
+   * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/orgs/hooks/#update-hook-config-params).
+   */
+  config?: OrgsUpdateHookParamsConfig;
+  /**
+   * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.
+   */
+  events?: string[];
+  /**
+   * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+   */
+  active?: boolean;
+};
+type OrgsUpdateHookRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsDeleteHookEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+};
+type OrgsDeleteHookRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsPingHookEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+};
+type OrgsPingHookRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsGetOrgInstallationEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type AppsGetOrgInstallationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsFindOrgInstallationEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type AppsFindOrgInstallationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type InteractionsGetRestrictionsForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type InteractionsGetRestrictionsForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type InteractionsAddOrUpdateRestrictionsForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Specifies the group of GitHub users who can comment, open issues, or create pull requests in public repositories for the given organization. Must be one of: `existing_users`, `contributors_only`, or `collaborators_only`.
+   */
+  limit: "existing_users" | "contributors_only" | "collaborators_only";
+};
+type InteractionsAddOrUpdateRestrictionsForOrgRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type InteractionsRemoveRestrictionsForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type InteractionsRemoveRestrictionsForOrgRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListPendingInvitationsEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListPendingInvitationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsCreateInvitationEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * **Required unless you provide `email`**. GitHub user ID for the person you are inviting.
+   */
+  invitee_id?: number;
+  /**
+   * **Required unless you provide `invitee_id`**. Email address of the person you are inviting, which can be an existing GitHub user.
+   */
+  email?: string;
+  /**
+   * Specify role for new member. Can be one of:
+   * \* `admin` - Organization owners with full administrative rights to the organization and complete access to all repositories and teams.
+   * \* `direct_member` - Non-owner organization members with ability to see other members and join teams by invitation.
+   * \* `billing_manager` - Non-owner organization members with ability to manage the billing settings of your organization.
+   */
+  role?: "admin" | "direct_member" | "billing_manager";
+  /**
+   * Specify IDs for the teams you want to invite new members to.
+   */
+  team_ids?: number[];
+};
+type OrgsCreateInvitationRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListInvitationTeamsEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * invitation_id parameter
+   */
+  invitation_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListInvitationTeamsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Indicates which sorts of issues to return. Can be one of:
+   * \* `assigned`: Issues assigned to you
+   * \* `created`: Issues created by you
+   * \* `mentioned`: Issues mentioning you
+   * \* `subscribed`: Issues you're subscribed to updates for
+   * \* `all`: All issues the authenticated user can see, regardless of participation or creation
+   */
+  filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all";
+  /**
+   * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * A list of comma separated label names. Example: `bug,ui,@high`
+   */
+  labels?: string;
+  /**
+   * What to sort results by. Can be either `created`, `updated`, `comments`.
+   */
+  sort?: "created" | "updated" | "comments";
+  /**
+   * The direction of the sort. Can be either `asc` or `desc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListMembersEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Filter members returned in the list. Can be one of:
+   * \* `2fa_disabled` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners.
+   * \* `all` - All members the authenticated user can see.
+   */
+  filter?: "2fa_disabled" | "all";
+  /**
+   * Filter members returned by their role. Can be one of:
+   * \* `all` - All members of the organization, regardless of role.
+   * \* `admin` - Organization owners.
+   * \* `member` - Non-owner organization members.
+   */
+  role?: "all" | "admin" | "member";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListMembersRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsCheckMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsCheckMembershipRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsRemoveMemberEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsRemoveMemberRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsGetMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsGetMembershipRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsAddOrUpdateMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * The role to give the user in the organization. Can be one of:
+   * \* `admin` - The user will become an owner of the organization.
+   * \* `member` - The user will become a non-owner member of the organization.
+   */
+  role?: "admin" | "member";
+};
+type OrgsAddOrUpdateMembershipRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsRemoveMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsRemoveMembershipRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsStartForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * A list of arrays indicating which repositories should be migrated.
+   */
+  repositories: string[];
+  /**
+   * Indicates whether repositories should be locked (to prevent manipulation) while migrating data.
+   */
+  lock_repositories?: boolean;
+  /**
+   * Indicates whether attachments should be excluded from the migration (to reduce migration archive file size).
+   */
+  exclude_attachments?: boolean;
+};
+type MigrationsStartForOrgRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsListForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type MigrationsListForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsGetStatusForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+};
+type MigrationsGetStatusForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsGetArchiveForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+};
+type MigrationsGetArchiveForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsDeleteArchiveForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+};
+type MigrationsDeleteArchiveForOrgRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsUnlockRepoForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+  /**
+   * repo_name parameter
+   */
+  repo_name: string;
+};
+type MigrationsUnlockRepoForOrgRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListOutsideCollaboratorsEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Filter the list of outside collaborators. Can be one of:
+   * \* `2fa_disabled`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled.
+   * \* `all`: All outside collaborators.
+   */
+  filter?: "2fa_disabled" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListOutsideCollaboratorsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsRemoveOutsideCollaboratorEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsRemoveOutsideCollaboratorRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsConvertMemberToOutsideCollaboratorEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsConvertMemberToOutsideCollaboratorRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsListForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ProjectsListForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsCreateForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * The name of the project.
+   */
+  name: string;
+  /**
+   * The description of the project.
+   */
+  body?: string;
+};
+type ProjectsCreateForOrgRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListPublicMembersEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListPublicMembersRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsCheckPublicMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsCheckPublicMembershipRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsPublicizeMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsPublicizeMembershipRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsConcealMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type OrgsConcealMembershipRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Can be one of `all`, `public`, `private`, `forks`, `sources`, `member`.
+   */
+  type?: "all" | "public" | "private" | "forks" | "sources" | "member";
+  /**
+   * Can be one of `created`, `updated`, `pushed`, `full_name`.
+   */
+  sort?: "created" | "updated" | "pushed" | "full_name";
+  /**
+   * Can be one of `asc` or `desc`. Default: when using `full_name`: `asc`, otherwise `desc`
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateInOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * The name of the repository.
+   */
+  name: string;
+  /**
+   * A short description of the repository.
+   */
+  description?: string;
+  /**
+   * A URL with more information about the repository.
+   */
+  homepage?: string;
+  /**
+   * Either `true` to create a private repository or `false` to create a public one. Creating private repositories requires a paid GitHub account.
+   */
+  private?: boolean;
+  /**
+   * Either `true` to enable issues for this repository or `false` to disable them.
+   */
+  has_issues?: boolean;
+  /**
+   * Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.
+   */
+  has_projects?: boolean;
+  /**
+   * Either `true` to enable the wiki for this repository or `false` to disable it.
+   */
+  has_wiki?: boolean;
+  /**
+   * Either `true` to make this repo available as a template repository or `false` to prevent it.
+   */
+  is_template?: boolean;
+  /**
+   * The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization.
+   */
+  team_id?: number;
+  /**
+   * Pass `true` to create an initial commit with empty README.
+   */
+  auto_init?: boolean;
+  /**
+   * Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, "Haskell".
+   */
+  gitignore_template?: string;
+  /**
+   * Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the `license_template` string. For example, "mit" or "mpl-2.0".
+   */
+  license_template?: string;
+  /**
+   * Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.
+   */
+  allow_squash_merge?: boolean;
+  /**
+   * Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.
+   */
+  allow_merge_commit?: boolean;
+  /**
+   * Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.
+   */
+  allow_rebase_merge?: boolean;
+};
+type ReposCreateInOrgRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListIdPGroupsForOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListIdPGroupsForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsCreateEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * The name of the team.
+   */
+  name: string;
+  /**
+   * The description of the team.
+   */
+  description?: string;
+  /**
+   * The logins of organization members to add as maintainers of the team.
+   */
+  maintainers?: string[];
+  /**
+   * The full name (e.g., "organization-name/repository-name") of repositories to add the team to.
+   */
+  repo_names?: string[];
+  /**
+   * The level of privacy this team should have. The options are:
+   * **For a non-nested team:**
+   * \* `secret` - only visible to organization owners and members of this team.
+   * \* `closed` - visible to all members of this organization.
+   * Default: `secret`
+   * **For a parent or child team:**
+   * \* `closed` - visible to all members of this organization.
+   * Default for child team: `closed`
+   * **Note**: You must pass the `hellcat-preview` media type to set privacy default to `closed` for child teams.
+   */
+  privacy?: "secret" | "closed";
+  /**
+   * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of:
+   * \* `pull` - team members can pull, but not push to or administer newly-added repositories.
+   * \* `push` - team members can pull and push, but not administer newly-added repositories.
+   * \* `admin` - team members can pull, push and administer newly-added repositories.
+   */
+  permission?: "pull" | "push" | "admin";
+  /**
+   * The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.
+   */
+  parent_team_id?: number;
+};
+type TeamsCreateRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsGetByNameEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * team_slug parameter
+   */
+  team_slug: string;
+};
+type TeamsGetByNameRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsGetCardEndpoint = {
+  /**
+   * card_id parameter
+   */
+  card_id: number;
+};
+type ProjectsGetCardRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsUpdateCardEndpoint = {
+  /**
+   * card_id parameter
+   */
+  card_id: number;
+  /**
+   * The card's note content. Only valid for cards without another type of content, so this cannot be specified if the card already has a `content_id` and `content_type`.
+   */
+  note?: string;
+  /**
+   * Use `true` to archive a project card. Specify `false` if you need to restore a previously archived project card.
+   */
+  archived?: boolean;
+};
+type ProjectsUpdateCardRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsDeleteCardEndpoint = {
+  /**
+   * card_id parameter
+   */
+  card_id: number;
+};
+type ProjectsDeleteCardRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsMoveCardEndpoint = {
+  /**
+   * card_id parameter
+   */
+  card_id: number;
+  /**
+   * Can be one of `top`, `bottom`, or `after:<card_id>`, where `<card_id>` is the `id` value of a card in the same column, or in the new column specified by `column_id`.
+   */
+  position: string;
+  /**
+   * The `id` value of a column in the same project.
+   */
+  column_id?: number;
+};
+type ProjectsMoveCardRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsGetColumnEndpoint = {
+  /**
+   * column_id parameter
+   */
+  column_id: number;
+};
+type ProjectsGetColumnRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsUpdateColumnEndpoint = {
+  /**
+   * column_id parameter
+   */
+  column_id: number;
+  /**
+   * The new name of the column.
+   */
+  name: string;
+};
+type ProjectsUpdateColumnRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsDeleteColumnEndpoint = {
+  /**
+   * column_id parameter
+   */
+  column_id: number;
+};
+type ProjectsDeleteColumnRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsListCardsEndpoint = {
+  /**
+   * column_id parameter
+   */
+  column_id: number;
+  /**
+   * Filters the project cards that are returned by the card's state. Can be one of `all`,`archived`, or `not_archived`.
+   */
+  archived_state?: "all" | "archived" | "not_archived";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ProjectsListCardsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsCreateCardEndpoint = {
+  /**
+   * column_id parameter
+   */
+  column_id: number;
+  /**
+   * The card's note content. Only valid for cards without another type of content, so you must omit when specifying `content_id` and `content_type`.
+   */
+  note?: string;
+  /**
+   * The issue or pull request id you want to associate with this card. You can use the [List issues for a repository](https://developer.github.com/v3/issues/#list-issues-for-a-repository) and [List pull requests](https://developer.github.com/v3/pulls/#list-pull-requests) endpoints to find this id.
+   * **Note:** Depending on whether you use the issue id or pull request id, you will need to specify `Issue` or `PullRequest` as the `content_type`.
+   */
+  content_id?: number;
+  /**
+   * **Required if you provide `content_id`**. The type of content you want to associate with this card. Use `Issue` when `content_id` is an issue id and use `PullRequest` when `content_id` is a pull request id.
+   */
+  content_type?: string;
+};
+type ProjectsCreateCardRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsMoveColumnEndpoint = {
+  /**
+   * column_id parameter
+   */
+  column_id: number;
+  /**
+   * Can be one of `first`, `last`, or `after:<column_id>`, where `<column_id>` is the `id` value of a column in the same project.
+   */
+  position: string;
+};
+type ProjectsMoveColumnRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsGetEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ProjectsGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsUpdateEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * The name of the project.
+   */
+  name?: string;
+  /**
+   * The description of the project.
+   */
+  body?: string;
+  /**
+   * State of the project. Either `open` or `closed`.
+   */
+  state?: "open" | "closed";
+  /**
+   * The permission level that determines whether all members of the project's organization can see and/or make changes to the project. Setting `organization_permission` is only available for organization projects. If an organization member belongs to a team with a higher level of access or is a collaborator with a higher level of access, their permission level is not lowered by `organization_permission`. For information on changing access for a team or collaborator, see [Add or update team project](https://developer.github.com/v3/teams/#add-or-update-team-project) or [Add user as a collaborator](https://developer.github.com/v3/projects/collaborators/#add-user-as-a-collaborator).
+   *
+   * **Note:** Updating a project's `organization_permission` requires `admin` access to the project.
+   *
+   * Can be one of:
+   * \* `read` - Organization members can read, but not write to or administer this project.
+   * \* `write` - Organization members can read and write, but not administer this project.
+   * \* `admin` - Organization members can read, write and administer this project.
+   * \* `none` - Organization members can only see this project if it is public.
+   */
+  organization_permission?: string;
+  /**
+   * Sets the visibility of a project board. Setting `private` is only available for organization and user projects. **Note:** Updating a project's visibility requires `admin` access to the project.
+   *
+   * Can be one of:
+   * \* `false` - Anyone can see the project.
+   * \* `true` - Only the user can view a project board created on a user account. Organization members with the appropriate `organization_permission` can see project boards in an organization account.
+   */
+  private?: boolean;
+};
+type ProjectsUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsDeleteEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+};
+type ProjectsDeleteRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsListCollaboratorsEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * Filters the collaborators by their affiliation. Can be one of:
+   * \* `outside`: Outside collaborators of a project that are not a member of the project's organization.
+   * \* `direct`: Collaborators with permissions to a project, regardless of organization membership status.
+   * \* `all`: All collaborators the authenticated user can see.
+   */
+  affiliation?: "outside" | "direct" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ProjectsListCollaboratorsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsAddCollaboratorEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * The permission to grant the collaborator. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)." Can be one of:
+   * \* `read` - can read, but not write to or administer this project.
+   * \* `write` - can read and write, but not administer this project.
+   * \* `admin` - can read, write and administer this project.
+   */
+  permission?: "read" | "write" | "admin";
+};
+type ProjectsAddCollaboratorRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsRemoveCollaboratorEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type ProjectsRemoveCollaboratorRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsReviewUserPermissionLevelEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type ProjectsReviewUserPermissionLevelRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsListColumnsEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ProjectsListColumnsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsCreateColumnEndpoint = {
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * The name of the column.
+   */
+  name: string;
+};
+type ProjectsCreateColumnRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type RateLimitGetEndpoint = {};
+type RateLimitGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsDeleteEndpoint = {
+  /**
+   * reaction_id parameter
+   */
+  reaction_id: number;
+};
+type ReactionsDeleteRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the repository.
+   */
+  name?: string;
+  /**
+   * A short description of the repository.
+   */
+  description?: string;
+  /**
+   * A URL with more information about the repository.
+   */
+  homepage?: string;
+  /**
+   * Either `true` to make the repository private or `false` to make it public. Creating private repositories requires a paid GitHub account. Default: `false`.
+   * **Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. **Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private.
+   */
+  private?: boolean;
+  /**
+   * Either `true` to enable issues for this repository or `false` to disable them.
+   */
+  has_issues?: boolean;
+  /**
+   * Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.
+   */
+  has_projects?: boolean;
+  /**
+   * Either `true` to enable the wiki for this repository or `false` to disable it.
+   */
+  has_wiki?: boolean;
+  /**
+   * Either `true` to make this repo available as a template repository or `false` to prevent it.
+   */
+  is_template?: boolean;
+  /**
+   * Updates the default branch for this repository.
+   */
+  default_branch?: string;
+  /**
+   * Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.
+   */
+  allow_squash_merge?: boolean;
+  /**
+   * Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.
+   */
+  allow_merge_commit?: boolean;
+  /**
+   * Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.
+   */
+  allow_rebase_merge?: boolean;
+  /**
+   * `true` to archive this repository. **Note**: You cannot unarchive repositories through the API.
+   */
+  archived?: boolean;
+};
+type ReposUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposDeleteRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListAssigneesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListAssigneesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesCheckAssigneeEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * assignee parameter
+   */
+  assignee: string;
+};
+type IssuesCheckAssigneeRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposEnableAutomatedSecurityFixesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposEnableAutomatedSecurityFixesRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDisableAutomatedSecurityFixesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposDisableAutomatedSecurityFixesRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListBranchesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Setting to `true` returns only protected branches. When set to `false`, only unprotected branches are returned. Omitting this parameter returns all branches.
+   */
+  protected?: boolean;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListBranchesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetBranchRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetBranchProtectionEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetBranchProtectionRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateBranchProtectionEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * Require status checks to pass before merging. Set to `null` to disable.
+   */
+  required_status_checks: ReposUpdateBranchProtectionParamsRequiredStatusChecks | null;
+  /**
+   * Enforce all configured restrictions for administrators. Set to `true` to enforce required status checks for repository administrators. Set to `null` to disable.
+   */
+  enforce_admins: boolean | null;
+  /**
+   * Require at least one approving review on a pull request, before merging. Set to `null` to disable.
+   */
+  required_pull_request_reviews: ReposUpdateBranchProtectionParamsRequiredPullRequestReviews | null;
+  /**
+   * Restrict who can push to this branch. User, app, and team `restrictions` are only available for organization-owned repositories. Set to `null` to disable.
+   */
+  restrictions: ReposUpdateBranchProtectionParamsRestrictions | null;
+};
+type ReposUpdateBranchProtectionRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveBranchProtectionEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposRemoveBranchProtectionRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetProtectedBranchAdminEnforcementEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetProtectedBranchAdminEnforcementRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddProtectedBranchAdminEnforcementEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposAddProtectedBranchAdminEnforcementRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchAdminEnforcementEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposRemoveProtectedBranchAdminEnforcementRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetProtectedBranchPullRequestReviewEnforcementEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetProtectedBranchPullRequestReviewEnforcementRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateProtectedBranchPullRequestReviewEnforcementEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * Specify which users and teams can dismiss pull request reviews. Pass an empty `dismissal_restrictions` object to disable. User and team `dismissal_restrictions` are only available for organization-owned repositories. Omit this parameter for personal repositories.
+   */
+  dismissal_restrictions?: ReposUpdateProtectedBranchPullRequestReviewEnforcementParamsDismissalRestrictions;
+  /**
+   * Set to `true` if you want to automatically dismiss approving reviews when someone pushes a new commit.
+   */
+  dismiss_stale_reviews?: boolean;
+  /**
+   * Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) have reviewed.
+   */
+  require_code_owner_reviews?: boolean;
+  /**
+   * Specifies the number of reviewers required to approve pull requests. Use a number between 1 and 6.
+   */
+  required_approving_review_count?: number;
+};
+type ReposUpdateProtectedBranchPullRequestReviewEnforcementRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchPullRequestReviewEnforcementEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposRemoveProtectedBranchPullRequestReviewEnforcementRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetProtectedBranchRequiredSignaturesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetProtectedBranchRequiredSignaturesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddProtectedBranchRequiredSignaturesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposAddProtectedBranchRequiredSignaturesRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchRequiredSignaturesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposRemoveProtectedBranchRequiredSignaturesRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetProtectedBranchRequiredStatusChecksEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetProtectedBranchRequiredStatusChecksRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateProtectedBranchRequiredStatusChecksEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * Require branches to be up to date before merging.
+   */
+  strict?: boolean;
+  /**
+   * The list of status checks to require in order to merge into this branch
+   */
+  contexts?: string[];
+};
+type ReposUpdateProtectedBranchRequiredStatusChecksRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchRequiredStatusChecksEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposRemoveProtectedBranchRequiredStatusChecksRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListProtectedBranchRequiredStatusChecksContextsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposListProtectedBranchRequiredStatusChecksContextsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposReplaceProtectedBranchRequiredStatusChecksContextsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * contexts parameter
+   */
+  contexts: string[];
+};
+type ReposReplaceProtectedBranchRequiredStatusChecksContextsRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddProtectedBranchRequiredStatusChecksContextsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * contexts parameter
+   */
+  contexts: string[];
+};
+type ReposAddProtectedBranchRequiredStatusChecksContextsRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchRequiredStatusChecksContextsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * contexts parameter
+   */
+  contexts: string[];
+};
+type ReposRemoveProtectedBranchRequiredStatusChecksContextsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetProtectedBranchRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetProtectedBranchRestrictionsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposRemoveProtectedBranchRestrictionsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetAppsWithAccessToProtectedBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetAppsWithAccessToProtectedBranchRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListAppsWithAccessToProtectedBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposListAppsWithAccessToProtectedBranchRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposReplaceProtectedBranchAppRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * apps parameter
+   */
+  apps: string[];
+};
+type ReposReplaceProtectedBranchAppRestrictionsRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddProtectedBranchAppRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * apps parameter
+   */
+  apps: string[];
+};
+type ReposAddProtectedBranchAppRestrictionsRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchAppRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * apps parameter
+   */
+  apps: string[];
+};
+type ReposRemoveProtectedBranchAppRestrictionsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetTeamsWithAccessToProtectedBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetTeamsWithAccessToProtectedBranchRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListProtectedBranchTeamRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposListProtectedBranchTeamRestrictionsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListTeamsWithAccessToProtectedBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposListTeamsWithAccessToProtectedBranchRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposReplaceProtectedBranchTeamRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * teams parameter
+   */
+  teams: string[];
+};
+type ReposReplaceProtectedBranchTeamRestrictionsRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddProtectedBranchTeamRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * teams parameter
+   */
+  teams: string[];
+};
+type ReposAddProtectedBranchTeamRestrictionsRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchTeamRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * teams parameter
+   */
+  teams: string[];
+};
+type ReposRemoveProtectedBranchTeamRestrictionsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetUsersWithAccessToProtectedBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposGetUsersWithAccessToProtectedBranchRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListProtectedBranchUserRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposListProtectedBranchUserRestrictionsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListUsersWithAccessToProtectedBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+};
+type ReposListUsersWithAccessToProtectedBranchRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposReplaceProtectedBranchUserRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * users parameter
+   */
+  users: string[];
+};
+type ReposReplaceProtectedBranchUserRestrictionsRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddProtectedBranchUserRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * users parameter
+   */
+  users: string[];
+};
+type ReposAddProtectedBranchUserRestrictionsRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveProtectedBranchUserRestrictionsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * branch parameter
+   */
+  branch: string;
+  /**
+   * users parameter
+   */
+  users: string[];
+};
+type ReposRemoveProtectedBranchUserRestrictionsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksCreateEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the check. For example, "code-coverage".
+   */
+  name: string;
+  /**
+   * The SHA of the commit.
+   */
+  head_sha: string;
+  /**
+   * The URL of the integrator's site that has the full details of the check.
+   */
+  details_url?: string;
+  /**
+   * A reference for the run on the integrator's system.
+   */
+  external_id?: string;
+  /**
+   * The current status. Can be one of `queued`, `in_progress`, or `completed`.
+   */
+  status?: "queued" | "in_progress" | "completed";
+  /**
+   * The time that the check run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  started_at?: string;
+  /**
+   * **Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `timed_out`, or `action_required`. When the conclusion is `action_required`, additional details should be provided on the site specified by `details_url`.
+   * **Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`.
+   */
+  conclusion?:
+    | "success"
+    | "failure"
+    | "neutral"
+    | "cancelled"
+    | "timed_out"
+    | "action_required";
+  /**
+   * The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  completed_at?: string;
+  /**
+   * Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://developer.github.com/v3/checks/runs/#output-object) description.
+   */
+  output?: ChecksCreateParamsOutput;
+  /**
+   * Displays a button on GitHub that can be clicked to alert your app to do additional tasks. For example, a code linting app can display a button that automatically fixes detected errors. The button created in this object is displayed after the check run completes. When a user clicks the button, GitHub sends the [`check_run.requested_action` webhook](https://developer.github.com/v3/activity/events/types/#checkrunevent) to your app. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://developer.github.com/v3/checks/runs/#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions)." To learn more about check runs and requested actions, see "[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions)."
+   */
+  actions?: ChecksCreateParamsActions[];
+};
+type ChecksCreateRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksUpdateEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * check_run_id parameter
+   */
+  check_run_id: number;
+  /**
+   * The name of the check. For example, "code-coverage".
+   */
+  name?: string;
+  /**
+   * The URL of the integrator's site that has the full details of the check.
+   */
+  details_url?: string;
+  /**
+   * A reference for the run on the integrator's system.
+   */
+  external_id?: string;
+  /**
+   * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  started_at?: string;
+  /**
+   * The current status. Can be one of `queued`, `in_progress`, or `completed`.
+   */
+  status?: "queued" | "in_progress" | "completed";
+  /**
+   * **Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `timed_out`, or `action_required`.
+   * **Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`.
+   */
+  conclusion?:
+    | "success"
+    | "failure"
+    | "neutral"
+    | "cancelled"
+    | "timed_out"
+    | "action_required";
+  /**
+   * The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  completed_at?: string;
+  /**
+   * Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://developer.github.com/v3/checks/runs/#output-object-1) description.
+   */
+  output?: ChecksUpdateParamsOutput;
+  /**
+   * Possible further actions the integrator can perform, which a user may trigger. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://developer.github.com/v3/checks/runs/#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://developer.github.com/v3/checks/runs/#check-runs-and-requested-actions)."
+   */
+  actions?: ChecksUpdateParamsActions[];
+};
+type ChecksUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksGetEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * check_run_id parameter
+   */
+  check_run_id: number;
+};
+type ChecksGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksListAnnotationsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * check_run_id parameter
+   */
+  check_run_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ChecksListAnnotationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksCreateSuiteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The sha of the head commit.
+   */
+  head_sha: string;
+};
+type ChecksCreateSuiteRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksSetSuitesPreferencesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Enables or disables automatic creation of CheckSuite events upon pushes to the repository. Enabled by default. See the [`auto_trigger_checks` object](https://developer.github.com/v3/checks/suites/#auto_trigger_checks-object) description for details.
+   */
+  auto_trigger_checks?: ChecksSetSuitesPreferencesParamsAutoTriggerChecks[];
+};
+type ChecksSetSuitesPreferencesRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksGetSuiteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * check_suite_id parameter
+   */
+  check_suite_id: number;
+};
+type ChecksGetSuiteRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksListForSuiteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * check_suite_id parameter
+   */
+  check_suite_id: number;
+  /**
+   * Returns check runs with the specified `name`.
+   */
+  check_name?: string;
+  /**
+   * Returns check runs with the specified `status`. Can be one of `queued`, `in_progress`, or `completed`.
+   */
+  status?: "queued" | "in_progress" | "completed";
+  /**
+   * Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`.
+   */
+  filter?: "latest" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ChecksListForSuiteRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksRerequestSuiteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * check_suite_id parameter
+   */
+  check_suite_id: number;
+};
+type ChecksRerequestSuiteRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListCollaboratorsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Filter collaborators returned by their affiliation. Can be one of:
+   * \* `outside`: All outside collaborators of an organization-owned repository.
+   * \* `direct`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status.
+   * \* `all`: All collaborators the authenticated user can see.
+   */
+  affiliation?: "outside" | "direct" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListCollaboratorsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCheckCollaboratorEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type ReposCheckCollaboratorRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddCollaboratorEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * The permission to grant the collaborator. **Only valid on organization-owned repositories.** Can be one of:
+   * \* `pull` - can pull, but not push to or administer this repository.
+   * \* `push` - can pull and push, but not administer this repository.
+   * \* `admin` - can pull, push and administer this repository.
+   */
+  permission?: "pull" | "push" | "admin";
+};
+type ReposAddCollaboratorRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveCollaboratorEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type ReposRemoveCollaboratorRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetCollaboratorPermissionLevelEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type ReposGetCollaboratorPermissionLevelRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListCommitCommentsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListCommitCommentsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetCommitCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+};
+type ReposGetCommitCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateCommitCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The contents of the comment
+   */
+  body: string;
+};
+type ReposUpdateCommitCommentRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteCommitCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+};
+type ReposDeleteCommitCommentRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsListForCommitCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a commit comment.
+   */
+  content?:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReactionsListForCommitCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsCreateForCommitCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the commit comment.
+   */
+  content:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+};
+type ReactionsCreateForCommitCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListCommitsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * SHA or branch to start listing commits from. Default: the repository’s default branch (usually `master`).
+   */
+  sha?: string;
+  /**
+   * Only commits containing this file path will be returned.
+   */
+  path?: string;
+  /**
+   * GitHub login or email address by which to filter by commit author.
+   */
+  author?: string;
+  /**
+   * Only commits after this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Only commits before this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  until?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListCommitsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListBranchesForHeadCommitEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * commit_sha parameter
+   */
+  commit_sha: string;
+};
+type ReposListBranchesForHeadCommitRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListCommentsForCommitEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * commit_sha parameter
+   */
+  commit_sha: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListCommentsForCommitRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateCommitCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * commit_sha parameter
+   */
+  commit_sha: string;
+  /**
+   * The contents of the comment.
+   */
+  body: string;
+  /**
+   * Relative path of the file to comment on.
+   */
+  path?: string;
+  /**
+   * Line index in the diff to comment on.
+   */
+  position?: number;
+  /**
+   * **Deprecated**. Use **position** parameter instead. Line number in the file to comment on.
+   */
+  line?: number;
+};
+type ReposCreateCommitCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListPullRequestsAssociatedWithCommitEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * commit_sha parameter
+   */
+  commit_sha: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListPullRequestsAssociatedWithCommitRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetCommitEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+};
+type ReposGetCommitRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksListForRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+  /**
+   * Returns check runs with the specified `name`.
+   */
+  check_name?: string;
+  /**
+   * Returns check runs with the specified `status`. Can be one of `queued`, `in_progress`, or `completed`.
+   */
+  status?: "queued" | "in_progress" | "completed";
+  /**
+   * Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`.
+   */
+  filter?: "latest" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ChecksListForRefRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ChecksListSuitesForRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+  /**
+   * Filters check suites by GitHub App `id`.
+   */
+  app_id?: number;
+  /**
+   * Filters checks suites by the name of the [check run](https://developer.github.com/v3/checks/runs/).
+   */
+  check_name?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ChecksListSuitesForRefRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetCombinedStatusForRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+};
+type ReposGetCombinedStatusForRefRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListStatusesForRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListStatusesForRefRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type CodesOfConductGetForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type CodesOfConductGetForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRetrieveCommunityProfileMetricsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposRetrieveCommunityProfileMetricsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCompareCommitsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * base parameter
+   */
+  base: string;
+  /**
+   * head parameter
+   */
+  head: string;
+};
+type ReposCompareCommitsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetContentsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * path parameter
+   */
+  path: string;
+  /**
+   * The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`)
+   */
+  ref?: string;
+};
+type ReposGetContentsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateOrUpdateFileEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * path parameter
+   */
+  path: string;
+  /**
+   * The commit message.
+   */
+  message: string;
+  /**
+   * The new file content, using Base64 encoding.
+   */
+  content: string;
+  /**
+   * **Required if you are updating a file**. The blob SHA of the file being replaced.
+   */
+  sha?: string;
+  /**
+   * The branch name. Default: the repository’s default branch (usually `master`)
+   */
+  branch?: string;
+  /**
+   * The person that committed the file. Default: the authenticated user.
+   */
+  committer?: ReposCreateOrUpdateFileParamsCommitter;
+  /**
+   * The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.
+   */
+  author?: ReposCreateOrUpdateFileParamsAuthor;
+};
+type ReposCreateOrUpdateFileRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateFileEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * path parameter
+   */
+  path: string;
+  /**
+   * The commit message.
+   */
+  message: string;
+  /**
+   * The new file content, using Base64 encoding.
+   */
+  content: string;
+  /**
+   * **Required if you are updating a file**. The blob SHA of the file being replaced.
+   */
+  sha?: string;
+  /**
+   * The branch name. Default: the repository’s default branch (usually `master`)
+   */
+  branch?: string;
+  /**
+   * The person that committed the file. Default: the authenticated user.
+   */
+  committer?: ReposCreateFileParamsCommitter;
+  /**
+   * The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.
+   */
+  author?: ReposCreateFileParamsAuthor;
+};
+type ReposCreateFileRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateFileEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * path parameter
+   */
+  path: string;
+  /**
+   * The commit message.
+   */
+  message: string;
+  /**
+   * The new file content, using Base64 encoding.
+   */
+  content: string;
+  /**
+   * **Required if you are updating a file**. The blob SHA of the file being replaced.
+   */
+  sha?: string;
+  /**
+   * The branch name. Default: the repository’s default branch (usually `master`)
+   */
+  branch?: string;
+  /**
+   * The person that committed the file. Default: the authenticated user.
+   */
+  committer?: ReposUpdateFileParamsCommitter;
+  /**
+   * The author of the file. Default: The `committer` or the authenticated user if you omit `committer`.
+   */
+  author?: ReposUpdateFileParamsAuthor;
+};
+type ReposUpdateFileRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteFileEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * path parameter
+   */
+  path: string;
+  /**
+   * The commit message.
+   */
+  message: string;
+  /**
+   * The blob SHA of the file being replaced.
+   */
+  sha: string;
+  /**
+   * The branch name. Default: the repository’s default branch (usually `master`)
+   */
+  branch?: string;
+  /**
+   * object containing information about the committer.
+   */
+  committer?: ReposDeleteFileParamsCommitter;
+  /**
+   * object containing information about the author.
+   */
+  author?: ReposDeleteFileParamsAuthor;
+};
+type ReposDeleteFileRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListContributorsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Set to `1` or `true` to include anonymous contributors in results.
+   */
+  anon?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListContributorsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListDeploymentsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The SHA recorded at creation time.
+   */
+  sha?: string;
+  /**
+   * The name of the ref. This can be a branch, tag, or SHA.
+   */
+  ref?: string;
+  /**
+   * The name of the task for the deployment (e.g., `deploy` or `deploy:migrations`).
+   */
+  task?: string;
+  /**
+   * The name of the environment that was deployed to (e.g., `staging` or `production`).
+   */
+  environment?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListDeploymentsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateDeploymentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The ref to deploy. This can be a branch, tag, or SHA.
+   */
+  ref: string;
+  /**
+   * Specifies a task to execute (e.g., `deploy` or `deploy:migrations`).
+   */
+  task?: string;
+  /**
+   * Attempts to automatically merge the default branch into the requested ref, if it's behind the default branch.
+   */
+  auto_merge?: boolean;
+  /**
+   * The [status](https://developer.github.com/v3/repos/statuses/) contexts to verify against commit status checks. If you omit this parameter, GitHub verifies all unique contexts before creating a deployment. To bypass checking entirely, pass an empty array. Defaults to all unique contexts.
+   */
+  required_contexts?: string[];
+  /**
+   * JSON payload with extra information about the deployment.
+   */
+  payload?: string;
+  /**
+   * Name for the target deployment environment (e.g., `production`, `staging`, `qa`).
+   */
+  environment?: string;
+  /**
+   * Short description of the deployment.
+   */
+  description?: string;
+  /**
+   * Specifies if the given environment is specific to the deployment and will no longer exist at some point in the future. Default: `false`
+   * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+   */
+  transient_environment?: boolean;
+  /**
+   * Specifies if the given environment is one that end-users directly interact with. Default: `true` when `environment` is `production` and `false` otherwise.
+   * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+   */
+  production_environment?: boolean;
+};
+type ReposCreateDeploymentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetDeploymentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * deployment_id parameter
+   */
+  deployment_id: number;
+};
+type ReposGetDeploymentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListDeploymentStatusesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * deployment_id parameter
+   */
+  deployment_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListDeploymentStatusesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateDeploymentStatusEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * deployment_id parameter
+   */
+  deployment_id: number;
+  /**
+   * The state of the status. Can be one of `error`, `failure`, `inactive`, `in_progress`, `queued` `pending`, or `success`. **Note:** To use the `inactive` state, you must provide the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. To use the `in_progress` and `queued` states, you must provide the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.
+   */
+  state:
+    | "error"
+    | "failure"
+    | "inactive"
+    | "in_progress"
+    | "queued"
+    | "pending"
+    | "success";
+  /**
+   * The target URL to associate with this status. This URL should contain output to keep the user updated while the task is running or serve as historical information for what happened in the deployment. **Note:** It's recommended to use the `log_url` parameter, which replaces `target_url`.
+   */
+  target_url?: string;
+  /**
+   * The full URL of the deployment's output. This parameter replaces `target_url`. We will continue to accept `target_url` to support legacy uses, but we recommend replacing `target_url` with `log_url`. Setting `log_url` will automatically set `target_url` to the same value. Default: `""`
+   * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+   */
+  log_url?: string;
+  /**
+   * A short description of the status. The maximum description length is 140 characters.
+   */
+  description?: string;
+  /**
+   * Name for the target deployment environment, which can be changed when setting a deploy status. For example, `production`, `staging`, or `qa`. **Note:** This parameter requires you to use the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.
+   */
+  environment?: "production" | "staging" | "qa";
+  /**
+   * Sets the URL for accessing your environment. Default: `""`
+   * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+   */
+  environment_url?: string;
+  /**
+   * Adds a new `inactive` status to all prior non-transient, non-production environment deployments with the same repository and `environment` name as the created status's deployment. An `inactive` status is only added to deployments that had a `success` state. Default: `true`
+   * **Note:** To add an `inactive` status to `production` environments, you must use the [`application/vnd.github.flash-preview+json`](https://developer.github.com/v3/previews/#deployment-statuses) custom media type.
+   * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://developer.github.com/v3/previews/#enhanced-deployments) custom media type.
+   */
+  auto_inactive?: boolean;
+};
+type ReposCreateDeploymentStatusRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetDeploymentStatusEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * deployment_id parameter
+   */
+  deployment_id: number;
+  /**
+   * status_id parameter
+   */
+  status_id: number;
+};
+type ReposGetDeploymentStatusRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateDispatchEventEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * **Required:** A custom webhook event name.
+   */
+  event_type?: string;
+};
+type ReposCreateDispatchEventRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListDownloadsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListDownloadsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetDownloadEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * download_id parameter
+   */
+  download_id: number;
+};
+type ReposGetDownloadRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteDownloadEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * download_id parameter
+   */
+  download_id: number;
+};
+type ReposDeleteDownloadRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListRepoEventsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListRepoEventsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListForksEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The sort order. Can be either `newest`, `oldest`, or `stargazers`.
+   */
+  sort?: "newest" | "oldest" | "stargazers";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListForksRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateForkEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Optional parameter to specify the organization name if forking into an organization.
+   */
+  organization?: string;
+};
+type ReposCreateForkRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitCreateBlobEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The new blob's content.
+   */
+  content: string;
+  /**
+   * The encoding used for `content`. Currently, `"utf-8"` and `"base64"` are supported.
+   */
+  encoding?: string;
+};
+type GitCreateBlobRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitGetBlobEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * file_sha parameter
+   */
+  file_sha: string;
+};
+type GitGetBlobRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitCreateCommitEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The commit message
+   */
+  message: string;
+  /**
+   * The SHA of the tree object this commit points to
+   */
+  tree: string;
+  /**
+   * The SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided; for a merge commit, an array of more than one should be provided.
+   */
+  parents: string[];
+  /**
+   * Information about the author of the commit. By default, the `author` will be the authenticated user and the current date. See the `author` and `committer` object below for details.
+   */
+  author?: GitCreateCommitParamsAuthor;
+  /**
+   * Information about the person who is making the commit. By default, `committer` will use the information set in `author`. See the `author` and `committer` object below for details.
+   */
+  committer?: GitCreateCommitParamsCommitter;
+  /**
+   * The [PGP signature](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) of the commit. GitHub adds the signature to the `gpgsig` header of the created commit. For a commit signature to be verifiable by Git or GitHub, it must be an ASCII-armored detached PGP signature over the string commit as it would be written to the object database. To pass a `signature` parameter, you need to first manually create a valid PGP signature, which can be complicated. You may find it easier to [use the command line](https://git-scm.com/book/id/v2/Git-Tools-Signing-Your-Work) to create signed commits.
+   */
+  signature?: string;
+};
+type GitCreateCommitRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitGetCommitEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * commit_sha parameter
+   */
+  commit_sha: string;
+};
+type GitGetCommitRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitListMatchingRefsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GitListMatchingRefsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitGetRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+};
+type GitGetRefRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitCreateRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the fully qualified reference (ie: `refs/heads/master`). If it doesn't start with 'refs' and have at least two slashes, it will be rejected.
+   */
+  ref: string;
+  /**
+   * The SHA1 value for this reference.
+   */
+  sha: string;
+};
+type GitCreateRefRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitUpdateRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+  /**
+   * The SHA1 value to set this reference to
+   */
+  sha: string;
+  /**
+   * Indicates whether to force the update or to make sure the update is a fast-forward update. Leaving this out or setting it to `false` will make sure you're not overwriting work.
+   */
+  force?: boolean;
+};
+type GitUpdateRefRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitDeleteRefEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+};
+type GitDeleteRefRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitCreateTagEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The tag's name. This is typically a version (e.g., "v0.0.1").
+   */
+  tag: string;
+  /**
+   * The tag message.
+   */
+  message: string;
+  /**
+   * The SHA of the git object this is tagging.
+   */
+  object: string;
+  /**
+   * The type of the object we're tagging. Normally this is a `commit` but it can also be a `tree` or a `blob`.
+   */
+  type: "commit" | "tree" | "blob";
+  /**
+   * An object with information about the individual creating the tag.
+   */
+  tagger?: GitCreateTagParamsTagger;
+};
+type GitCreateTagRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitGetTagEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * tag_sha parameter
+   */
+  tag_sha: string;
+};
+type GitGetTagRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitCreateTreeEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Objects (of `path`, `mode`, `type`, and `sha`) specifying a tree structure.
+   */
+  tree: GitCreateTreeParamsTree[];
+  /**
+   * The SHA1 of the tree you want to update with new data. If you don't set this, the commit will be created on top of everything; however, it will only contain your change, the rest of your files will show up as deleted.
+   */
+  base_tree?: string;
+};
+type GitCreateTreeRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GitGetTreeEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * tree_sha parameter
+   */
+  tree_sha: string;
+  /**
+   * recursive parameter
+   */
+  recursive?: "1";
+};
+type GitGetTreeRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListHooksEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListHooksRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateHookEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Use `web` to create a webhook. Default: `web`. This parameter only accepts the value `web`.
+   */
+  name?: string;
+  /**
+   * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/repos/hooks/#create-hook-config-params).
+   */
+  config: ReposCreateHookParamsConfig;
+  /**
+   * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for.
+   */
+  events?: string[];
+  /**
+   * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+   */
+  active?: boolean;
+};
+type ReposCreateHookRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetHookEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+};
+type ReposGetHookRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateHookEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+  /**
+   * Key/value pairs to provide settings for this webhook. [These are defined below](https://developer.github.com/v3/repos/hooks/#create-hook-config-params).
+   */
+  config?: ReposUpdateHookParamsConfig;
+  /**
+   * Determines what [events](https://developer.github.com/v3/activity/events/types/) the hook is triggered for. This replaces the entire array of events.
+   */
+  events?: string[];
+  /**
+   * Determines a list of events to be added to the list of events that the Hook triggers for.
+   */
+  add_events?: string[];
+  /**
+   * Determines a list of events to be removed from the list of events that the Hook triggers for.
+   */
+  remove_events?: string[];
+  /**
+   * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications.
+   */
+  active?: boolean;
+};
+type ReposUpdateHookRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteHookEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+};
+type ReposDeleteHookRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposPingHookEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+};
+type ReposPingHookRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposTestPushHookEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * hook_id parameter
+   */
+  hook_id: number;
+};
+type ReposTestPushHookRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsStartImportEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The URL of the originating repository.
+   */
+  vcs_url: string;
+  /**
+   * The originating VCS type. Can be one of `subversion`, `git`, `mercurial`, or `tfvc`. Please be aware that without this parameter, the import job will take additional time to detect the VCS type before beginning the import. This detection step will be reflected in the response.
+   */
+  vcs?: "subversion" | "git" | "mercurial" | "tfvc";
+  /**
+   * If authentication is required, the username to provide to `vcs_url`.
+   */
+  vcs_username?: string;
+  /**
+   * If authentication is required, the password to provide to `vcs_url`.
+   */
+  vcs_password?: string;
+  /**
+   * For a tfvc import, the name of the project that is being imported.
+   */
+  tfvc_project?: string;
+};
+type MigrationsStartImportRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsGetImportProgressEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type MigrationsGetImportProgressRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsUpdateImportEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The username to provide to the originating repository.
+   */
+  vcs_username?: string;
+  /**
+   * The password to provide to the originating repository.
+   */
+  vcs_password?: string;
+};
+type MigrationsUpdateImportRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsCancelImportEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type MigrationsCancelImportRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsGetCommitAuthorsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Only authors found after this id are returned. Provide the highest author ID you've seen so far. New authors may be added to the list at any point while the importer is performing the `raw` step.
+   */
+  since?: string;
+};
+type MigrationsGetCommitAuthorsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsMapCommitAuthorEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * author_id parameter
+   */
+  author_id: number;
+  /**
+   * The new Git author email.
+   */
+  email?: string;
+  /**
+   * The new Git author name.
+   */
+  name?: string;
+};
+type MigrationsMapCommitAuthorRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsGetLargeFilesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type MigrationsGetLargeFilesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsSetLfsPreferenceEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Can be one of `opt_in` (large files will be stored using Git LFS) or `opt_out` (large files will be removed during the import).
+   */
+  use_lfs: "opt_in" | "opt_out";
+};
+type MigrationsSetLfsPreferenceRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsGetRepoInstallationEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type AppsGetRepoInstallationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsFindRepoInstallationEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type AppsFindRepoInstallationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type InteractionsGetRestrictionsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type InteractionsGetRestrictionsForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type InteractionsAddOrUpdateRestrictionsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Specifies the group of GitHub users who can comment, open issues, or create pull requests for the given repository. Must be one of: `existing_users`, `contributors_only`, or `collaborators_only`.
+   */
+  limit: "existing_users" | "contributors_only" | "collaborators_only";
+};
+type InteractionsAddOrUpdateRestrictionsForRepoRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type InteractionsRemoveRestrictionsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type InteractionsRemoveRestrictionsForRepoRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListInvitationsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListInvitationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteInvitationEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * invitation_id parameter
+   */
+  invitation_id: number;
+};
+type ReposDeleteInvitationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateInvitationEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * invitation_id parameter
+   */
+  invitation_id: number;
+  /**
+   * The permissions that the associated user will have on the repository. Valid values are `read`, `write`, and `admin`.
+   */
+  permissions?: "read" | "write" | "admin";
+};
+type ReposUpdateInvitationRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * If an `integer` is passed, it should refer to a milestone by its `number` field. If the string `*` is passed, issues with any milestone are accepted. If the string `none` is passed, issues without milestones are returned.
+   */
+  milestone?: string;
+  /**
+   * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * Can be the name of a user. Pass in `none` for issues with no assigned user, and `*` for issues assigned to any user.
+   */
+  assignee?: string;
+  /**
+   * The user that created the issue.
+   */
+  creator?: string;
+  /**
+   * A user that's mentioned in the issue.
+   */
+  mentioned?: string;
+  /**
+   * A list of comma separated label names. Example: `bug,ui,@high`
+   */
+  labels?: string;
+  /**
+   * What to sort results by. Can be either `created`, `updated`, `comments`.
+   */
+  sort?: "created" | "updated" | "comments";
+  /**
+   * The direction of the sort. Can be either `asc` or `desc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesCreateEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The title of the issue.
+   */
+  title: string;
+  /**
+   * The contents of the issue.
+   */
+  body?: string;
+  /**
+   * Login for the user that this issue should be assigned to. _NOTE: Only users with push access can set the assignee for new issues. The assignee is silently dropped otherwise. **This field is deprecated.**_
+   */
+  assignee?: string;
+  /**
+   * The `number` of the milestone to associate this issue with. _NOTE: Only users with push access can set the milestone for new issues. The milestone is silently dropped otherwise._
+   */
+  milestone?: number;
+  /**
+   * Labels to associate with this issue. _NOTE: Only users with push access can set labels for new issues. Labels are silently dropped otherwise._
+   */
+  labels?: string[];
+  /**
+   * Logins for Users to assign to this issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._
+   */
+  assignees?: string[];
+};
+type IssuesCreateRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListCommentsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Either `created` or `updated`.
+   */
+  sort?: "created" | "updated";
+  /**
+   * Either `asc` or `desc`. Ignored without the `sort` parameter.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Only comments updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+};
+type IssuesListCommentsForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesGetCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesGetCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesUpdateCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The contents of the comment.
+   */
+  body: string;
+};
+type IssuesUpdateCommentRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesDeleteCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+};
+type IssuesDeleteCommentRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsListForIssueCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to an issue comment.
+   */
+  content?:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReactionsListForIssueCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsCreateForIssueCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the issue comment.
+   */
+  content:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+};
+type ReactionsCreateForIssueCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListEventsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListEventsForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesGetEventEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * event_id parameter
+   */
+  event_id: number;
+};
+type IssuesGetEventRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesGetEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+};
+type IssuesGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesUpdateEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * The title of the issue.
+   */
+  title?: string;
+  /**
+   * The contents of the issue.
+   */
+  body?: string;
+  /**
+   * Login for the user that this issue should be assigned to. **This field is deprecated.**
+   */
+  assignee?: string;
+  /**
+   * State of the issue. Either `open` or `closed`.
+   */
+  state?: "open" | "closed";
+  /**
+   * The `number` of the milestone to associate this issue with or `null` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._
+   */
+  milestone?: number | null;
+  /**
+   * Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (`[]`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._
+   */
+  labels?: string[];
+  /**
+   * Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (`[]`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._
+   */
+  assignees?: string[];
+};
+type IssuesUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesAddAssigneesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * Usernames of people to assign this issue to. _NOTE: Only users with push access can add assignees to an issue. Assignees are silently ignored otherwise._
+   */
+  assignees?: string[];
+};
+type IssuesAddAssigneesRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesRemoveAssigneesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * Usernames of assignees to remove from an issue. _NOTE: Only users with push access can remove assignees from an issue. Assignees are silently ignored otherwise._
+   */
+  assignees?: string[];
+};
+type IssuesRemoveAssigneesRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListCommentsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * Only comments updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListCommentsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesCreateCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * The contents of the comment.
+   */
+  body: string;
+};
+type IssuesCreateCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListEventsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListEventsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListLabelsOnIssueEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListLabelsOnIssueRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesAddLabelsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * The name of the label to add to the issue. Must contain at least one label. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.
+   */
+  labels: string[];
+};
+type IssuesAddLabelsRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesReplaceLabelsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * The names of the labels to add to the issue. You can pass an empty array to remove all labels. **Note:** Alternatively, you can pass a single label as a `string` or an `array` of labels directly, but GitHub recommends passing an object with the `labels` key.
+   */
+  labels?: string[];
+};
+type IssuesReplaceLabelsRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesRemoveLabelsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+};
+type IssuesRemoveLabelsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesRemoveLabelEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * name parameter
+   */
+  name: string;
+};
+type IssuesRemoveLabelRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesLockEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons:
+   * \* `off-topic`
+   * \* `too heated`
+   * \* `resolved`
+   * \* `spam`
+   */
+  lock_reason?: "off-topic" | "too heated" | "resolved" | "spam";
+};
+type IssuesLockRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesUnlockEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+};
+type IssuesUnlockRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsListForIssueEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to an issue.
+   */
+  content?:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReactionsListForIssueRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsCreateForIssueEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the issue.
+   */
+  content:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+};
+type ReactionsCreateForIssueRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListEventsForTimelineEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * issue_number parameter
+   */
+  issue_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListEventsForTimelineRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListDeployKeysEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListDeployKeysRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAddDeployKeyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * A name for the key.
+   */
+  title?: string;
+  /**
+   * The contents of the key.
+   */
+  key: string;
+  /**
+   * If `true`, the key will only be able to read repository contents. Otherwise, the key will be able to read and write.
+   *
+   * Deploy keys with write access can perform the same actions as an organization member with admin access, or a collaborator on a personal repository. For more information, see "[Repository permission levels for an organization](https://help.github.com/articles/repository-permission-levels-for-an-organization/)" and "[Permission levels for a user account repository](https://help.github.com/articles/permission-levels-for-a-user-account-repository/)."
+   */
+  read_only?: boolean;
+};
+type ReposAddDeployKeyRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetDeployKeyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * key_id parameter
+   */
+  key_id: number;
+};
+type ReposGetDeployKeyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRemoveDeployKeyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * key_id parameter
+   */
+  key_id: number;
+};
+type ReposRemoveDeployKeyRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListLabelsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListLabelsForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesCreateLabelEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing `:strawberry:` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png ":strawberry:"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/).
+   */
+  name: string;
+  /**
+   * The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading `#`.
+   */
+  color: string;
+  /**
+   * A short description of the label.
+   */
+  description?: string;
+};
+type IssuesCreateLabelRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesGetLabelEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * name parameter
+   */
+  name: string;
+};
+type IssuesGetLabelRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesUpdateLabelEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * name parameter
+   */
+  name: string;
+  /**
+   * The new name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing `:strawberry:` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png ":strawberry:"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/).
+   */
+  new_name?: string;
+  /**
+   * The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading `#`.
+   */
+  color?: string;
+  /**
+   * A short description of the label.
+   */
+  description?: string;
+};
+type IssuesUpdateLabelRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesDeleteLabelEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * name parameter
+   */
+  name: string;
+};
+type IssuesDeleteLabelRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListLanguagesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposListLanguagesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type LicensesGetForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type LicensesGetForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposMergeEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the base branch that the head will be merged into.
+   */
+  base: string;
+  /**
+   * The head to merge. This can be a branch name or a commit SHA1.
+   */
+  head: string;
+  /**
+   * Commit message to use for the merge commit. If omitted, a default message will be used.
+   */
+  commit_message?: string;
+};
+type ReposMergeRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListMilestonesForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The state of the milestone. Either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * What to sort results by. Either `due_on` or `completeness`.
+   */
+  sort?: "due_on" | "completeness";
+  /**
+   * The direction of the sort. Either `asc` or `desc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListMilestonesForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesCreateMilestoneEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The title of the milestone.
+   */
+  title: string;
+  /**
+   * The state of the milestone. Either `open` or `closed`.
+   */
+  state?: "open" | "closed";
+  /**
+   * A description of the milestone.
+   */
+  description?: string;
+  /**
+   * The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  due_on?: string;
+};
+type IssuesCreateMilestoneRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesGetMilestoneEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * milestone_number parameter
+   */
+  milestone_number: number;
+};
+type IssuesGetMilestoneRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesUpdateMilestoneEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * milestone_number parameter
+   */
+  milestone_number: number;
+  /**
+   * The title of the milestone.
+   */
+  title?: string;
+  /**
+   * The state of the milestone. Either `open` or `closed`.
+   */
+  state?: "open" | "closed";
+  /**
+   * A description of the milestone.
+   */
+  description?: string;
+  /**
+   * The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  due_on?: string;
+};
+type IssuesUpdateMilestoneRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesDeleteMilestoneEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * milestone_number parameter
+   */
+  milestone_number: number;
+};
+type IssuesDeleteMilestoneRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListLabelsForMilestoneEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * milestone_number parameter
+   */
+  milestone_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListLabelsForMilestoneRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListNotificationsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * If `true`, show notifications marked as read.
+   */
+  all?: boolean;
+  /**
+   * If `true`, only shows notifications in which the user is directly participating or mentioned.
+   */
+  participating?: boolean;
+  /**
+   * Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  before?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListNotificationsForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityMarkNotificationsAsReadForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Describes the last point that notifications were checked. Anything updated since this time will not be updated. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Default: The current timestamp.
+   */
+  last_read_at?: string;
+};
+type ActivityMarkNotificationsAsReadForRepoRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetPagesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetPagesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposEnablePagesSiteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * source parameter
+   */
+  source?: ReposEnablePagesSiteParamsSource;
+};
+type ReposEnablePagesSiteRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDisablePagesSiteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposDisablePagesSiteRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateInformationAboutPagesSiteEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Specify a custom domain for the repository. Sending a `null` value will remove the custom domain. For more about custom domains, see "[Using a custom domain with GitHub Pages](https://help.github.com/articles/using-a-custom-domain-with-github-pages/)."
+   */
+  cname?: string;
+  /**
+   * Update the source for the repository. Must include the branch name, and may optionally specify the subdirectory `/docs`. Possible values are `"gh-pages"`, `"master"`, and `"master /docs"`.
+   */
+  source?: '"gh-pages"' | '"master"' | '"master /docs"';
+};
+type ReposUpdateInformationAboutPagesSiteRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposRequestPageBuildEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposRequestPageBuildRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListPagesBuildsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListPagesBuildsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetLatestPagesBuildEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetLatestPagesBuildRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetPagesBuildEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * build_id parameter
+   */
+  build_id: number;
+};
+type ReposGetPagesBuildRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsListForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ProjectsListForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsCreateForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the project.
+   */
+  name: string;
+  /**
+   * The description of the project.
+   */
+  body?: string;
+};
+type ProjectsCreateForRepoRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsListEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Either `open`, `closed`, or `all` to filter by state.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * Filter pulls by head user or head organization and branch name in the format of `user:ref-name` or `organization:ref-name`. For example: `github:new-script-format` or `octocat:test-branch`.
+   */
+  head?: string;
+  /**
+   * Filter pulls by base branch name. Example: `gh-pages`.
+   */
+  base?: string;
+  /**
+   * What to sort results by. Can be either `created`, `updated`, `popularity` (comment count) or `long-running` (age, filtering by pulls updated in the last month).
+   */
+  sort?: "created" | "updated" | "popularity" | "long-running";
+  /**
+   * The direction of the sort. Can be either `asc` or `desc`. Default: `desc` when sort is `created` or sort is not specified, otherwise `asc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsCreateEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The title of the new pull request.
+   */
+  title: string;
+  /**
+   * The name of the branch where your changes are implemented. For cross-repository pull requests in the same network, namespace `head` with a user like this: `username:branch`.
+   */
+  head: string;
+  /**
+   * The name of the branch you want the changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repository that requests a merge to a base of another repository.
+   */
+  base: string;
+  /**
+   * The contents of the pull request.
+   */
+  body?: string;
+  /**
+   * Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request.
+   */
+  maintainer_can_modify?: boolean;
+  /**
+   * Indicates whether the pull request is a draft. See "[Draft Pull Requests](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests)" in the GitHub Help documentation to learn more.
+   */
+  draft?: boolean;
+};
+type PullsCreateRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsListCommentsForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Can be either `created` or `updated` comments.
+   */
+  sort?: "created" | "updated";
+  /**
+   * Can be either `asc` or `desc`. Ignored without `sort` parameter.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only returns comments `updated` at or after this time.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsListCommentsForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsGetCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+};
+type PullsGetCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsUpdateCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The text of the reply to the review comment.
+   */
+  body: string;
+};
+type PullsUpdateCommentRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsDeleteCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+};
+type PullsDeleteCommentRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsListForPullRequestReviewCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a pull request review comment.
+   */
+  content?:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReactionsListForPullRequestReviewCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsCreateForPullRequestReviewCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the pull request review comment.
+   */
+  content:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+};
+type ReactionsCreateForPullRequestReviewCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsGetEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+};
+type PullsGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsUpdateEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * The title of the pull request.
+   */
+  title?: string;
+  /**
+   * The contents of the pull request.
+   */
+  body?: string;
+  /**
+   * State of this Pull Request. Either `open` or `closed`.
+   */
+  state?: "open" | "closed";
+  /**
+   * The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository.
+   */
+  base?: string;
+  /**
+   * Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request.
+   */
+  maintainer_can_modify?: boolean;
+};
+type PullsUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsListCommentsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * Can be either `created` or `updated` comments.
+   */
+  sort?: "created" | "updated";
+  /**
+   * Can be either `asc` or `desc`. Ignored without `sort` parameter.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only returns comments `updated` at or after this time.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsListCommentsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsCreateCommentEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * The text of the review comment.
+   */
+  body: string;
+  /**
+   * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+   */
+  commit_id: string;
+  /**
+   * The relative path to the file that necessitates a comment.
+   */
+  path: string;
+  /**
+   * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+   */
+  position?: number;
+  /**
+   * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+   */
+  side?: "LEFT" | "RIGHT";
+  /**
+   * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+   */
+  line?: number;
+  /**
+   * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+   */
+  start_line?: number;
+  /**
+   * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+   */
+  start_side?: "LEFT" | "RIGHT" | "side";
+};
+type PullsCreateCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsCreateCommentReplyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * The text of the review comment.
+   */
+  body: string;
+  /**
+   * The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`.
+   */
+  commit_id: string;
+  /**
+   * The relative path to the file that necessitates a comment.
+   */
+  path: string;
+  /**
+   * **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above.
+   */
+  position?: number;
+  /**
+   * **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation.
+   */
+  side?: "LEFT" | "RIGHT";
+  /**
+   * **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to.
+   */
+  line?: number;
+  /**
+   * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation.
+   */
+  start_line?: number;
+  /**
+   * **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context.
+   */
+  start_side?: "LEFT" | "RIGHT" | "side";
+};
+type PullsCreateCommentReplyRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsCreateReviewCommentReplyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * comment_id parameter
+   */
+  comment_id: number;
+  /**
+   * The text of the review comment.
+   */
+  body: string;
+};
+type PullsCreateReviewCommentReplyRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsListCommitsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsListCommitsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsListFilesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsListFilesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsCheckIfMergedEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+};
+type PullsCheckIfMergedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsMergeEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * Title for the automatic commit message.
+   */
+  commit_title?: string;
+  /**
+   * Extra detail to append to automatic commit message.
+   */
+  commit_message?: string;
+  /**
+   * SHA that pull request head must match to allow merge.
+   */
+  sha?: string;
+  /**
+   * Merge method to use. Possible values are `merge`, `squash` or `rebase`. Default is `merge`.
+   */
+  merge_method?: "merge" | "squash" | "rebase";
+};
+type PullsMergeRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsListReviewRequestsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsListReviewRequestsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsCreateReviewRequestEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * An array of user `login`s that will be requested.
+   */
+  reviewers?: string[];
+  /**
+   * An array of team `slug`s that will be requested.
+   */
+  team_reviewers?: string[];
+};
+type PullsCreateReviewRequestRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsDeleteReviewRequestEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * An array of user `login`s that will be removed.
+   */
+  reviewers?: string[];
+  /**
+   * An array of team `slug`s that will be removed.
+   */
+  team_reviewers?: string[];
+};
+type PullsDeleteReviewRequestRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsListReviewsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsListReviewsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsCreateReviewEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment outdated if a subsequent commit modifies the line you specify as the `position`. Defaults to the most recent commit in the pull request when you do not specify a value.
+   */
+  commit_id?: string;
+  /**
+   * **Required** when using `REQUEST_CHANGES` or `COMMENT` for the `event` parameter. The body text of the pull request review.
+   */
+  body?: string;
+  /**
+   * The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. By leaving this blank, you set the review action state to `PENDING`, which means you will need to [submit the pull request review](https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review) when you are ready.
+   */
+  event?: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
+  /**
+   * Use the following table to specify the location, destination, and contents of the draft review comment.
+   */
+  comments?: PullsCreateReviewParamsComments[];
+};
+type PullsCreateReviewRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsGetReviewEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * review_id parameter
+   */
+  review_id: number;
+};
+type PullsGetReviewRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsDeletePendingReviewEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * review_id parameter
+   */
+  review_id: number;
+};
+type PullsDeletePendingReviewRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsUpdateReviewEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * review_id parameter
+   */
+  review_id: number;
+  /**
+   * The body text of the pull request review.
+   */
+  body: string;
+};
+type PullsUpdateReviewRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsGetCommentsForReviewEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * review_id parameter
+   */
+  review_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type PullsGetCommentsForReviewRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsDismissReviewEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * review_id parameter
+   */
+  review_id: number;
+  /**
+   * The message for the pull request review dismissal
+   */
+  message: string;
+};
+type PullsDismissReviewRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsSubmitReviewEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * review_id parameter
+   */
+  review_id: number;
+  /**
+   * The body text of the pull request review
+   */
+  body?: string;
+  /**
+   * The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to `PENDING`, which means you will need to re-submit the pull request review using a review action.
+   */
+  event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
+};
+type PullsSubmitReviewRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type PullsUpdateBranchEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * pull_number parameter
+   */
+  pull_number: number;
+  /**
+   * The expected SHA of the pull request's HEAD ref. This is the most recent commit on the pull request's branch. If the expected SHA does not match the pull request's HEAD, you will receive a `422 Unprocessable Entity` status. You can use the "[List commits on a repository](https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository)" endpoint to find the most recent commit SHA. Default: SHA of the pull request's current HEAD ref.
+   */
+  expected_head_sha?: string;
+};
+type PullsUpdateBranchRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetReadmeEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`)
+   */
+  ref?: string;
+};
+type ReposGetReadmeRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListReleasesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListReleasesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateReleaseEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The name of the tag.
+   */
+  tag_name: string;
+  /**
+   * Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`).
+   */
+  target_commitish?: string;
+  /**
+   * The name of the release.
+   */
+  name?: string;
+  /**
+   * Text describing the contents of the tag.
+   */
+  body?: string;
+  /**
+   * `true` to create a draft (unpublished) release, `false` to create a published one.
+   */
+  draft?: boolean;
+  /**
+   * `true` to identify the release as a prerelease. `false` to identify the release as a full release.
+   */
+  prerelease?: boolean;
+};
+type ReposCreateReleaseRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetReleaseAssetEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * asset_id parameter
+   */
+  asset_id: number;
+};
+type ReposGetReleaseAssetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateReleaseAssetEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * asset_id parameter
+   */
+  asset_id: number;
+  /**
+   * The file name of the asset.
+   */
+  name?: string;
+  /**
+   * An alternate short description of the asset. Used in place of the filename.
+   */
+  label?: string;
+};
+type ReposUpdateReleaseAssetRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteReleaseAssetEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * asset_id parameter
+   */
+  asset_id: number;
+};
+type ReposDeleteReleaseAssetRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetLatestReleaseEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetLatestReleaseRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetReleaseByTagEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * tag parameter
+   */
+  tag: string;
+};
+type ReposGetReleaseByTagRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetReleaseEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * release_id parameter
+   */
+  release_id: number;
+};
+type ReposGetReleaseRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposUpdateReleaseEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * release_id parameter
+   */
+  release_id: number;
+  /**
+   * The name of the tag.
+   */
+  tag_name?: string;
+  /**
+   * Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`).
+   */
+  target_commitish?: string;
+  /**
+   * The name of the release.
+   */
+  name?: string;
+  /**
+   * Text describing the contents of the tag.
+   */
+  body?: string;
+  /**
+   * `true` makes the release a draft, and `false` publishes the release.
+   */
+  draft?: boolean;
+  /**
+   * `true` to identify the release as a prerelease, `false` to identify the release as a full release.
+   */
+  prerelease?: boolean;
+};
+type ReposUpdateReleaseRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeleteReleaseEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * release_id parameter
+   */
+  release_id: number;
+};
+type ReposDeleteReleaseRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListAssetsForReleaseEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * release_id parameter
+   */
+  release_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListAssetsForReleaseRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListStargazersForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListStargazersForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetCodeFrequencyStatsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetCodeFrequencyStatsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetCommitActivityStatsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetCommitActivityStatsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetContributorsStatsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetContributorsStatsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetParticipationStatsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetParticipationStatsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetPunchCardStatsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetPunchCardStatsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateStatusEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * sha parameter
+   */
+  sha: string;
+  /**
+   * The state of the status. Can be one of `error`, `failure`, `pending`, or `success`.
+   */
+  state: "error" | "failure" | "pending" | "success";
+  /**
+   * The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the source of the status.
+   * For example, if your continuous integration system is posting build status, you would want to provide the deep link for the build output for this specific SHA:
+   * `http://ci.example.com/user/repo/build/sha`
+   */
+  target_url?: string;
+  /**
+   * A short description of the status.
+   */
+  description?: string;
+  /**
+   * A string label to differentiate this status from the status of other systems.
+   */
+  context?: string;
+};
+type ReposCreateStatusRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListWatchersForRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListWatchersForRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityGetRepoSubscriptionEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityGetRepoSubscriptionRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivitySetRepoSubscriptionEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Determines if notifications should be received from this repository.
+   */
+  subscribed?: boolean;
+  /**
+   * Determines if all notifications should be blocked from this repository.
+   */
+  ignored?: boolean;
+};
+type ActivitySetRepoSubscriptionRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityDeleteRepoSubscriptionEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityDeleteRepoSubscriptionRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListTagsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListTagsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListTeamsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListTeamsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListTopicsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposListTopicsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposReplaceTopicsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * An array of topics to add to the repository. Pass one or more topics to _replace_ the set of existing topics. Send an empty array (`[]`) to clear all topics from the repository. **Note:** Topic `names` cannot contain uppercase letters.
+   */
+  names: string[];
+};
+type ReposReplaceTopicsRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetClonesEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Must be one of: `day`, `week`.
+   */
+  per?: "day" | "week";
+};
+type ReposGetClonesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetTopPathsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetTopPathsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetTopReferrersEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposGetTopReferrersRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetViewsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * Must be one of: `day`, `week`.
+   */
+  per?: "day" | "week";
+};
+type ReposGetViewsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposTransferEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * **Required:** The username or organization name the repository will be transferred to.
+   */
+  new_owner?: string;
+  /**
+   * ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.
+   */
+  team_ids?: number[];
+};
+type ReposTransferRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCheckVulnerabilityAlertsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposCheckVulnerabilityAlertsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposEnableVulnerabilityAlertsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposEnableVulnerabilityAlertsRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDisableVulnerabilityAlertsEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ReposDisableVulnerabilityAlertsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposGetArchiveLinkEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * archive_format parameter
+   */
+  archive_format: string;
+  /**
+   * ref parameter
+   */
+  ref: string;
+};
+type ReposGetArchiveLinkRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateUsingTemplateEndpoint = {
+  /**
+   * template_owner parameter
+   */
+  template_owner: string;
+  /**
+   * template_repo parameter
+   */
+  template_repo: string;
+  /**
+   * The organization or person who will own the new repository. To create a new repository in an organization, the authenticated user must be a member of the specified organization.
+   */
+  owner?: string;
+  /**
+   * The name of the new repository.
+   */
+  name: string;
+  /**
+   * A short description of the new repository.
+   */
+  description?: string;
+  /**
+   * Either `true` to create a new private repository or `false` to create a new public one.
+   */
+  private?: boolean;
+};
+type ReposCreateUsingTemplateRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListPublicEndpoint = {
+  /**
+   * The integer ID of the last Repository that you've seen.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListPublicRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimListProvisionedIdentitiesEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Used for pagination: the index of the first result to return.
+   */
+  startIndex?: number;
+  /**
+   * Used for pagination: the number of results to return.
+   */
+  count?: number;
+  /**
+   * Filters results using the equals query parameter operator (`eq`). You can filter results that are equal to `id`, `userName`, `emails`, and `external_id`. For example, to search for an identity with the `userName` Octocat, you would use this query: `?filter=userName%20eq%20\"Octocat\"`.
+   */
+  filter?: string;
+};
+type ScimListProvisionedIdentitiesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimProvisionAndInviteUsersEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type ScimProvisionAndInviteUsersRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimProvisionInviteUsersEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type ScimProvisionInviteUsersRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimGetProvisioningDetailsForUserEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * scim_user_id parameter
+   */
+  scim_user_id: number;
+};
+type ScimGetProvisioningDetailsForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimReplaceProvisionedUserInformationEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * scim_user_id parameter
+   */
+  scim_user_id: number;
+};
+type ScimReplaceProvisionedUserInformationRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimUpdateProvisionedOrgMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * scim_user_id parameter
+   */
+  scim_user_id: number;
+};
+type ScimUpdateProvisionedOrgMembershipRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimUpdateUserAttributeEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * scim_user_id parameter
+   */
+  scim_user_id: number;
+};
+type ScimUpdateUserAttributeRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ScimRemoveUserFromOrgEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * scim_user_id parameter
+   */
+  scim_user_id: number;
+};
+type ScimRemoveUserFromOrgRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchCodeEndpoint = {
+  /**
+   * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching code](https://help.github.com/articles/searching-code/)" for a detailed list of qualifiers.
+   */
+  q: string;
+  /**
+   * Sorts the results of your query. Can only be `indexed`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+   */
+  sort?: "indexed";
+  /**
+   * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+   */
+  order?: "desc" | "asc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type SearchCodeRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchCommitsEndpoint = {
+  /**
+   * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching commits](https://help.github.com/articles/searching-commits/)" for a detailed list of qualifiers.
+   */
+  q: string;
+  /**
+   * Sorts the results of your query by `author-date` or `committer-date`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+   */
+  sort?: "author-date" | "committer-date";
+  /**
+   * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+   */
+  order?: "desc" | "asc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type SearchCommitsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchIssuesAndPullRequestsEndpoint = {
+  /**
+   * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)" for a detailed list of qualifiers.
+   */
+  q: string;
+  /**
+   * Sorts the results of your query by the number of `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, or `interactions`. You can also sort results by how recently the items were `created` or `updated`, Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+   */
+  sort?:
+    | "comments"
+    | "reactions"
+    | "reactions-+1"
+    | "reactions--1"
+    | "reactions-smile"
+    | "reactions-thinking_face"
+    | "reactions-heart"
+    | "reactions-tada"
+    | "interactions"
+    | "created"
+    | "updated";
+  /**
+   * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+   */
+  order?: "desc" | "asc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type SearchIssuesAndPullRequestsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchIssuesEndpoint = {
+  /**
+   * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)" for a detailed list of qualifiers.
+   */
+  q: string;
+  /**
+   * Sorts the results of your query by the number of `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, or `interactions`. You can also sort results by how recently the items were `created` or `updated`, Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+   */
+  sort?:
+    | "comments"
+    | "reactions"
+    | "reactions-+1"
+    | "reactions--1"
+    | "reactions-smile"
+    | "reactions-thinking_face"
+    | "reactions-heart"
+    | "reactions-tada"
+    | "interactions"
+    | "created"
+    | "updated";
+  /**
+   * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+   */
+  order?: "desc" | "asc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type SearchIssuesRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchLabelsEndpoint = {
+  /**
+   * The id of the repository.
+   */
+  repository_id: number;
+  /**
+   * The search keywords. This endpoint does not accept qualifiers in the query. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query).
+   */
+  q: string;
+  /**
+   * Sorts the results of your query by when the label was `created` or `updated`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+   */
+  sort?: "created" | "updated";
+  /**
+   * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+   */
+  order?: "desc" | "asc";
+};
+type SearchLabelsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchReposEndpoint = {
+  /**
+   * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching for repositories](https://help.github.com/articles/searching-for-repositories/)" for a detailed list of qualifiers.
+   */
+  q: string;
+  /**
+   * Sorts the results of your query by number of `stars`, `forks`, or `help-wanted-issues` or how recently the items were `updated`. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+   */
+  sort?: "stars" | "forks" | "help-wanted-issues" | "updated";
+  /**
+   * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+   */
+  order?: "desc" | "asc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type SearchReposRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchTopicsEndpoint = {
+  /**
+   * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query).
+   */
+  q: string;
+};
+type SearchTopicsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type SearchUsersEndpoint = {
+  /**
+   * The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://developer.github.com/v3/search/#constructing-a-search-query). See "[Searching users](https://help.github.com/articles/searching-users/)" for a detailed list of qualifiers.
+   */
+  q: string;
+  /**
+   * Sorts the results of your query by number of `followers` or `repositories`, or when the person `joined` GitHub. Default: [best match](https://developer.github.com/v3/search/#ranking-search-results)
+   */
+  sort?: "followers" | "repositories" | "joined";
+  /**
+   * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`.
+   */
+  order?: "desc" | "asc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type SearchUsersRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsGetEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+};
+type TeamsGetRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsUpdateEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * The name of the team.
+   */
+  name: string;
+  /**
+   * The description of the team.
+   */
+  description?: string;
+  /**
+   * The level of privacy this team should have. Editing teams without specifying this parameter leaves `privacy` intact. The options are:
+   * **For a non-nested team:**
+   * \* `secret` - only visible to organization owners and members of this team.
+   * \* `closed` - visible to all members of this organization.
+   * **For a parent or child team:**
+   * \* `closed` - visible to all members of this organization.
+   */
+  privacy?: "secret" | "closed";
+  /**
+   * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of:
+   * \* `pull` - team members can pull, but not push to or administer newly-added repositories.
+   * \* `push` - team members can pull and push, but not administer newly-added repositories.
+   * \* `admin` - team members can pull, push and administer newly-added repositories.
+   */
+  permission?: "pull" | "push" | "admin";
+  /**
+   * The ID of a team to set as the parent team. **Note**: You must pass the `hellcat-preview` media type to use this parameter.
+   */
+  parent_team_id?: number;
+};
+type TeamsUpdateRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsDeleteEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+};
+type TeamsDeleteRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListDiscussionsEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * Sorts the discussion comments by the date they were created. To return the oldest comments first, set to `asc`. Can be one of `asc` or `desc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListDiscussionsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsCreateDiscussionEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * The discussion post's title.
+   */
+  title: string;
+  /**
+   * The discussion post's body text.
+   */
+  body: string;
+  /**
+   * Private posts are only visible to team members, organization owners, and team maintainers. Public posts are visible to all members of the organization. Set to `true` to create a private post.
+   */
+  private?: boolean;
+};
+type TeamsCreateDiscussionRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsGetDiscussionEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+};
+type TeamsGetDiscussionRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsUpdateDiscussionEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * The discussion post's title.
+   */
+  title?: string;
+  /**
+   * The discussion post's body text.
+   */
+  body?: string;
+};
+type TeamsUpdateDiscussionRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsDeleteDiscussionEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+};
+type TeamsDeleteDiscussionRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListDiscussionCommentsEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * Sorts the discussion comments by the date they were created. To return the oldest comments first, set to `asc`. Can be one of `asc` or `desc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListDiscussionCommentsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsCreateDiscussionCommentEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * The discussion comment's body text.
+   */
+  body: string;
+};
+type TeamsCreateDiscussionCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsGetDiscussionCommentEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * comment_number parameter
+   */
+  comment_number: number;
+};
+type TeamsGetDiscussionCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsUpdateDiscussionCommentEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * comment_number parameter
+   */
+  comment_number: number;
+  /**
+   * The discussion comment's body text.
+   */
+  body: string;
+};
+type TeamsUpdateDiscussionCommentRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsDeleteDiscussionCommentEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * comment_number parameter
+   */
+  comment_number: number;
+};
+type TeamsDeleteDiscussionCommentRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsListForTeamDiscussionCommentEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * comment_number parameter
+   */
+  comment_number: number;
+  /**
+   * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a team discussion comment.
+   */
+  content?:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReactionsListForTeamDiscussionCommentRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsCreateForTeamDiscussionCommentEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * comment_number parameter
+   */
+  comment_number: number;
+  /**
+   * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the team discussion comment.
+   */
+  content:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+};
+type ReactionsCreateForTeamDiscussionCommentRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsListForTeamDiscussionEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * Returns a single [reaction type](https://developer.github.com/v3/reactions/#reaction-types). Omit this parameter to list all reactions to a team discussion.
+   */
+  content?:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReactionsListForTeamDiscussionRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReactionsCreateForTeamDiscussionEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * discussion_number parameter
+   */
+  discussion_number: number;
+  /**
+   * The [reaction type](https://developer.github.com/v3/reactions/#reaction-types) to add to the team discussion.
+   */
+  content:
+    | "+1"
+    | "-1"
+    | "laugh"
+    | "confused"
+    | "heart"
+    | "hooray"
+    | "rocket"
+    | "eyes";
+};
+type ReactionsCreateForTeamDiscussionRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListPendingInvitationsEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListPendingInvitationsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListMembersEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * Filters members returned by their role in the team. Can be one of:
+   * \* `member` - normal members of the team.
+   * \* `maintainer` - team maintainers.
+   * \* `all` - all members of the team.
+   */
+  role?: "member" | "maintainer" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListMembersRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsGetMemberEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type TeamsGetMemberRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsAddMemberEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type TeamsAddMemberRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsRemoveMemberEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type TeamsRemoveMemberRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsGetMembershipEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type TeamsGetMembershipRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsAddOrUpdateMembershipEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * The role that this user should have in the team. Can be one of:
+   * \* `member` - a normal member of the team.
+   * \* `maintainer` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description.
+   */
+  role?: "member" | "maintainer";
+};
+type TeamsAddOrUpdateMembershipRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsRemoveMembershipEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type TeamsRemoveMembershipRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListProjectsEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListProjectsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsReviewProjectEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+};
+type TeamsReviewProjectRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsAddOrUpdateProjectEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+  /**
+   * The permission to grant to the team for this project. Can be one of:
+   * \* `read` - team members can read, but not write to or administer this project.
+   * \* `write` - team members can read and write, but not administer this project.
+   * \* `admin` - team members can read, write and administer this project.
+   * Default: the team's `permission` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://developer.github.com/v3/#http-verbs)."
+   * **Note**: If you pass the `hellcat-preview` media type, you can promote—but not demote—a `permission` attribute inherited from a parent team.
+   */
+  permission?: "read" | "write" | "admin";
+};
+type TeamsAddOrUpdateProjectRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsRemoveProjectEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * project_id parameter
+   */
+  project_id: number;
+};
+type TeamsRemoveProjectRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListReposEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListReposRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsCheckManagesRepoEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type TeamsCheckManagesRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsAddOrUpdateRepoEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+  /**
+   * The permission to grant the team on this repository. Can be one of:
+   * \* `pull` - team members can pull, but not push to or administer this repository.
+   * \* `push` - team members can pull and push, but not administer this repository.
+   * \* `admin` - team members can pull, push and administer this repository.
+   *
+   * If no permission is specified, the team's `permission` attribute will be used to determine what permission to grant the team on this repository.
+   * **Note**: If you pass the `hellcat-preview` media type, you can promote—but not demote—a `permission` attribute inherited through a parent team.
+   */
+  permission?: "pull" | "push" | "admin";
+};
+type TeamsAddOrUpdateRepoRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsRemoveRepoEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type TeamsRemoveRepoRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListIdPGroupsEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+};
+type TeamsListIdPGroupsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsCreateOrUpdateIdPGroupConnectionsEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * The IdP groups you want to connect to a GitHub team. When updating, the new `groups` object will replace the original one. You must include any existing groups that you don't want to remove.
+   */
+  groups: TeamsCreateOrUpdateIdPGroupConnectionsParamsGroups[];
+};
+type TeamsCreateOrUpdateIdPGroupConnectionsRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListChildEndpoint = {
+  /**
+   * team_id parameter
+   */
+  team_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListChildRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersGetAuthenticatedEndpoint = {};
+type UsersGetAuthenticatedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersUpdateAuthenticatedEndpoint = {
+  /**
+   * The new name of the user.
+   */
+  name?: string;
+  /**
+   * The publicly visible email address of the user.
+   */
+  email?: string;
+  /**
+   * The new blog URL of the user.
+   */
+  blog?: string;
+  /**
+   * The new company of the user.
+   */
+  company?: string;
+  /**
+   * The new location of the user.
+   */
+  location?: string;
+  /**
+   * The new hiring availability of the user.
+   */
+  hireable?: boolean;
+  /**
+   * The new short biography of the user.
+   */
+  bio?: string;
+};
+type UsersUpdateAuthenticatedRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListBlockedEndpoint = {};
+type UsersListBlockedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersCheckBlockedEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type UsersCheckBlockedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersBlockEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type UsersBlockRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersUnblockEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type UsersUnblockRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersTogglePrimaryEmailVisibilityEndpoint = {
+  /**
+   * Specify the _primary_ email address that needs a visibility change.
+   */
+  email: string;
+  /**
+   * Use `public` to enable an authenticated user to view the specified email address, or use `private` so this primary email address cannot be seen publicly.
+   */
+  visibility: string;
+};
+type UsersTogglePrimaryEmailVisibilityRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListEmailsEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListEmailsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersAddEmailsEndpoint = {
+  /**
+   * Adds one or more email addresses to your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an `array` of emails addresses directly, but we recommend that you pass an object using the `emails` key.
+   */
+  emails: string[];
+};
+type UsersAddEmailsRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersDeleteEmailsEndpoint = {
+  /**
+   * Deletes one or more email addresses from your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an `array` of emails addresses directly, but we recommend that you pass an object using the `emails` key.
+   */
+  emails: string[];
+};
+type UsersDeleteEmailsRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListFollowersForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListFollowersForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListFollowingForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListFollowingForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersCheckFollowingEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type UsersCheckFollowingRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersFollowEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type UsersFollowRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersUnfollowEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type UsersUnfollowRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListGpgKeysEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListGpgKeysRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersCreateGpgKeyEndpoint = {
+  /**
+   * Your GPG key, generated in ASCII-armored format. See "[Generating a new GPG key](https://help.github.com/articles/generating-a-new-gpg-key/)" for help creating a GPG key.
+   */
+  armored_public_key?: string;
+};
+type UsersCreateGpgKeyRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersGetGpgKeyEndpoint = {
+  /**
+   * gpg_key_id parameter
+   */
+  gpg_key_id: number;
+};
+type UsersGetGpgKeyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersDeleteGpgKeyEndpoint = {
+  /**
+   * gpg_key_id parameter
+   */
+  gpg_key_id: number;
+};
+type UsersDeleteGpgKeyRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListInstallationsForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListInstallationsForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListInstallationReposForAuthenticatedUserEndpoint = {
+  /**
+   * installation_id parameter
+   */
+  installation_id: number;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListInstallationReposForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsAddRepoToInstallationEndpoint = {
+  /**
+   * installation_id parameter
+   */
+  installation_id: number;
+  /**
+   * repository_id parameter
+   */
+  repository_id: number;
+};
+type AppsAddRepoToInstallationRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsRemoveRepoFromInstallationEndpoint = {
+  /**
+   * installation_id parameter
+   */
+  installation_id: number;
+  /**
+   * repository_id parameter
+   */
+  repository_id: number;
+};
+type AppsRemoveRepoFromInstallationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type IssuesListForAuthenticatedUserEndpoint = {
+  /**
+   * Indicates which sorts of issues to return. Can be one of:
+   * \* `assigned`: Issues assigned to you
+   * \* `created`: Issues created by you
+   * \* `mentioned`: Issues mentioning you
+   * \* `subscribed`: Issues you're subscribed to updates for
+   * \* `all`: All issues the authenticated user can see, regardless of participation or creation
+   */
+  filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all";
+  /**
+   * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * A list of comma separated label names. Example: `bug,ui,@high`
+   */
+  labels?: string;
+  /**
+   * What to sort results by. Can be either `created`, `updated`, `comments`.
+   */
+  sort?: "created" | "updated" | "comments";
+  /**
+   * The direction of the sort. Can be either `asc` or `desc`.
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Only issues updated at or after this time are returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type IssuesListForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListPublicKeysEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListPublicKeysRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersCreatePublicKeyEndpoint = {
+  /**
+   * A descriptive name for the new key. Use a name that will help you recognize this key in your GitHub account. For example, if you're using a personal Mac, you might call this key "Personal MacBook Air".
+   */
+  title?: string;
+  /**
+   * The public SSH key to add to your GitHub account. See "[Generating a new SSH key](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)" for guidance on how to create a public SSH key.
+   */
+  key?: string;
+};
+type UsersCreatePublicKeyRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersGetPublicKeyEndpoint = {
+  /**
+   * key_id parameter
+   */
+  key_id: number;
+};
+type UsersGetPublicKeyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersDeletePublicKeyEndpoint = {
+  /**
+   * key_id parameter
+   */
+  key_id: number;
+};
+type UsersDeletePublicKeyRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListMarketplacePurchasesForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListMarketplacePurchasesForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsListMarketplacePurchasesForAuthenticatedUserStubbedEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type AppsListMarketplacePurchasesForAuthenticatedUserStubbedRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListMembershipsEndpoint = {
+  /**
+   * Indicates the state of the memberships to return. Can be either `active` or `pending`. If not specified, the API returns both active and pending memberships.
+   */
+  state?: "active" | "pending";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListMembershipsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsGetMembershipForAuthenticatedUserEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+};
+type OrgsGetMembershipForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsUpdateMembershipEndpoint = {
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * The state that the membership should be in. Only `"active"` will be accepted.
+   */
+  state: "active";
+};
+type OrgsUpdateMembershipRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsStartForAuthenticatedUserEndpoint = {
+  /**
+   * An array of repositories to include in the migration.
+   */
+  repositories: string[];
+  /**
+   * Locks the `repositories` to prevent changes during the migration when set to `true`.
+   */
+  lock_repositories?: boolean;
+  /**
+   * Does not include attachments uploaded to GitHub.com in the migration data when set to `true`. Excluding attachments will reduce the migration archive file size.
+   */
+  exclude_attachments?: boolean;
+};
+type MigrationsStartForAuthenticatedUserRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsListForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type MigrationsListForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsGetStatusForAuthenticatedUserEndpoint = {
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+};
+type MigrationsGetStatusForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsGetArchiveForAuthenticatedUserEndpoint = {
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+};
+type MigrationsGetArchiveForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsDeleteArchiveForAuthenticatedUserEndpoint = {
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+};
+type MigrationsDeleteArchiveForAuthenticatedUserRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type MigrationsUnlockRepoForAuthenticatedUserEndpoint = {
+  /**
+   * migration_id parameter
+   */
+  migration_id: number;
+  /**
+   * repo_name parameter
+   */
+  repo_name: string;
+};
+type MigrationsUnlockRepoForAuthenticatedUserRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsCreateForAuthenticatedUserEndpoint = {
+  /**
+   * The name of the project.
+   */
+  name: string;
+  /**
+   * The description of the project.
+   */
+  body?: string;
+};
+type ProjectsCreateForAuthenticatedUserRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListPublicEmailsEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListPublicEmailsRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListEndpoint = {
+  /**
+   * Can be one of `all`, `public`, or `private`.
+   */
+  visibility?: "all" | "public" | "private";
+  /**
+   * Comma-separated list of values. Can include:
+   * \* `owner`: Repositories that are owned by the authenticated user.
+   * \* `collaborator`: Repositories that the user has been added to as a collaborator.
+   * \* `organization_member`: Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on.
+   */
+  affiliation?: string;
+  /**
+   * Can be one of `all`, `owner`, `public`, `private`, `member`. Default: `all`
+   *
+   * Will cause a `422` error if used in the same request as **visibility** or **affiliation**. Will cause a `422` error if used in the same request as **visibility** or **affiliation**.
+   */
+  type?: "all" | "owner" | "public" | "private" | "member";
+  /**
+   * Can be one of `created`, `updated`, `pushed`, `full_name`.
+   */
+  sort?: "created" | "updated" | "pushed" | "full_name";
+  /**
+   * Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc`
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposCreateForAuthenticatedUserEndpoint = {
+  /**
+   * The name of the repository.
+   */
+  name: string;
+  /**
+   * A short description of the repository.
+   */
+  description?: string;
+  /**
+   * A URL with more information about the repository.
+   */
+  homepage?: string;
+  /**
+   * Either `true` to create a private repository or `false` to create a public one. Creating private repositories requires a paid GitHub account.
+   */
+  private?: boolean;
+  /**
+   * Either `true` to enable issues for this repository or `false` to disable them.
+   */
+  has_issues?: boolean;
+  /**
+   * Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error.
+   */
+  has_projects?: boolean;
+  /**
+   * Either `true` to enable the wiki for this repository or `false` to disable it.
+   */
+  has_wiki?: boolean;
+  /**
+   * Either `true` to make this repo available as a template repository or `false` to prevent it.
+   */
+  is_template?: boolean;
+  /**
+   * The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization.
+   */
+  team_id?: number;
+  /**
+   * Pass `true` to create an initial commit with empty README.
+   */
+  auto_init?: boolean;
+  /**
+   * Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, "Haskell".
+   */
+  gitignore_template?: string;
+  /**
+   * Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the `license_template` string. For example, "mit" or "mpl-2.0".
+   */
+  license_template?: string;
+  /**
+   * Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.
+   */
+  allow_squash_merge?: boolean;
+  /**
+   * Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.
+   */
+  allow_merge_commit?: boolean;
+  /**
+   * Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.
+   */
+  allow_rebase_merge?: boolean;
+};
+type ReposCreateForAuthenticatedUserRequestOptions = {
+  method: "POST";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListInvitationsForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListInvitationsForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposAcceptInvitationEndpoint = {
+  /**
+   * invitation_id parameter
+   */
+  invitation_id: number;
+};
+type ReposAcceptInvitationRequestOptions = {
+  method: "PATCH";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposDeclineInvitationEndpoint = {
+  /**
+   * invitation_id parameter
+   */
+  invitation_id: number;
+};
+type ReposDeclineInvitationRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListReposStarredByAuthenticatedUserEndpoint = {
+  /**
+   * One of `created` (when the repository was starred) or `updated` (when it was last pushed to).
+   */
+  sort?: "created" | "updated";
+  /**
+   * One of `asc` (ascending) or `desc` (descending).
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListReposStarredByAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityCheckStarringRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityCheckStarringRepoRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityStarRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityStarRepoRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityUnstarRepoEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityUnstarRepoRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListWatchedReposForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListWatchedReposForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityCheckWatchingRepoLegacyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityCheckWatchingRepoLegacyRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityWatchRepoLegacyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityWatchRepoLegacyRequestOptions = {
+  method: "PUT";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityStopWatchingRepoLegacyEndpoint = {
+  /**
+   * owner parameter
+   */
+  owner: string;
+  /**
+   * repo parameter
+   */
+  repo: string;
+};
+type ActivityStopWatchingRepoLegacyRequestOptions = {
+  method: "DELETE";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type TeamsListForAuthenticatedUserEndpoint = {
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type TeamsListForAuthenticatedUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListEndpoint = {
+  /**
+   * The integer ID of the last User that you've seen.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersGetByUsernameEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type UsersGetByUsernameRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListEventsForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListEventsForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListEventsForOrgEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * org parameter
+   */
+  org: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListEventsForOrgRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListPublicEventsForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListPublicEventsForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListFollowersForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListFollowersForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListFollowingForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListFollowingForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersCheckFollowingForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * target_user parameter
+   */
+  target_user: string;
+};
+type UsersCheckFollowingForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type GistsListPublicForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Only gists updated at or after this time are returned.
+   */
+  since?: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type GistsListPublicForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListGpgKeysForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListGpgKeysForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersGetContextForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Identifies which additional information you'd like to receive about the person's hovercard. Can be `organization`, `repository`, `issue`, `pull_request`. **Required** when using `subject_id`.
+   */
+  subject_type?: "organization" | "repository" | "issue" | "pull_request";
+  /**
+   * Uses the ID for the `subject_type` you specified. **Required** when using `subject_type`.
+   */
+  subject_id?: string;
+};
+type UsersGetContextForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsGetUserInstallationEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type AppsGetUserInstallationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type AppsFindUserInstallationEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+};
+type AppsFindUserInstallationRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type UsersListPublicKeysForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type UsersListPublicKeysForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type OrgsListForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type OrgsListForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ProjectsListForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`.
+   */
+  state?: "open" | "closed" | "all";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ProjectsListForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListReceivedEventsForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListReceivedEventsForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListReceivedPublicEventsForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListReceivedPublicEventsForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ReposListForUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Can be one of `all`, `owner`, `member`.
+   */
+  type?: "all" | "owner" | "member";
+  /**
+   * Can be one of `created`, `updated`, `pushed`, `full_name`.
+   */
+  sort?: "created" | "updated" | "pushed" | "full_name";
+  /**
+   * Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc`
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ReposListForUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListReposStarredByUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * One of `created` (when the repository was starred) or `updated` (when it was last pushed to).
+   */
+  sort?: "created" | "updated";
+  /**
+   * One of `asc` (ascending) or `desc` (descending).
+   */
+  direction?: "asc" | "desc";
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListReposStarredByUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+type ActivityListReposWatchedByUserEndpoint = {
+  /**
+   * username parameter
+   */
+  username: string;
+  /**
+   * Results per page (max 100)
+   */
+  per_page?: number;
+  /**
+   * Page number of the results to fetch.
+   */
+  page?: number;
+};
+type ActivityListReposWatchedByUserRequestOptions = {
+  method: "GET";
+  url: Url;
+  headers: RequestHeaders;
+  request: RequestRequestOptions;
+};
+
+export type AppsCreateInstallationTokenParamsPermissions = {};
+export type GistsCreateParamsFiles = {
+  content?: string;
+};
+export type GistsUpdateParamsFiles = {
+  content?: string;
+  filename?: string;
+};
+export type OrgsCreateHookParamsConfig = {
+  url: string;
+  content_type?: string;
+  secret?: string;
+  insecure_ssl?: string;
+};
+export type OrgsUpdateHookParamsConfig = {
+  url: string;
+  content_type?: string;
+  secret?: string;
+  insecure_ssl?: string;
+};
+export type ReposUpdateBranchProtectionParamsRequiredStatusChecks = {
+  strict: boolean;
+  contexts: string[];
+};
+export type ReposUpdateBranchProtectionParamsRequiredPullRequestReviews = {
+  dismissal_restrictions?: ReposUpdateBranchProtectionParamsRequiredPullRequestReviewsDismissalRestrictions;
+  dismiss_stale_reviews?: boolean;
+  require_code_owner_reviews?: boolean;
+  required_approving_review_count?: number;
+};
+export type ReposUpdateBranchProtectionParamsRequiredPullRequestReviewsDismissalRestrictions = {
+  users?: string[];
+  teams?: string[];
+};
+export type ReposUpdateBranchProtectionParamsRestrictions = {
+  users: string[];
+  teams: string[];
+  apps?: string[];
+};
+export type ReposUpdateProtectedBranchPullRequestReviewEnforcementParamsDismissalRestrictions = {
+  users?: string[];
+  teams?: string[];
+};
+export type ChecksCreateParamsOutput = {
+  title: string;
+  summary: string;
+  text?: string;
+  annotations?: ChecksCreateParamsOutputAnnotations[];
+  images?: ChecksCreateParamsOutputImages[];
+};
+export type ChecksCreateParamsOutputAnnotations = {
+  path: string;
+  start_line: number;
+  end_line: number;
+  start_column?: number;
+  end_column?: number;
+  annotation_level: "notice" | "warning" | "failure";
+  message: string;
+  title?: string;
+  raw_details?: string;
+};
+export type ChecksCreateParamsOutputImages = {
+  alt: string;
+  image_url: string;
+  caption?: string;
+};
+export type ChecksCreateParamsActions = {
+  label: string;
+  description: string;
+  identifier: string;
+};
+export type ChecksUpdateParamsOutput = {
+  title?: string;
+  summary: string;
+  text?: string;
+  annotations?: ChecksUpdateParamsOutputAnnotations[];
+  images?: ChecksUpdateParamsOutputImages[];
+};
+export type ChecksUpdateParamsOutputAnnotations = {
+  path: string;
+  start_line: number;
+  end_line: number;
+  start_column?: number;
+  end_column?: number;
+  annotation_level: "notice" | "warning" | "failure";
+  message: string;
+  title?: string;
+  raw_details?: string;
+};
+export type ChecksUpdateParamsOutputImages = {
+  alt: string;
+  image_url: string;
+  caption?: string;
+};
+export type ChecksUpdateParamsActions = {
+  label: string;
+  description: string;
+  identifier: string;
+};
+export type ChecksSetSuitesPreferencesParamsAutoTriggerChecks = {
+  app_id: number;
+  setting: boolean;
+};
+export type ReposCreateOrUpdateFileParamsCommitter = {
+  name: string;
+  email: string;
+};
+export type ReposCreateOrUpdateFileParamsAuthor = {
+  name: string;
+  email: string;
+};
+export type ReposCreateFileParamsCommitter = {
+  name: string;
+  email: string;
+};
+export type ReposCreateFileParamsAuthor = {
+  name: string;
+  email: string;
+};
+export type ReposUpdateFileParamsCommitter = {
+  name: string;
+  email: string;
+};
+export type ReposUpdateFileParamsAuthor = {
+  name: string;
+  email: string;
+};
+export type ReposDeleteFileParamsCommitter = {
+  name?: string;
+  email?: string;
+};
+export type ReposDeleteFileParamsAuthor = {
+  name?: string;
+  email?: string;
+};
+export type GitCreateCommitParamsAuthor = {
+  name?: string;
+  email?: string;
+  date?: string;
+};
+export type GitCreateCommitParamsCommitter = {
+  name?: string;
+  email?: string;
+  date?: string;
+};
+export type GitCreateTagParamsTagger = {
+  name?: string;
+  email?: string;
+  date?: string;
+};
+export type GitCreateTreeParamsTree = {
+  path?: string;
+  mode?: "100644" | "100755" | "040000" | "160000" | "120000";
+  type?: "blob" | "tree" | "commit";
+  sha?: string;
+  content?: string;
+};
+export type ReposCreateHookParamsConfig = {
+  url: string;
+  content_type?: string;
+  secret?: string;
+  insecure_ssl?: string;
+};
+export type ReposUpdateHookParamsConfig = {
+  url: string;
+  content_type?: string;
+  secret?: string;
+  insecure_ssl?: string;
+};
+export type ReposEnablePagesSiteParamsSource = {
+  branch?: "master" | "gh-pages";
+  path?: string;
+};
+export type PullsCreateReviewParamsComments = {
+  path: string;
+  position: number;
+  body: string;
+};
+export type TeamsCreateOrUpdateIdPGroupConnectionsParamsGroups = {
+  group_id: string;
+  group_name: string;
+  group_description: string;
+};
diff --git a/setup-maven/node_modules/@octokit/types/src/generated/README.md b/setup-maven/node_modules/@octokit/types/src/generated/README.md
new file mode 100644
index 0000000..2bc90d2
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/generated/README.md
@@ -0,0 +1,3 @@
+# ⚠️ Do not edit files in this folder
+
+All files are generated. Manual changes will be overwritten. If you find a problem, please look into how they are generated. When in doubt, please open a new issue.
diff --git a/setup-maven/node_modules/@octokit/types/src/index.ts b/setup-maven/node_modules/@octokit/types/src/index.ts
new file mode 100644
index 0000000..200f0a2
--- /dev/null
+++ b/setup-maven/node_modules/@octokit/types/src/index.ts
@@ -0,0 +1,18 @@
+export * from "./AuthInterface";
+export * from "./EndpointDefaults";
+export * from "./EndpointInterface";
+export * from "./EndpointOptions";
+export * from "./Fetch";
+export * from "./OctokitResponse";
+export * from "./RequestHeaders";
+export * from "./RequestInterface";
+export * from "./RequestMethod";
+export * from "./RequestOptions";
+export * from "./RequestParameters";
+export * from "./RequestRequestOptions";
+export * from "./ResponseHeaders";
+export * from "./Route";
+export * from "./Signal";
+export * from "./StrategyInterface";
+export * from "./Url";
+export * from "./VERSION";
diff --git a/setup-maven/node_modules/@types/node/LICENSE b/setup-maven/node_modules/@types/node/LICENSE
new file mode 100644
index 0000000..2107107
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/LICENSE
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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/setup-maven/node_modules/@types/node/README.md b/setup-maven/node_modules/@types/node/README.md
new file mode 100644
index 0000000..dd73fe1
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/README.md
@@ -0,0 +1,16 @@
+# Installation
+> `npm install --save @types/node`
+
+# Summary
+This package contains type definitions for Node.js (http://nodejs.org/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
+
+### Additional Details
+ * Last updated: Mon, 25 Nov 2019 22:58:16 GMT
+ * Dependencies: none
+ * Global values: `Buffer`, `NodeJS`, `Symbol`, `__dirname`, `__filename`, `clearImmediate`, `clearInterval`, `clearTimeout`, `console`, `exports`, `global`, `module`, `process`, `queueMicrotask`, `require`, `setImmediate`, `setInterval`, `setTimeout`
+
+# Credits
+These definitions were written by Microsoft TypeScript (https://github.com/Microsoft), DefinitelyTyped (https://github.com/DefinitelyTyped), Alberto Schiabel (https://github.com/jkomyno), Alexander T. (https://github.com/a-tarasyuk), Alvis HT Tang (https://github.com/alvis), Andrew Makarov (https://github.com/r3nya), Benjamin Toueg (https://github.com/btoueg), Bruno Scheufler (https://github.com/brunoscheufler), Chigozirim C. (https://github.com/smac89), Christian Vaagland Tellnes (https://github.com/tellnes), David Junger (https://github.com/touffy), Deividas Bakanas (https://github.com/DeividasBakanas), Eugene Y. Q. Shen (https://github.com/eyqs), Flarna (https://github.com/Flarna), Hannes Magnusson (https://github.com/Hannes-Magnusson-CK), Hoàng Văn Khải (https://github.com/KSXGitHub), Huw (https://github.com/hoo29), Kelvin Jin (https://github.com/kjin), Klaus Meinhardt (https://github.com/ajafff), Lishude (https://github.com/islishude), Mariusz Wiktorczyk (https://github.com/mwiktorczyk), Mohsen Azimi (https://github.com/mohsen1), Nicolas Even (https://github.com/n-e), Nicolas Voigt (https://github.com/octo-sniffle), Nikita Galkin (https://github.com/galkin), Parambir Singh (https://github.com/parambirs), Sebastian Silbermann (https://github.com/eps1lon), Simon Schick (https://github.com/SimonSchick), Thomas den Hollander (https://github.com/ThomasdenH), Wilco Bakker (https://github.com/WilcoBakker), wwwy3y3 (https://github.com/wwwy3y3), Zane Hannan AU (https://github.com/ZaneHannanAU), Samuel Ainsworth (https://github.com/samuela), Kyle Uehlein (https://github.com/kuehlein), Jordi Oliveras Rovira (https://github.com/j-oliveras), Thanik Bhongbhibhat (https://github.com/bhongy), Marcin Kopacz (https://github.com/chyzwar), Trivikram Kamat (https://github.com/trivikr), Minh Son Nguyen (https://github.com/nguymin4), Junxiao Shi (https://github.com/yoursunny), and Ilia Baryshnikov (https://github.com/qwelias).
diff --git a/setup-maven/node_modules/@types/node/assert.d.ts b/setup-maven/node_modules/@types/node/assert.d.ts
new file mode 100644
index 0000000..1244813
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/assert.d.ts
@@ -0,0 +1,48 @@
+declare module "assert" {
+    function internal(value: any, message?: string | Error): void;
+    namespace internal {
+        class AssertionError implements Error {
+            name: string;
+            message: string;
+            actual: any;
+            expected: any;
+            operator: string;
+            generatedMessage: boolean;
+            code: 'ERR_ASSERTION';
+
+            constructor(options?: {
+                message?: string; actual?: any; expected?: any;
+                operator?: string; stackStartFn?: Function
+            });
+        }
+
+        function fail(message?: string | Error): never;
+        /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
+        function fail(actual: any, expected: any, message?: string | Error, operator?: string, stackStartFn?: Function): never;
+        function ok(value: any, message?: string | Error): void;
+        function equal(actual: any, expected: any, message?: string | Error): void;
+        function notEqual(actual: any, expected: any, message?: string | Error): void;
+        function deepEqual(actual: any, expected: any, message?: string | Error): void;
+        function notDeepEqual(actual: any, expected: any, message?: string | Error): void;
+        function strictEqual(actual: any, expected: any, message?: string | Error): void;
+        function notStrictEqual(actual: any, expected: any, message?: string | Error): void;
+        function deepStrictEqual(actual: any, expected: any, message?: string | Error): void;
+        function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void;
+
+        function throws(block: () => any, message?: string | Error): void;
+        function throws(block: () => any, error: RegExp | Function | Object | Error, message?: string | Error): void;
+        function doesNotThrow(block: () => any, message?: string | Error): void;
+        function doesNotThrow(block: () => any, error: RegExp | Function, message?: string | Error): void;
+
+        function ifError(value: any): void;
+
+        function rejects(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
+        function rejects(block: (() => Promise<any>) | Promise<any>, error: RegExp | Function | Object | Error, message?: string | Error): Promise<void>;
+        function doesNotReject(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
+        function doesNotReject(block: (() => Promise<any>) | Promise<any>, error: RegExp | Function, message?: string | Error): Promise<void>;
+
+        const strict: typeof internal;
+    }
+
+    export = internal;
+}
diff --git a/setup-maven/node_modules/@types/node/async_hooks.d.ts b/setup-maven/node_modules/@types/node/async_hooks.d.ts
new file mode 100644
index 0000000..cca992e
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/async_hooks.d.ts
@@ -0,0 +1,132 @@
+/**
+ * Async Hooks module: https://nodejs.org/api/async_hooks.html
+ */
+declare module "async_hooks" {
+    /**
+     * Returns the asyncId of the current execution context.
+     */
+    function executionAsyncId(): number;
+
+    /**
+     * Returns the ID of the resource responsible for calling the callback that is currently being executed.
+     */
+    function triggerAsyncId(): number;
+
+    interface HookCallbacks {
+        /**
+         * Called when a class is constructed that has the possibility to emit an asynchronous event.
+         * @param asyncId a unique ID for the async resource
+         * @param type the type of the async resource
+         * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created
+         * @param resource reference to the resource representing the async operation, needs to be released during destroy
+         */
+        init?(asyncId: number, type: string, triggerAsyncId: number, resource: Object): void;
+
+        /**
+         * When an asynchronous operation is initiated or completes a callback is called to notify the user.
+         * The before callback is called just before said callback is executed.
+         * @param asyncId the unique identifier assigned to the resource about to execute the callback.
+         */
+        before?(asyncId: number): void;
+
+        /**
+         * Called immediately after the callback specified in before is completed.
+         * @param asyncId the unique identifier assigned to the resource which has executed the callback.
+         */
+        after?(asyncId: number): void;
+
+        /**
+         * Called when a promise has resolve() called. This may not be in the same execution id
+         * as the promise itself.
+         * @param asyncId the unique id for the promise that was resolve()d.
+         */
+        promiseResolve?(asyncId: number): void;
+
+        /**
+         * Called after the resource corresponding to asyncId is destroyed
+         * @param asyncId a unique ID for the async resource
+         */
+        destroy?(asyncId: number): void;
+    }
+
+    interface AsyncHook {
+        /**
+         * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
+         */
+        enable(): this;
+
+        /**
+         * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
+         */
+        disable(): this;
+    }
+
+    /**
+     * Registers functions to be called for different lifetime events of each async operation.
+     * @param options the callbacks to register
+     * @return an AsyncHooks instance used for disabling and enabling hooks
+     */
+    function createHook(options: HookCallbacks): AsyncHook;
+
+    interface AsyncResourceOptions {
+      /**
+       * The ID of the execution context that created this async event.
+       * Default: `executionAsyncId()`
+       */
+      triggerAsyncId?: number;
+
+      /**
+       * Disables automatic `emitDestroy` when the object is garbage collected.
+       * This usually does not need to be set (even if `emitDestroy` is called
+       * manually), unless the resource's `asyncId` is retrieved and the
+       * sensitive API's `emitDestroy` is called with it.
+       * Default: `false`
+       */
+      requireManualDestroy?: boolean;
+    }
+
+    /**
+     * The class AsyncResource was designed to be extended by the embedder's async resources.
+     * Using this users can easily trigger the lifetime events of their own resources.
+     */
+    class AsyncResource {
+        /**
+         * AsyncResource() is meant to be extended. Instantiating a
+         * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+         * async_hook.executionAsyncId() is used.
+         * @param type The type of async event.
+         * @param triggerAsyncId The ID of the execution context that created
+         *   this async event (default: `executionAsyncId()`), or an
+         *   AsyncResourceOptions object (since 9.3)
+         */
+        constructor(type: string, triggerAsyncId?: number|AsyncResourceOptions);
+
+        /**
+         * Call the provided function with the provided arguments in the
+         * execution context of the async resource. This will establish the
+         * context, trigger the AsyncHooks before callbacks, call the function,
+         * trigger the AsyncHooks after callbacks, and then restore the original
+         * execution context.
+         * @param fn The function to call in the execution context of this
+         *   async resource.
+         * @param thisArg The receiver to be used for the function call.
+         * @param args Optional arguments to pass to the function.
+         */
+        runInAsyncScope<This, Result>(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result;
+
+        /**
+         * Call AsyncHooks destroy callbacks.
+         */
+        emitDestroy(): void;
+
+        /**
+         * @return the unique ID assigned to this AsyncResource instance.
+         */
+        asyncId(): number;
+
+        /**
+         * @return the trigger ID for this AsyncResource instance.
+         */
+        triggerAsyncId(): number;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/base.d.ts b/setup-maven/node_modules/@types/node/base.d.ts
new file mode 100644
index 0000000..70983d9
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/base.d.ts
@@ -0,0 +1,41 @@
+// base definnitions for all NodeJS modules that are not specific to any version of TypeScript
+/// <reference path="globals.d.ts" />
+/// <reference path="assert.d.ts" />
+/// <reference path="async_hooks.d.ts" />
+/// <reference path="buffer.d.ts" />
+/// <reference path="child_process.d.ts" />
+/// <reference path="cluster.d.ts" />
+/// <reference path="console.d.ts" />
+/// <reference path="constants.d.ts" />
+/// <reference path="crypto.d.ts" />
+/// <reference path="dgram.d.ts" />
+/// <reference path="dns.d.ts" />
+/// <reference path="domain.d.ts" />
+/// <reference path="events.d.ts" />
+/// <reference path="fs.d.ts" />
+/// <reference path="http.d.ts" />
+/// <reference path="http2.d.ts" />
+/// <reference path="https.d.ts" />
+/// <reference path="inspector.d.ts" />
+/// <reference path="module.d.ts" />
+/// <reference path="net.d.ts" />
+/// <reference path="os.d.ts" />
+/// <reference path="path.d.ts" />
+/// <reference path="perf_hooks.d.ts" />
+/// <reference path="process.d.ts" />
+/// <reference path="punycode.d.ts" />
+/// <reference path="querystring.d.ts" />
+/// <reference path="readline.d.ts" />
+/// <reference path="repl.d.ts" />
+/// <reference path="stream.d.ts" />
+/// <reference path="string_decoder.d.ts" />
+/// <reference path="timers.d.ts" />
+/// <reference path="tls.d.ts" />
+/// <reference path="trace_events.d.ts" />
+/// <reference path="tty.d.ts" />
+/// <reference path="url.d.ts" />
+/// <reference path="util.d.ts" />
+/// <reference path="v8.d.ts" />
+/// <reference path="vm.d.ts" />
+/// <reference path="worker_threads.d.ts" />
+/// <reference path="zlib.d.ts" />
diff --git a/setup-maven/node_modules/@types/node/buffer.d.ts b/setup-maven/node_modules/@types/node/buffer.d.ts
new file mode 100644
index 0000000..7eb1061
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/buffer.d.ts
@@ -0,0 +1,22 @@
+declare module "buffer" {
+    export const INSPECT_MAX_BYTES: number;
+    export const kMaxLength: number;
+    export const kStringMaxLength: number;
+    export const constants: {
+        MAX_LENGTH: number;
+        MAX_STRING_LENGTH: number;
+    };
+    const BuffType: typeof Buffer;
+
+    export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary";
+
+    export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer;
+
+    export const SlowBuffer: {
+        /** @deprecated since v6.0.0, use Buffer.allocUnsafeSlow() */
+        new(size: number): Buffer;
+        prototype: Buffer;
+    };
+
+    export { BuffType as Buffer };
+}
diff --git a/setup-maven/node_modules/@types/node/child_process.d.ts b/setup-maven/node_modules/@types/node/child_process.d.ts
new file mode 100644
index 0000000..09eeba3
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/child_process.d.ts
@@ -0,0 +1,478 @@
+declare module "child_process" {
+    import * as events from "events";
+    import * as net from "net";
+    import { Writable, Readable, Stream, Pipe } from "stream";
+
+    interface ChildProcess extends events.EventEmitter {
+        stdin: Writable | null;
+        stdout: Readable | null;
+        stderr: Readable | null;
+        readonly channel?: Pipe | null;
+        readonly stdio: [
+            Writable | null, // stdin
+            Readable | null, // stdout
+            Readable | null, // stderr
+            Readable | Writable | null | undefined, // extra
+            Readable | Writable | null | undefined // extra
+        ];
+        readonly killed: boolean;
+        readonly pid: number;
+        readonly connected: boolean;
+        kill(signal?: NodeJS.Signals | number): void;
+        send(message: any, callback?: (error: Error | null) => void): boolean;
+        send(message: any, sendHandle?: net.Socket | net.Server, callback?: (error: Error | null) => void): boolean;
+        send(message: any, sendHandle?: net.Socket | net.Server, options?: MessageOptions, callback?: (error: Error | null) => void): boolean;
+        disconnect(): void;
+        unref(): void;
+        ref(): void;
+
+        /**
+         * events.EventEmitter
+         * 1. close
+         * 2. disconnect
+         * 3. error
+         * 4. exit
+         * 5. message
+         */
+
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
+        addListener(event: "disconnect", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        addListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close", code: number, signal: NodeJS.Signals): boolean;
+        emit(event: "disconnect"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean;
+        emit(event: "message", message: any, sendHandle: net.Socket | net.Server): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
+        on(event: "disconnect", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        on(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
+        once(event: "disconnect", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        once(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
+        prependListener(event: "disconnect", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        prependListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
+        prependOnceListener(event: "disconnect", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        prependOnceListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+    }
+
+    // return this object when stdio option is undefined or not specified
+    interface ChildProcessWithoutNullStreams extends ChildProcess {
+        stdin: Writable;
+        stdout: Readable;
+        stderr: Readable;
+        readonly stdio: [
+            Writable, // stdin
+            Readable, // stdout
+            Readable, // stderr
+            Readable | Writable | null | undefined, // extra, no modification
+            Readable | Writable | null | undefined // extra, no modification
+        ];
+    }
+
+    // return this object when stdio option is a tuple of 3
+    interface ChildProcessByStdio<
+        I extends null | Writable,
+        O extends null | Readable,
+        E extends null | Readable,
+    > extends ChildProcess {
+        stdin: I;
+        stdout: O;
+        stderr: E;
+        readonly stdio: [
+            I,
+            O,
+            E,
+            Readable | Writable | null | undefined, // extra, no modification
+            Readable | Writable | null | undefined // extra, no modification
+        ];
+    }
+
+    interface MessageOptions {
+        keepOpen?: boolean;
+    }
+
+    type StdioOptions = "pipe" | "ignore" | "inherit" | Array<("pipe" | "ipc" | "ignore" | "inherit" | Stream | number | null | undefined)>;
+
+    interface ProcessEnvOptions {
+        uid?: number;
+        gid?: number;
+        cwd?: string;
+        env?: NodeJS.ProcessEnv;
+    }
+
+    interface CommonOptions extends ProcessEnvOptions {
+        /**
+         * @default true
+         */
+        windowsHide?: boolean;
+        /**
+         * @default 0
+         */
+        timeout?: number;
+    }
+
+    interface SpawnOptions extends CommonOptions {
+        argv0?: string;
+        stdio?: StdioOptions;
+        detached?: boolean;
+        shell?: boolean | string;
+        windowsVerbatimArguments?: boolean;
+    }
+
+    interface SpawnOptionsWithoutStdio extends SpawnOptions {
+        stdio?: 'pipe' | Array<null | undefined | 'pipe'>;
+    }
+
+    type StdioNull = 'inherit' | 'ignore' | Stream;
+    type StdioPipe = undefined | null | 'pipe';
+
+    interface SpawnOptionsWithStdioTuple<
+        Stdin extends StdioNull | StdioPipe,
+        Stdout extends StdioNull | StdioPipe,
+        Stderr extends StdioNull | StdioPipe,
+    > extends SpawnOptions {
+        stdio: [Stdin, Stdout, Stderr];
+    }
+
+    // overloads of spawn without 'args'
+    function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>,
+    ): ChildProcessByStdio<Writable, Readable, Readable>;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>,
+    ): ChildProcessByStdio<Writable, Readable, null>;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>,
+    ): ChildProcessByStdio<Writable, null, Readable>;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,
+    ): ChildProcessByStdio<null, Readable, Readable>;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>,
+    ): ChildProcessByStdio<Writable, null, null>;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>,
+    ): ChildProcessByStdio<null, Readable, null>;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>,
+    ): ChildProcessByStdio<null, null, Readable>;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>,
+    ): ChildProcessByStdio<null, null, null>;
+
+    function spawn(command: string, options: SpawnOptions): ChildProcess;
+
+    // overloads of spawn with 'args'
+    function spawn(command: string, args?: ReadonlyArray<string>, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>,
+    ): ChildProcessByStdio<Writable, Readable, Readable>;
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>,
+    ): ChildProcessByStdio<Writable, Readable, null>;
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>,
+    ): ChildProcessByStdio<Writable, null, Readable>;
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,
+    ): ChildProcessByStdio<null, Readable, Readable>;
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>,
+    ): ChildProcessByStdio<Writable, null, null>;
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>,
+    ): ChildProcessByStdio<null, Readable, null>;
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>,
+    ): ChildProcessByStdio<null, null, Readable>;
+    function spawn(
+        command: string,
+        args: ReadonlyArray<string>,
+        options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>,
+    ): ChildProcessByStdio<null, null, null>;
+
+    function spawn(command: string, args: ReadonlyArray<string>, options: SpawnOptions): ChildProcess;
+
+    interface ExecOptions extends CommonOptions {
+        shell?: string;
+        maxBuffer?: number;
+        killSignal?: NodeJS.Signals | number;
+    }
+
+    interface ExecOptionsWithStringEncoding extends ExecOptions {
+        encoding: BufferEncoding;
+    }
+
+    interface ExecOptionsWithBufferEncoding extends ExecOptions {
+        encoding: string | null; // specify `null`.
+    }
+
+    interface ExecException extends Error {
+        cmd?: string;
+        killed?: boolean;
+        code?: number;
+        signal?: NodeJS.Signals;
+    }
+
+    // no `options` definitely means stdout/stderr are `string`.
+    function exec(command: string, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+    // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+    function exec(command: string, options: { encoding: "buffer" | null } & ExecOptions, callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+
+    // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+    function exec(command: string, options: { encoding: BufferEncoding } & ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+    // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+    // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+    function exec(command: string, options: { encoding: string } & ExecOptions, callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess;
+
+    // `options` without an `encoding` means stdout/stderr are definitely `string`.
+    function exec(command: string, options: ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+    // fallback if nothing else matches. Worst case is always `string | Buffer`.
+    function exec(
+        command: string,
+        options: ({ encoding?: string | null } & ExecOptions) | undefined | null,
+        callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+    ): ChildProcess;
+
+    interface PromiseWithChild<T> extends Promise<T> {
+        child: ChildProcess;
+    }
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace exec {
+        function __promisify__(command: string): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(command: string, options: { encoding: "buffer" | null } & ExecOptions): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+        function __promisify__(command: string, options: { encoding: BufferEncoding } & ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(command: string, options: ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(command: string, options?: ({ encoding?: string | null } & ExecOptions) | null): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+    }
+
+    interface ExecFileOptions extends CommonOptions {
+        maxBuffer?: number;
+        killSignal?: NodeJS.Signals | number;
+        windowsVerbatimArguments?: boolean;
+        shell?: boolean | string;
+    }
+    interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
+        encoding: BufferEncoding;
+    }
+    interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
+        encoding: 'buffer' | null;
+    }
+    interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {
+        encoding: string;
+    }
+
+    function execFile(file: string): ChildProcess;
+    function execFile(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess;
+    function execFile(file: string, args?: ReadonlyArray<string> | null): ChildProcess;
+    function execFile(file: string, args: ReadonlyArray<string> | undefined | null, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess;
+
+    // no `options` definitely means stdout/stderr are `string`.
+    function execFile(file: string, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+    function execFile(file: string, args: ReadonlyArray<string> | undefined | null, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+
+    // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+    function execFile(file: string, options: ExecFileOptionsWithBufferEncoding, callback: (error: Error | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+    function execFile(
+        file: string,
+        args: ReadonlyArray<string> | undefined | null,
+        options: ExecFileOptionsWithBufferEncoding,
+        callback: (error: Error | null, stdout: Buffer, stderr: Buffer) => void,
+    ): ChildProcess;
+
+    // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+    function execFile(file: string, options: ExecFileOptionsWithStringEncoding, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+    function execFile(
+        file: string,
+        args: ReadonlyArray<string> | undefined | null,
+        options: ExecFileOptionsWithStringEncoding,
+        callback: (error: Error | null, stdout: string, stderr: string) => void,
+    ): ChildProcess;
+
+    // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+    // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+    function execFile(
+        file: string,
+        options: ExecFileOptionsWithOtherEncoding,
+        callback: (error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+    ): ChildProcess;
+    function execFile(
+        file: string,
+        args: ReadonlyArray<string> | undefined | null,
+        options: ExecFileOptionsWithOtherEncoding,
+        callback: (error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+    ): ChildProcess;
+
+    // `options` without an `encoding` means stdout/stderr are definitely `string`.
+    function execFile(file: string, options: ExecFileOptions, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+    function execFile(file: string, args: ReadonlyArray<string> | undefined | null, options: ExecFileOptions, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+
+    // fallback if nothing else matches. Worst case is always `string | Buffer`.
+    function execFile(
+        file: string,
+        options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
+        callback: ((error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
+    ): ChildProcess;
+    function execFile(
+        file: string,
+        args: ReadonlyArray<string> | undefined | null,
+        options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
+        callback: ((error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
+    ): ChildProcess;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace execFile {
+        function __promisify__(file: string): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(file: string, args: string[] | undefined | null): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(file: string, options: ExecFileOptionsWithBufferEncoding): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+        function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithBufferEncoding): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+        function __promisify__(file: string, options: ExecFileOptionsWithStringEncoding): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithStringEncoding): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(file: string, options: ExecFileOptionsWithOtherEncoding): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+        function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithOtherEncoding): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+        function __promisify__(file: string, options: ExecFileOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+        function __promisify__(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+        function __promisify__(
+            file: string,
+            args: string[] | undefined | null,
+            options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
+        ): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+    }
+
+    interface ForkOptions extends ProcessEnvOptions {
+        execPath?: string;
+        execArgv?: string[];
+        silent?: boolean;
+        stdio?: StdioOptions;
+        detached?: boolean;
+        windowsVerbatimArguments?: boolean;
+    }
+    function fork(modulePath: string, args?: ReadonlyArray<string>, options?: ForkOptions): ChildProcess;
+
+    interface SpawnSyncOptions extends CommonOptions {
+        argv0?: string; // Not specified in the docs
+        input?: string | NodeJS.ArrayBufferView;
+        stdio?: StdioOptions;
+        killSignal?: NodeJS.Signals | number;
+        maxBuffer?: number;
+        encoding?: string;
+        shell?: boolean | string;
+        windowsVerbatimArguments?: boolean;
+    }
+    interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions {
+        encoding: BufferEncoding;
+    }
+    interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions {
+        encoding: string; // specify `null`.
+    }
+    interface SpawnSyncReturns<T> {
+        pid: number;
+        output: string[];
+        stdout: T;
+        stderr: T;
+        status: number | null;
+        signal: NodeJS.Signals | null;
+        error?: Error;
+    }
+    function spawnSync(command: string): SpawnSyncReturns<Buffer>;
+    function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns<string>;
+    function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns<Buffer>;
+    function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns<Buffer>;
+    function spawnSync(command: string, args?: ReadonlyArray<string>, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns<string>;
+    function spawnSync(command: string, args?: ReadonlyArray<string>, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns<Buffer>;
+    function spawnSync(command: string, args?: ReadonlyArray<string>, options?: SpawnSyncOptions): SpawnSyncReturns<Buffer>;
+
+    interface ExecSyncOptions extends CommonOptions {
+        input?: string | Uint8Array;
+        stdio?: StdioOptions;
+        shell?: string;
+        killSignal?: NodeJS.Signals | number;
+        maxBuffer?: number;
+        encoding?: string;
+    }
+    interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions {
+        encoding: BufferEncoding;
+    }
+    interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions {
+        encoding: string; // specify `null`.
+    }
+    function execSync(command: string): Buffer;
+    function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string;
+    function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer;
+    function execSync(command: string, options?: ExecSyncOptions): Buffer;
+
+    interface ExecFileSyncOptions extends CommonOptions {
+        input?: string | NodeJS.ArrayBufferView;
+        stdio?: StdioOptions;
+        killSignal?: NodeJS.Signals | number;
+        maxBuffer?: number;
+        encoding?: string;
+        shell?: boolean | string;
+    }
+    interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions {
+        encoding: BufferEncoding;
+    }
+    interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions {
+        encoding: string; // specify `null`.
+    }
+    function execFileSync(command: string): Buffer;
+    function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string;
+    function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
+    function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer;
+    function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptionsWithStringEncoding): string;
+    function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
+    function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptions): Buffer;
+}
diff --git a/setup-maven/node_modules/@types/node/cluster.d.ts b/setup-maven/node_modules/@types/node/cluster.d.ts
new file mode 100644
index 0000000..43340ff
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/cluster.d.ts
@@ -0,0 +1,260 @@
+declare module "cluster" {
+    import * as child from "child_process";
+    import * as events from "events";
+    import * as net from "net";
+
+    // interfaces
+    interface ClusterSettings {
+        execArgv?: string[]; // default: process.execArgv
+        exec?: string;
+        args?: string[];
+        silent?: boolean;
+        stdio?: any[];
+        uid?: number;
+        gid?: number;
+        inspectPort?: number | (() => number);
+    }
+
+    interface Address {
+        address: string;
+        port: number;
+        addressType: number | "udp4" | "udp6";  // 4, 6, -1, "udp4", "udp6"
+    }
+
+    class Worker extends events.EventEmitter {
+        id: number;
+        process: child.ChildProcess;
+        send(message: any, sendHandle?: any, callback?: (error: Error | null) => void): boolean;
+        kill(signal?: string): void;
+        destroy(signal?: string): void;
+        disconnect(): void;
+        isConnected(): boolean;
+        isDead(): boolean;
+        exitedAfterDisconnect: boolean;
+
+        /**
+         * events.EventEmitter
+         *   1. disconnect
+         *   2. error
+         *   3. exit
+         *   4. listening
+         *   5. message
+         *   6. online
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "disconnect", listener: () => void): this;
+        addListener(event: "error", listener: (error: Error) => void): this;
+        addListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        addListener(event: "listening", listener: (address: Address) => void): this;
+        addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        addListener(event: "online", listener: () => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "disconnect"): boolean;
+        emit(event: "error", error: Error): boolean;
+        emit(event: "exit", code: number, signal: string): boolean;
+        emit(event: "listening", address: Address): boolean;
+        emit(event: "message", message: any, handle: net.Socket | net.Server): boolean;
+        emit(event: "online"): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "disconnect", listener: () => void): this;
+        on(event: "error", listener: (error: Error) => void): this;
+        on(event: "exit", listener: (code: number, signal: string) => void): this;
+        on(event: "listening", listener: (address: Address) => void): this;
+        on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        on(event: "online", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "disconnect", listener: () => void): this;
+        once(event: "error", listener: (error: Error) => void): this;
+        once(event: "exit", listener: (code: number, signal: string) => void): this;
+        once(event: "listening", listener: (address: Address) => void): this;
+        once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        once(event: "online", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "disconnect", listener: () => void): this;
+        prependListener(event: "error", listener: (error: Error) => void): this;
+        prependListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        prependListener(event: "listening", listener: (address: Address) => void): this;
+        prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        prependListener(event: "online", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "disconnect", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (error: Error) => void): this;
+        prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        prependOnceListener(event: "listening", listener: (address: Address) => void): this;
+        prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        prependOnceListener(event: "online", listener: () => void): this;
+    }
+
+    interface Cluster extends events.EventEmitter {
+        Worker: Worker;
+        disconnect(callback?: () => void): void;
+        fork(env?: any): Worker;
+        isMaster: boolean;
+        isWorker: boolean;
+        // TODO: cluster.schedulingPolicy
+        settings: ClusterSettings;
+        setupMaster(settings?: ClusterSettings): void;
+        worker?: Worker;
+        workers?: {
+            [index: string]: Worker | undefined
+        };
+
+        /**
+         * events.EventEmitter
+         *   1. disconnect
+         *   2. exit
+         *   3. fork
+         *   4. listening
+         *   5. message
+         *   6. online
+         *   7. setup
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        addListener(event: "fork", listener: (worker: Worker) => void): this;
+        addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        addListener(event: "online", listener: (worker: Worker) => void): this;
+        addListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "disconnect", worker: Worker): boolean;
+        emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
+        emit(event: "fork", worker: Worker): boolean;
+        emit(event: "listening", worker: Worker, address: Address): boolean;
+        emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
+        emit(event: "online", worker: Worker): boolean;
+        emit(event: "setup", settings: ClusterSettings): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "disconnect", listener: (worker: Worker) => void): this;
+        on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        on(event: "fork", listener: (worker: Worker) => void): this;
+        on(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        on(event: "online", listener: (worker: Worker) => void): this;
+        on(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "disconnect", listener: (worker: Worker) => void): this;
+        once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        once(event: "fork", listener: (worker: Worker) => void): this;
+        once(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        once(event: "online", listener: (worker: Worker) => void): this;
+        once(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        prependListener(event: "fork", listener: (worker: Worker) => void): this;
+        prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;  // the handle is a net.Socket or net.Server object, or undefined.
+        prependListener(event: "online", listener: (worker: Worker) => void): this;
+        prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        prependOnceListener(event: "fork", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        // the handle is a net.Socket or net.Server object, or undefined.
+        prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;
+        prependOnceListener(event: "online", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+    }
+
+    function disconnect(callback?: () => void): void;
+    function fork(env?: any): Worker;
+    const isMaster: boolean;
+    const isWorker: boolean;
+    // TODO: cluster.schedulingPolicy
+    const settings: ClusterSettings;
+    function setupMaster(settings?: ClusterSettings): void;
+    const worker: Worker;
+    const workers: {
+        [index: string]: Worker | undefined
+    };
+
+    /**
+     * events.EventEmitter
+     *   1. disconnect
+     *   2. exit
+     *   3. fork
+     *   4. listening
+     *   5. message
+     *   6. online
+     *   7. setup
+     */
+    function addListener(event: string, listener: (...args: any[]) => void): Cluster;
+    function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    function addListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+    function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+     // the handle is a net.Socket or net.Server object, or undefined.
+    function addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
+    function addListener(event: "online", listener: (worker: Worker) => void): Cluster;
+    function addListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+    function emit(event: string | symbol, ...args: any[]): boolean;
+    function emit(event: "disconnect", worker: Worker): boolean;
+    function emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
+    function emit(event: "fork", worker: Worker): boolean;
+    function emit(event: "listening", worker: Worker, address: Address): boolean;
+    function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
+    function emit(event: "online", worker: Worker): boolean;
+    function emit(event: "setup", settings: ClusterSettings): boolean;
+
+    function on(event: string, listener: (...args: any[]) => void): Cluster;
+    function on(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    function on(event: "fork", listener: (worker: Worker) => void): Cluster;
+    function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+    function on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;  // the handle is a net.Socket or net.Server object, or undefined.
+    function on(event: "online", listener: (worker: Worker) => void): Cluster;
+    function on(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+    function once(event: string, listener: (...args: any[]) => void): Cluster;
+    function once(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    function once(event: "fork", listener: (worker: Worker) => void): Cluster;
+    function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+    function once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;  // the handle is a net.Socket or net.Server object, or undefined.
+    function once(event: "online", listener: (worker: Worker) => void): Cluster;
+    function once(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+    function removeListener(event: string, listener: (...args: any[]) => void): Cluster;
+    function removeAllListeners(event?: string): Cluster;
+    function setMaxListeners(n: number): Cluster;
+    function getMaxListeners(): number;
+    function listeners(event: string): Function[];
+    function listenerCount(type: string): number;
+
+    function prependListener(event: string, listener: (...args: any[]) => void): Cluster;
+    function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+    function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+     // the handle is a net.Socket or net.Server object, or undefined.
+    function prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
+    function prependListener(event: "online", listener: (worker: Worker) => void): Cluster;
+    function prependListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+    function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster;
+    function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+    function prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+    function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+    function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+     // the handle is a net.Socket or net.Server object, or undefined.
+    function prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
+    function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster;
+    function prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+    function eventNames(): string[];
+}
diff --git a/setup-maven/node_modules/@types/node/console.d.ts b/setup-maven/node_modules/@types/node/console.d.ts
new file mode 100644
index 0000000..d30d13f
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/console.d.ts
@@ -0,0 +1,3 @@
+declare module "console" {
+    export = console;
+}
diff --git a/setup-maven/node_modules/@types/node/constants.d.ts b/setup-maven/node_modules/@types/node/constants.d.ts
new file mode 100644
index 0000000..ebd463b
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/constants.d.ts
@@ -0,0 +1,448 @@
+/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */
+declare module "constants" {
+    /** @deprecated since v6.3.0 - use `os.constants.errno.E2BIG` instead. */
+    const E2BIG: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EACCES` instead. */
+    const EACCES: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EADDRINUSE` instead. */
+    const EADDRINUSE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EADDRNOTAVAIL` instead. */
+    const EADDRNOTAVAIL: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EAFNOSUPPORT` instead. */
+    const EAFNOSUPPORT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EAGAIN` instead. */
+    const EAGAIN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EALREADY` instead. */
+    const EALREADY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EBADF` instead. */
+    const EBADF: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EBADMSG` instead. */
+    const EBADMSG: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EBUSY` instead. */
+    const EBUSY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ECANCELED` instead. */
+    const ECANCELED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ECHILD` instead. */
+    const ECHILD: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ECONNABORTED` instead. */
+    const ECONNABORTED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ECONNREFUSED` instead. */
+    const ECONNREFUSED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ECONNRESET` instead. */
+    const ECONNRESET: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EDEADLK` instead. */
+    const EDEADLK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EDESTADDRREQ` instead. */
+    const EDESTADDRREQ: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EDOM` instead. */
+    const EDOM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EEXIST` instead. */
+    const EEXIST: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EFAULT` instead. */
+    const EFAULT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EFBIG` instead. */
+    const EFBIG: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EHOSTUNREACH` instead. */
+    const EHOSTUNREACH: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EIDRM` instead. */
+    const EIDRM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EILSEQ` instead. */
+    const EILSEQ: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EINPROGRESS` instead. */
+    const EINPROGRESS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EINTR` instead. */
+    const EINTR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EINVAL` instead. */
+    const EINVAL: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EIO` instead. */
+    const EIO: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EISCONN` instead. */
+    const EISCONN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EISDIR` instead. */
+    const EISDIR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ELOOP` instead. */
+    const ELOOP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EMFILE` instead. */
+    const EMFILE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EMLINK` instead. */
+    const EMLINK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EMSGSIZE` instead. */
+    const EMSGSIZE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENAMETOOLONG` instead. */
+    const ENAMETOOLONG: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENETDOWN` instead. */
+    const ENETDOWN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENETRESET` instead. */
+    const ENETRESET: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENETUNREACH` instead. */
+    const ENETUNREACH: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENFILE` instead. */
+    const ENFILE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOBUFS` instead. */
+    const ENOBUFS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENODATA` instead. */
+    const ENODATA: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENODEV` instead. */
+    const ENODEV: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOENT` instead. */
+    const ENOENT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOEXEC` instead. */
+    const ENOEXEC: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOLCK` instead. */
+    const ENOLCK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOLINK` instead. */
+    const ENOLINK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOMEM` instead. */
+    const ENOMEM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOMSG` instead. */
+    const ENOMSG: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOPROTOOPT` instead. */
+    const ENOPROTOOPT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOSPC` instead. */
+    const ENOSPC: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOSR` instead. */
+    const ENOSR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOSTR` instead. */
+    const ENOSTR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOSYS` instead. */
+    const ENOSYS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOTCONN` instead. */
+    const ENOTCONN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOTDIR` instead. */
+    const ENOTDIR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOTEMPTY` instead. */
+    const ENOTEMPTY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOTSOCK` instead. */
+    const ENOTSOCK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOTSUP` instead. */
+    const ENOTSUP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENOTTY` instead. */
+    const ENOTTY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ENXIO` instead. */
+    const ENXIO: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EOPNOTSUPP` instead. */
+    const EOPNOTSUPP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EOVERFLOW` instead. */
+    const EOVERFLOW: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EPERM` instead. */
+    const EPERM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EPIPE` instead. */
+    const EPIPE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EPROTO` instead. */
+    const EPROTO: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EPROTONOSUPPORT` instead. */
+    const EPROTONOSUPPORT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EPROTOTYPE` instead. */
+    const EPROTOTYPE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ERANGE` instead. */
+    const ERANGE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EROFS` instead. */
+    const EROFS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ESPIPE` instead. */
+    const ESPIPE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ESRCH` instead. */
+    const ESRCH: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ETIME` instead. */
+    const ETIME: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ETIMEDOUT` instead. */
+    const ETIMEDOUT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.ETXTBSY` instead. */
+    const ETXTBSY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EWOULDBLOCK` instead. */
+    const EWOULDBLOCK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.EXDEV` instead. */
+    const EXDEV: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINTR` instead. */
+    const WSAEINTR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEBADF` instead. */
+    const WSAEBADF: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEACCES` instead. */
+    const WSAEACCES: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEFAULT` instead. */
+    const WSAEFAULT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINVAL` instead. */
+    const WSAEINVAL: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEMFILE` instead. */
+    const WSAEMFILE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEWOULDBLOCK` instead. */
+    const WSAEWOULDBLOCK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINPROGRESS` instead. */
+    const WSAEINPROGRESS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEALREADY` instead. */
+    const WSAEALREADY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOTSOCK` instead. */
+    const WSAENOTSOCK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEDESTADDRREQ` instead. */
+    const WSAEDESTADDRREQ: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEMSGSIZE` instead. */
+    const WSAEMSGSIZE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROTOTYPE` instead. */
+    const WSAEPROTOTYPE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOPROTOOPT` instead. */
+    const WSAENOPROTOOPT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROTONOSUPPORT` instead. */
+    const WSAEPROTONOSUPPORT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAESOCKTNOSUPPORT` instead. */
+    const WSAESOCKTNOSUPPORT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEOPNOTSUPP` instead. */
+    const WSAEOPNOTSUPP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPFNOSUPPORT` instead. */
+    const WSAEPFNOSUPPORT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEAFNOSUPPORT` instead. */
+    const WSAEAFNOSUPPORT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEADDRINUSE` instead. */
+    const WSAEADDRINUSE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEADDRNOTAVAIL` instead. */
+    const WSAEADDRNOTAVAIL: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENETDOWN` instead. */
+    const WSAENETDOWN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENETUNREACH` instead. */
+    const WSAENETUNREACH: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENETRESET` instead. */
+    const WSAENETRESET: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAECONNABORTED` instead. */
+    const WSAECONNABORTED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAECONNRESET` instead. */
+    const WSAECONNRESET: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOBUFS` instead. */
+    const WSAENOBUFS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEISCONN` instead. */
+    const WSAEISCONN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOTCONN` instead. */
+    const WSAENOTCONN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAESHUTDOWN` instead. */
+    const WSAESHUTDOWN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAETOOMANYREFS` instead. */
+    const WSAETOOMANYREFS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAETIMEDOUT` instead. */
+    const WSAETIMEDOUT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAECONNREFUSED` instead. */
+    const WSAECONNREFUSED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAELOOP` instead. */
+    const WSAELOOP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENAMETOOLONG` instead. */
+    const WSAENAMETOOLONG: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEHOSTDOWN` instead. */
+    const WSAEHOSTDOWN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEHOSTUNREACH` instead. */
+    const WSAEHOSTUNREACH: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOTEMPTY` instead. */
+    const WSAENOTEMPTY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROCLIM` instead. */
+    const WSAEPROCLIM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEUSERS` instead. */
+    const WSAEUSERS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEDQUOT` instead. */
+    const WSAEDQUOT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAESTALE` instead. */
+    const WSAESTALE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEREMOTE` instead. */
+    const WSAEREMOTE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSASYSNOTREADY` instead. */
+    const WSASYSNOTREADY: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAVERNOTSUPPORTED` instead. */
+    const WSAVERNOTSUPPORTED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSANOTINITIALISED` instead. */
+    const WSANOTINITIALISED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEDISCON` instead. */
+    const WSAEDISCON: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOMORE` instead. */
+    const WSAENOMORE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAECANCELLED` instead. */
+    const WSAECANCELLED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINVALIDPROCTABLE` instead. */
+    const WSAEINVALIDPROCTABLE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINVALIDPROVIDER` instead. */
+    const WSAEINVALIDPROVIDER: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROVIDERFAILEDINIT` instead. */
+    const WSAEPROVIDERFAILEDINIT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSASYSCALLFAILURE` instead. */
+    const WSASYSCALLFAILURE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSASERVICE_NOT_FOUND` instead. */
+    const WSASERVICE_NOT_FOUND: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSATYPE_NOT_FOUND` instead. */
+    const WSATYPE_NOT_FOUND: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSA_E_NO_MORE` instead. */
+    const WSA_E_NO_MORE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSA_E_CANCELLED` instead. */
+    const WSA_E_CANCELLED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.errno.WSAEREFUSED` instead. */
+    const WSAEREFUSED: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGHUP` instead. */
+    const SIGHUP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGINT` instead. */
+    const SIGINT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGILL` instead. */
+    const SIGILL: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGABRT` instead. */
+    const SIGABRT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGFPE` instead. */
+    const SIGFPE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGKILL` instead. */
+    const SIGKILL: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGSEGV` instead. */
+    const SIGSEGV: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGTERM` instead. */
+    const SIGTERM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGBREAK` instead. */
+    const SIGBREAK: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGWINCH` instead. */
+    const SIGWINCH: number;
+    const SSL_OP_ALL: number;
+    const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
+    const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
+    const SSL_OP_CISCO_ANYCONNECT: number;
+    const SSL_OP_COOKIE_EXCHANGE: number;
+    const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
+    const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
+    const SSL_OP_EPHEMERAL_RSA: number;
+    const SSL_OP_LEGACY_SERVER_CONNECT: number;
+    const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
+    const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
+    const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
+    const SSL_OP_NETSCAPE_CA_DN_BUG: number;
+    const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
+    const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
+    const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
+    const SSL_OP_NO_COMPRESSION: number;
+    const SSL_OP_NO_QUERY_MTU: number;
+    const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
+    const SSL_OP_NO_SSLv2: number;
+    const SSL_OP_NO_SSLv3: number;
+    const SSL_OP_NO_TICKET: number;
+    const SSL_OP_NO_TLSv1: number;
+    const SSL_OP_NO_TLSv1_1: number;
+    const SSL_OP_NO_TLSv1_2: number;
+    const SSL_OP_PKCS1_CHECK_1: number;
+    const SSL_OP_PKCS1_CHECK_2: number;
+    const SSL_OP_SINGLE_DH_USE: number;
+    const SSL_OP_SINGLE_ECDH_USE: number;
+    const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
+    const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
+    const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
+    const SSL_OP_TLS_D5_BUG: number;
+    const SSL_OP_TLS_ROLLBACK_BUG: number;
+    const ENGINE_METHOD_DSA: number;
+    const ENGINE_METHOD_DH: number;
+    const ENGINE_METHOD_RAND: number;
+    const ENGINE_METHOD_ECDH: number;
+    const ENGINE_METHOD_ECDSA: number;
+    const ENGINE_METHOD_CIPHERS: number;
+    const ENGINE_METHOD_DIGESTS: number;
+    const ENGINE_METHOD_STORE: number;
+    const ENGINE_METHOD_PKEY_METHS: number;
+    const ENGINE_METHOD_PKEY_ASN1_METHS: number;
+    const ENGINE_METHOD_ALL: number;
+    const ENGINE_METHOD_NONE: number;
+    const DH_CHECK_P_NOT_SAFE_PRIME: number;
+    const DH_CHECK_P_NOT_PRIME: number;
+    const DH_UNABLE_TO_CHECK_GENERATOR: number;
+    const DH_NOT_SUITABLE_GENERATOR: number;
+    const RSA_PKCS1_PADDING: number;
+    const RSA_SSLV23_PADDING: number;
+    const RSA_NO_PADDING: number;
+    const RSA_PKCS1_OAEP_PADDING: number;
+    const RSA_X931_PADDING: number;
+    const RSA_PKCS1_PSS_PADDING: number;
+    const POINT_CONVERSION_COMPRESSED: number;
+    const POINT_CONVERSION_UNCOMPRESSED: number;
+    const POINT_CONVERSION_HYBRID: number;
+    const O_RDONLY: number;
+    const O_WRONLY: number;
+    const O_RDWR: number;
+    const S_IFMT: number;
+    const S_IFREG: number;
+    const S_IFDIR: number;
+    const S_IFCHR: number;
+    const S_IFBLK: number;
+    const S_IFIFO: number;
+    const S_IFSOCK: number;
+    const S_IRWXU: number;
+    const S_IRUSR: number;
+    const S_IWUSR: number;
+    const S_IXUSR: number;
+    const S_IRWXG: number;
+    const S_IRGRP: number;
+    const S_IWGRP: number;
+    const S_IXGRP: number;
+    const S_IRWXO: number;
+    const S_IROTH: number;
+    const S_IWOTH: number;
+    const S_IXOTH: number;
+    const S_IFLNK: number;
+    const O_CREAT: number;
+    const O_EXCL: number;
+    const O_NOCTTY: number;
+    const O_DIRECTORY: number;
+    const O_NOATIME: number;
+    const O_NOFOLLOW: number;
+    const O_SYNC: number;
+    const O_DSYNC: number;
+    const O_SYMLINK: number;
+    const O_DIRECT: number;
+    const O_NONBLOCK: number;
+    const O_TRUNC: number;
+    const O_APPEND: number;
+    const F_OK: number;
+    const R_OK: number;
+    const W_OK: number;
+    const X_OK: number;
+    const COPYFILE_EXCL: number;
+    const COPYFILE_FICLONE: number;
+    const COPYFILE_FICLONE_FORCE: number;
+    const UV_UDP_REUSEADDR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGQUIT` instead. */
+    const SIGQUIT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGTRAP` instead. */
+    const SIGTRAP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGIOT` instead. */
+    const SIGIOT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGBUS` instead. */
+    const SIGBUS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGUSR1` instead. */
+    const SIGUSR1: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGUSR2` instead. */
+    const SIGUSR2: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGPIPE` instead. */
+    const SIGPIPE: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGALRM` instead. */
+    const SIGALRM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGCHLD` instead. */
+    const SIGCHLD: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGSTKFLT` instead. */
+    const SIGSTKFLT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGCONT` instead. */
+    const SIGCONT: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGSTOP` instead. */
+    const SIGSTOP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGTSTP` instead. */
+    const SIGTSTP: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGTTIN` instead. */
+    const SIGTTIN: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGTTOU` instead. */
+    const SIGTTOU: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGURG` instead. */
+    const SIGURG: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGXCPU` instead. */
+    const SIGXCPU: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGXFSZ` instead. */
+    const SIGXFSZ: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGVTALRM` instead. */
+    const SIGVTALRM: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGPROF` instead. */
+    const SIGPROF: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGIO` instead. */
+    const SIGIO: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGPOLL` instead. */
+    const SIGPOLL: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGPWR` instead. */
+    const SIGPWR: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGSYS` instead. */
+    const SIGSYS: number;
+    /** @deprecated since v6.3.0 - use `os.constants.signals.SIGUNUSED` instead. */
+    const SIGUNUSED: number;
+    const defaultCoreCipherList: string;
+    const defaultCipherList: string;
+    const ENGINE_METHOD_RSA: number;
+    const ALPN_ENABLED: number;
+}
diff --git a/setup-maven/node_modules/@types/node/crypto.d.ts b/setup-maven/node_modules/@types/node/crypto.d.ts
new file mode 100644
index 0000000..b7ecb7f
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/crypto.d.ts
@@ -0,0 +1,614 @@
+declare module "crypto" {
+    import * as stream from "stream";
+
+    interface Certificate {
+        exportChallenge(spkac: BinaryLike): Buffer;
+        exportPublicKey(spkac: BinaryLike): Buffer;
+        verifySpkac(spkac: NodeJS.ArrayBufferView): boolean;
+    }
+    const Certificate: {
+        new(): Certificate;
+        (): Certificate;
+    };
+
+    namespace constants { // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants
+        const OPENSSL_VERSION_NUMBER: number;
+
+        /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */
+        const SSL_OP_ALL: number;
+        /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+        const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
+        /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+        const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
+        /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */
+        const SSL_OP_CISCO_ANYCONNECT: number;
+        /** Instructs OpenSSL to turn on cookie exchange. */
+        const SSL_OP_COOKIE_EXCHANGE: number;
+        /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */
+        const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
+        /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */
+        const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
+        /** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */
+        const SSL_OP_EPHEMERAL_RSA: number;
+        /** Allows initial connection to servers that do not support RI. */
+        const SSL_OP_LEGACY_SERVER_CONNECT: number;
+        const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
+        const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
+        /** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */
+        const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
+        const SSL_OP_NETSCAPE_CA_DN_BUG: number;
+        const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
+        const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
+        const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
+        /** Instructs OpenSSL to disable support for SSL/TLS compression. */
+        const SSL_OP_NO_COMPRESSION: number;
+        const SSL_OP_NO_QUERY_MTU: number;
+        /** Instructs OpenSSL to always start a new session when performing renegotiation. */
+        const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
+        const SSL_OP_NO_SSLv2: number;
+        const SSL_OP_NO_SSLv3: number;
+        const SSL_OP_NO_TICKET: number;
+        const SSL_OP_NO_TLSv1: number;
+        const SSL_OP_NO_TLSv1_1: number;
+        const SSL_OP_NO_TLSv1_2: number;
+        const SSL_OP_PKCS1_CHECK_1: number;
+        const SSL_OP_PKCS1_CHECK_2: number;
+        /** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */
+        const SSL_OP_SINGLE_DH_USE: number;
+        /** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */
+        const SSL_OP_SINGLE_ECDH_USE: number;
+        const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
+        const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
+        const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
+        const SSL_OP_TLS_D5_BUG: number;
+        /** Instructs OpenSSL to disable version rollback attack detection. */
+        const SSL_OP_TLS_ROLLBACK_BUG: number;
+
+        const ENGINE_METHOD_RSA: number;
+        const ENGINE_METHOD_DSA: number;
+        const ENGINE_METHOD_DH: number;
+        const ENGINE_METHOD_RAND: number;
+        const ENGINE_METHOD_EC: number;
+        const ENGINE_METHOD_CIPHERS: number;
+        const ENGINE_METHOD_DIGESTS: number;
+        const ENGINE_METHOD_PKEY_METHS: number;
+        const ENGINE_METHOD_PKEY_ASN1_METHS: number;
+        const ENGINE_METHOD_ALL: number;
+        const ENGINE_METHOD_NONE: number;
+
+        const DH_CHECK_P_NOT_SAFE_PRIME: number;
+        const DH_CHECK_P_NOT_PRIME: number;
+        const DH_UNABLE_TO_CHECK_GENERATOR: number;
+        const DH_NOT_SUITABLE_GENERATOR: number;
+
+        const ALPN_ENABLED: number;
+
+        const RSA_PKCS1_PADDING: number;
+        const RSA_SSLV23_PADDING: number;
+        const RSA_NO_PADDING: number;
+        const RSA_PKCS1_OAEP_PADDING: number;
+        const RSA_X931_PADDING: number;
+        const RSA_PKCS1_PSS_PADDING: number;
+        /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */
+        const RSA_PSS_SALTLEN_DIGEST: number;
+        /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */
+        const RSA_PSS_SALTLEN_MAX_SIGN: number;
+        /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */
+        const RSA_PSS_SALTLEN_AUTO: number;
+
+        const POINT_CONVERSION_COMPRESSED: number;
+        const POINT_CONVERSION_UNCOMPRESSED: number;
+        const POINT_CONVERSION_HYBRID: number;
+
+        /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */
+        const defaultCoreCipherList: string;
+        /** Specifies the active default cipher list used by the current Node.js process  (colon-separated values). */
+        const defaultCipherList: string;
+    }
+
+    interface HashOptions extends stream.TransformOptions {
+        /**
+         * For XOF hash functions such as `shake256`, the
+         * outputLength option can be used to specify the desired output length in bytes.
+         */
+        outputLength?: number;
+    }
+
+    /** @deprecated since v10.0.0 */
+    const fips: boolean;
+
+    function createHash(algorithm: string, options?: HashOptions): Hash;
+    function createHmac(algorithm: string, key: BinaryLike, options?: stream.TransformOptions): Hmac;
+
+    type Utf8AsciiLatin1Encoding = "utf8" | "ascii" | "latin1";
+    type HexBase64Latin1Encoding = "latin1" | "hex" | "base64";
+    type Utf8AsciiBinaryEncoding = "utf8" | "ascii" | "binary";
+    type HexBase64BinaryEncoding = "binary" | "base64" | "hex";
+    type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid";
+
+    class Hash extends stream.Transform {
+        private constructor();
+        update(data: BinaryLike): Hash;
+        update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hash;
+        digest(): Buffer;
+        digest(encoding: HexBase64Latin1Encoding): string;
+    }
+    class Hmac extends stream.Transform {
+        private constructor();
+        update(data: BinaryLike): Hmac;
+        update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hmac;
+        digest(): Buffer;
+        digest(encoding: HexBase64Latin1Encoding): string;
+    }
+
+    type KeyObjectType = 'secret' | 'public' | 'private';
+
+    interface KeyExportOptions<T extends KeyFormat> {
+        type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1';
+        format: T;
+        cipher?: string;
+        passphrase?: string | Buffer;
+    }
+
+    class KeyObject {
+        private constructor();
+        asymmetricKeyType?: KeyType;
+        /**
+         * For asymmetric keys, this property represents the size of the embedded key in
+         * bytes. This property is `undefined` for symmetric keys.
+         */
+        asymmetricKeySize?: number;
+        export(options: KeyExportOptions<'pem'>): string | Buffer;
+        export(options?: KeyExportOptions<'der'>): Buffer;
+        symmetricSize?: number;
+        type: KeyObjectType;
+    }
+
+    type CipherCCMTypes = 'aes-128-ccm' | 'aes-192-ccm' | 'aes-256-ccm';
+    type CipherGCMTypes = 'aes-128-gcm' | 'aes-192-gcm' | 'aes-256-gcm';
+
+    type BinaryLike = string | NodeJS.ArrayBufferView;
+
+    type CipherKey = BinaryLike | KeyObject;
+
+    interface CipherCCMOptions extends stream.TransformOptions {
+        authTagLength: number;
+    }
+    interface CipherGCMOptions extends stream.TransformOptions {
+        authTagLength?: number;
+    }
+    /** @deprecated since v10.0.0 use createCipheriv() */
+    function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM;
+    /** @deprecated since v10.0.0 use createCipheriv() */
+    function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM;
+    /** @deprecated since v10.0.0 use createCipheriv() */
+    function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher;
+
+    function createCipheriv(
+        algorithm: CipherCCMTypes,
+        key: CipherKey,
+        iv: BinaryLike | null,
+        options: CipherCCMOptions
+    ): CipherCCM;
+    function createCipheriv(
+        algorithm: CipherGCMTypes,
+        key: CipherKey,
+        iv: BinaryLike | null,
+        options?: CipherGCMOptions
+    ): CipherGCM;
+    function createCipheriv(
+        algorithm: string, key: CipherKey, iv: BinaryLike | null, options?: stream.TransformOptions
+    ): Cipher;
+
+    class Cipher extends stream.Transform {
+        private constructor();
+        update(data: BinaryLike): Buffer;
+        update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer;
+        update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: HexBase64BinaryEncoding): string;
+        update(data: string, input_encoding: Utf8AsciiBinaryEncoding | undefined, output_encoding: HexBase64BinaryEncoding): string;
+        final(): Buffer;
+        final(output_encoding: string): string;
+        setAutoPadding(auto_padding?: boolean): this;
+        // getAuthTag(): Buffer;
+        // setAAD(buffer: Buffer): this; // docs only say buffer
+    }
+    interface CipherCCM extends Cipher {
+        setAAD(buffer: Buffer, options: { plaintextLength: number }): this;
+        getAuthTag(): Buffer;
+    }
+    interface CipherGCM extends Cipher {
+        setAAD(buffer: Buffer, options?: { plaintextLength: number }): this;
+        getAuthTag(): Buffer;
+    }
+    /** @deprecated since v10.0.0 use createDecipheriv() */
+    function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM;
+    /** @deprecated since v10.0.0 use createDecipheriv() */
+    function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM;
+    /** @deprecated since v10.0.0 use createDecipheriv() */
+    function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher;
+
+    function createDecipheriv(
+        algorithm: CipherCCMTypes,
+        key: BinaryLike,
+        iv: BinaryLike | null,
+        options: CipherCCMOptions,
+    ): DecipherCCM;
+    function createDecipheriv(
+        algorithm: CipherGCMTypes,
+        key: BinaryLike,
+        iv: BinaryLike | null,
+        options?: CipherGCMOptions,
+    ): DecipherGCM;
+    function createDecipheriv(algorithm: string, key: BinaryLike, iv: BinaryLike | null, options?: stream.TransformOptions): Decipher;
+
+    class Decipher extends stream.Transform {
+        private constructor();
+        update(data: NodeJS.ArrayBufferView): Buffer;
+        update(data: string, input_encoding: HexBase64BinaryEncoding): Buffer;
+        update(data: NodeJS.ArrayBufferView, input_encoding: HexBase64BinaryEncoding | undefined, output_encoding: Utf8AsciiBinaryEncoding): string;
+        update(data: string, input_encoding: HexBase64BinaryEncoding | undefined, output_encoding: Utf8AsciiBinaryEncoding): string;
+        final(): Buffer;
+        final(output_encoding: string): string;
+        setAutoPadding(auto_padding?: boolean): this;
+        // setAuthTag(tag: NodeJS.ArrayBufferView): this;
+        // setAAD(buffer: NodeJS.ArrayBufferView): this;
+    }
+    interface DecipherCCM extends Decipher {
+        setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+        setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this;
+    }
+    interface DecipherGCM extends Decipher {
+        setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+        setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this;
+    }
+
+    interface PrivateKeyInput {
+        key: string | Buffer;
+        format?: KeyFormat;
+        type?: 'pkcs1' | 'pkcs8' | 'sec1';
+        passphrase?: string | Buffer;
+    }
+
+    interface PublicKeyInput {
+        key: string | Buffer;
+        format?: KeyFormat;
+        type?: 'pkcs1' | 'spki';
+    }
+
+    function createPrivateKey(key: PrivateKeyInput | string | Buffer): KeyObject;
+    function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject): KeyObject;
+    function createSecretKey(key: Buffer): KeyObject;
+
+    function createSign(algorithm: string, options?: stream.WritableOptions): Signer;
+
+    interface SigningOptions {
+        /**
+         * @See crypto.constants.RSA_PKCS1_PADDING
+         */
+        padding?: number;
+        saltLength?: number;
+    }
+
+    interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {
+    }
+
+    type KeyLike = string | Buffer | KeyObject;
+
+    class Signer extends stream.Writable {
+        private constructor();
+
+        update(data: BinaryLike): Signer;
+        update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Signer;
+        sign(private_key: SignPrivateKeyInput | KeyLike): Buffer;
+        sign(private_key: SignPrivateKeyInput | KeyLike, output_format: HexBase64Latin1Encoding): string;
+    }
+
+    function createVerify(algorithm: string, options?: stream.WritableOptions): Verify;
+    class Verify extends stream.Writable {
+        private constructor();
+
+        update(data: BinaryLike): Verify;
+        update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Verify;
+        verify(object: Object | KeyLike, signature: NodeJS.ArrayBufferView): boolean;
+        verify(object: Object | KeyLike, signature: string, signature_format?: HexBase64Latin1Encoding): boolean;
+        // https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format
+        // The signature field accepts a TypedArray type, but it is only available starting ES2017
+    }
+    function createDiffieHellman(prime_length: number, generator?: number | NodeJS.ArrayBufferView): DiffieHellman;
+    function createDiffieHellman(prime: NodeJS.ArrayBufferView): DiffieHellman;
+    function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding): DiffieHellman;
+    function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: number | NodeJS.ArrayBufferView): DiffieHellman;
+    function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: string, generator_encoding: HexBase64Latin1Encoding): DiffieHellman;
+    class DiffieHellman {
+        private constructor();
+        generateKeys(): Buffer;
+        generateKeys(encoding: HexBase64Latin1Encoding): string;
+        computeSecret(other_public_key: NodeJS.ArrayBufferView): Buffer;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
+        computeSecret(other_public_key: NodeJS.ArrayBufferView, output_encoding: HexBase64Latin1Encoding): string;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
+        getPrime(): Buffer;
+        getPrime(encoding: HexBase64Latin1Encoding): string;
+        getGenerator(): Buffer;
+        getGenerator(encoding: HexBase64Latin1Encoding): string;
+        getPublicKey(): Buffer;
+        getPublicKey(encoding: HexBase64Latin1Encoding): string;
+        getPrivateKey(): Buffer;
+        getPrivateKey(encoding: HexBase64Latin1Encoding): string;
+        setPublicKey(public_key: NodeJS.ArrayBufferView): void;
+        setPublicKey(public_key: string, encoding: string): void;
+        setPrivateKey(private_key: NodeJS.ArrayBufferView): void;
+        setPrivateKey(private_key: string, encoding: string): void;
+        verifyError: number;
+    }
+    function getDiffieHellman(group_name: string): DiffieHellman;
+    function pbkdf2(
+        password: BinaryLike,
+        salt: BinaryLike,
+        iterations: number,
+        keylen: number,
+        digest: string,
+        callback: (err: Error | null, derivedKey: Buffer) => any,
+    ): void;
+    function pbkdf2Sync(password: BinaryLike, salt: BinaryLike, iterations: number, keylen: number, digest: string): Buffer;
+
+    function randomBytes(size: number): Buffer;
+    function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
+    function pseudoRandomBytes(size: number): Buffer;
+    function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
+
+    function randomFillSync<T extends NodeJS.ArrayBufferView>(buffer: T, offset?: number, size?: number): T;
+    function randomFill<T extends NodeJS.ArrayBufferView>(buffer: T, callback: (err: Error | null, buf: T) => void): void;
+    function randomFill<T extends NodeJS.ArrayBufferView>(buffer: T, offset: number, callback: (err: Error | null, buf: T) => void): void;
+    function randomFill<T extends NodeJS.ArrayBufferView>(buffer: T, offset: number, size: number, callback: (err: Error | null, buf: T) => void): void;
+
+    interface ScryptOptions {
+        N?: number;
+        r?: number;
+        p?: number;
+        maxmem?: number;
+    }
+    function scrypt(
+        password: BinaryLike,
+        salt: BinaryLike,
+        keylen: number, callback: (err: Error | null, derivedKey: Buffer) => void,
+    ): void;
+    function scrypt(
+        password: BinaryLike,
+        salt: BinaryLike,
+        keylen: number,
+        options: ScryptOptions,
+        callback: (err: Error | null, derivedKey: Buffer) => void,
+    ): void;
+    function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer;
+
+    interface RsaPublicKey {
+        key: KeyLike;
+        padding?: number;
+    }
+    interface RsaPrivateKey {
+        key: KeyLike;
+        passphrase?: string;
+        /**
+         * @default 'sha1'
+         */
+        oaepHash?: string;
+        oaepLabel?: NodeJS.TypedArray;
+        padding?: number;
+    }
+    function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+    function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+    function privateDecrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+    function privateEncrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+    function getCiphers(): string[];
+    function getCurves(): string[];
+    function getHashes(): string[];
+    class ECDH {
+        private constructor();
+        static convertKey(
+            key: BinaryLike,
+            curve: string,
+            inputEncoding?: HexBase64Latin1Encoding,
+            outputEncoding?: "latin1" | "hex" | "base64",
+            format?: "uncompressed" | "compressed" | "hybrid",
+        ): Buffer | string;
+        generateKeys(): Buffer;
+        generateKeys(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string;
+        computeSecret(other_public_key: NodeJS.ArrayBufferView): Buffer;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
+        computeSecret(other_public_key: NodeJS.ArrayBufferView, output_encoding: HexBase64Latin1Encoding): string;
+        computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
+        getPrivateKey(): Buffer;
+        getPrivateKey(encoding: HexBase64Latin1Encoding): string;
+        getPublicKey(): Buffer;
+        getPublicKey(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string;
+        setPrivateKey(private_key: NodeJS.ArrayBufferView): void;
+        setPrivateKey(private_key: string, encoding: HexBase64Latin1Encoding): void;
+    }
+    function createECDH(curve_name: string): ECDH;
+    function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean;
+    /** @deprecated since v10.0.0 */
+    const DEFAULT_ENCODING: string;
+
+    type KeyType = 'rsa' | 'dsa' | 'ec';
+    type KeyFormat = 'pem' | 'der';
+
+    interface BasePrivateKeyEncodingOptions<T extends KeyFormat> {
+        format: T;
+        cipher?: string;
+        passphrase?: string;
+    }
+
+    interface KeyPairKeyObjectResult {
+        publicKey: KeyObject;
+        privateKey: KeyObject;
+    }
+
+    interface ECKeyPairKeyObjectOptions {
+        /**
+         * Name of the curve to use.
+         */
+        namedCurve: string;
+    }
+
+    interface RSAKeyPairKeyObjectOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+
+        /**
+         * @default 0x10001
+         */
+        publicExponent?: number;
+    }
+
+    interface DSAKeyPairKeyObjectOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+
+        /**
+         * Size of q in bits
+         */
+        divisorLength: number;
+    }
+
+    interface RSAKeyPairOptions<PubF extends KeyFormat, PrivF extends KeyFormat> {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * @default 0x10001
+         */
+        publicExponent?: number;
+
+        publicKeyEncoding: {
+            type: 'pkcs1' | 'spki';
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions<PrivF> & {
+            type: 'pkcs1' | 'pkcs8';
+        };
+    }
+
+    interface DSAKeyPairOptions<PubF extends KeyFormat, PrivF extends KeyFormat> {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * Size of q in bits
+         */
+        divisorLength: number;
+
+        publicKeyEncoding: {
+            type: 'spki';
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions<PrivF> & {
+            type: 'pkcs8';
+        };
+    }
+
+    interface ECKeyPairOptions<PubF extends KeyFormat, PrivF extends KeyFormat> {
+        /**
+         * Name of the curve to use.
+         */
+        namedCurve: string;
+
+        publicKeyEncoding: {
+            type: 'pkcs1' | 'spki';
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions<PrivF> & {
+            type: 'sec1' | 'pkcs8';
+        };
+    }
+
+    interface KeyPairSyncResult<T1 extends string | Buffer, T2 extends string | Buffer> {
+        publicKey: T1;
+        privateKey: T2;
+    }
+
+    function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult<string, string>;
+    function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult<string, Buffer>;
+    function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult<Buffer, string>;
+    function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult<Buffer, Buffer>;
+    function generateKeyPairSync(type: 'rsa', options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+    function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult<string, string>;
+    function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult<string, Buffer>;
+    function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult<Buffer, string>;
+    function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult<Buffer, Buffer>;
+    function generateKeyPairSync(type: 'dsa', options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+    function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult<string, string>;
+    function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>): KeyPairSyncResult<string, Buffer>;
+    function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>): KeyPairSyncResult<Buffer, string>;
+    function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'der'>): KeyPairSyncResult<Buffer, Buffer>;
+    function generateKeyPairSync(type: 'ec', options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+    function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
+    function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
+    function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
+    function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
+    function generateKeyPair(type: 'rsa', options: RSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
+
+    function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
+    function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
+    function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
+    function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
+    function generateKeyPair(type: 'dsa', options: DSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
+
+    function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
+    function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
+    function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
+    function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
+    function generateKeyPair(type: 'ec', options: ECKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
+
+    namespace generateKeyPair {
+        function __promisify__(type: "rsa", options: RSAKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
+        function __promisify__(type: "rsa", options: RSAKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
+        function __promisify__(type: "rsa", options: RSAKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
+        function __promisify__(type: "rsa", options: RSAKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
+        function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise<KeyPairKeyObjectResult>;
+
+        function __promisify__(type: "dsa", options: DSAKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
+        function __promisify__(type: "dsa", options: DSAKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
+        function __promisify__(type: "dsa", options: DSAKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
+        function __promisify__(type: "dsa", options: DSAKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
+        function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise<KeyPairKeyObjectResult>;
+
+        function __promisify__(type: "ec", options: ECKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
+        function __promisify__(type: "ec", options: ECKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
+        function __promisify__(type: "ec", options: ECKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
+        function __promisify__(type: "ec", options: ECKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
+        function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise<KeyPairKeyObjectResult>;
+    }
+
+    /**
+     * Calculates and returns the signature for `data` using the given private key and
+     * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
+     * dependent upon the key type (especially Ed25519 and Ed448).
+     *
+     * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
+     * passed to [`crypto.createPrivateKey()`][].
+     */
+    function sign(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: KeyLike | SignPrivateKeyInput): Buffer;
+
+    interface VerifyKeyWithOptions extends KeyObject, SigningOptions {
+    }
+
+    /**
+     * Calculates and returns the signature for `data` using the given private key and
+     * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
+     * dependent upon the key type (especially Ed25519 and Ed448).
+     *
+     * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
+     * passed to [`crypto.createPublicKey()`][].
+     */
+    function verify(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: KeyLike | VerifyKeyWithOptions, signature: NodeJS.ArrayBufferView): Buffer;
+}
diff --git a/setup-maven/node_modules/@types/node/dgram.d.ts b/setup-maven/node_modules/@types/node/dgram.d.ts
new file mode 100644
index 0000000..f04e9a2
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/dgram.d.ts
@@ -0,0 +1,118 @@
+declare module "dgram" {
+    import { AddressInfo } from "net";
+    import * as dns from "dns";
+    import * as events from "events";
+
+    interface RemoteInfo {
+        address: string;
+        family: 'IPv4' | 'IPv6';
+        port: number;
+        size: number;
+    }
+
+    interface BindOptions {
+        port?: number;
+        address?: string;
+        exclusive?: boolean;
+        fd?: number;
+    }
+
+    type SocketType = "udp4" | "udp6";
+
+    interface SocketOptions {
+        type: SocketType;
+        reuseAddr?: boolean;
+        /**
+         * @default false
+         */
+        ipv6Only?: boolean;
+        recvBufferSize?: number;
+        sendBufferSize?: number;
+        lookup?: (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void;
+    }
+
+    function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
+    function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
+
+    class Socket extends events.EventEmitter {
+        addMembership(multicastAddress: string, multicastInterface?: string): void;
+        address(): AddressInfo;
+        bind(port?: number, address?: string, callback?: () => void): void;
+        bind(port?: number, callback?: () => void): void;
+        bind(callback?: () => void): void;
+        bind(options: BindOptions, callback?: () => void): void;
+        close(callback?: () => void): void;
+        connect(port: number, address?: string, callback?: () => void): void;
+        connect(port: number, callback: () => void): void;
+        disconnect(): void;
+        dropMembership(multicastAddress: string, multicastInterface?: string): void;
+        getRecvBufferSize(): number;
+        getSendBufferSize(): number;
+        ref(): this;
+        remoteAddress(): AddressInfo;
+        send(msg: string | Uint8Array | any[], port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
+        send(msg: string | Uint8Array | any[], port?: number, callback?: (error: Error | null, bytes: number) => void): void;
+        send(msg: string | Uint8Array | any[], callback?: (error: Error | null, bytes: number) => void): void;
+        send(msg: string | Uint8Array, offset: number, length: number, port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
+        send(msg: string | Uint8Array, offset: number, length: number, port?: number, callback?: (error: Error | null, bytes: number) => void): void;
+        send(msg: string | Uint8Array, offset: number, length: number, callback?: (error: Error | null, bytes: number) => void): void;
+        setBroadcast(flag: boolean): void;
+        setMulticastInterface(multicastInterface: string): void;
+        setMulticastLoopback(flag: boolean): void;
+        setMulticastTTL(ttl: number): void;
+        setRecvBufferSize(size: number): void;
+        setSendBufferSize(size: number): void;
+        setTTL(ttl: number): void;
+        unref(): this;
+
+        /**
+         * events.EventEmitter
+         * 1. close
+         * 2. connect
+         * 3. error
+         * 4. listening
+         * 5. message
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "connect", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "listening", listener: () => void): this;
+        addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "connect"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "listening"): boolean;
+        emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "connect", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "listening", listener: () => void): this;
+        on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "connect", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "listening", listener: () => void): this;
+        once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "connect", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "listening", listener: () => void): this;
+        prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "connect", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "listening", listener: () => void): this;
+        prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/dns.d.ts b/setup-maven/node_modules/@types/node/dns.d.ts
new file mode 100644
index 0000000..d2b0505
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/dns.d.ts
@@ -0,0 +1,366 @@
+declare module "dns" {
+    // Supported getaddrinfo flags.
+    const ADDRCONFIG: number;
+    const V4MAPPED: number;
+
+    interface LookupOptions {
+        family?: number;
+        hints?: number;
+        all?: boolean;
+        verbatim?: boolean;
+    }
+
+    interface LookupOneOptions extends LookupOptions {
+        all?: false;
+    }
+
+    interface LookupAllOptions extends LookupOptions {
+        all: true;
+    }
+
+    interface LookupAddress {
+        address: string;
+        family: number;
+    }
+
+    function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
+    function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
+    function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void): void;
+    function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void): void;
+    function lookup(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace lookup {
+        function __promisify__(hostname: string, options: LookupAllOptions): Promise<LookupAddress[]>;
+        function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise<LookupAddress>;
+        function __promisify__(hostname: string, options: LookupOptions): Promise<LookupAddress | LookupAddress[]>;
+    }
+
+    function lookupService(address: string, port: number, callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void): void;
+
+    namespace lookupService {
+        function __promisify__(address: string, port: number): Promise<{ hostname: string, service: string }>;
+    }
+
+    interface ResolveOptions {
+        ttl: boolean;
+    }
+
+    interface ResolveWithTtlOptions extends ResolveOptions {
+        ttl: true;
+    }
+
+    interface RecordWithTtl {
+        address: string;
+        ttl: number;
+    }
+
+    /** @deprecated Use AnyARecord or AnyAaaaRecord instead. */
+    type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord;
+
+    interface AnyARecord extends RecordWithTtl {
+        type: "A";
+    }
+
+    interface AnyAaaaRecord extends RecordWithTtl {
+        type: "AAAA";
+    }
+
+    interface MxRecord {
+        priority: number;
+        exchange: string;
+    }
+
+    interface AnyMxRecord extends MxRecord {
+        type: "MX";
+    }
+
+    interface NaptrRecord {
+        flags: string;
+        service: string;
+        regexp: string;
+        replacement: string;
+        order: number;
+        preference: number;
+    }
+
+    interface AnyNaptrRecord extends NaptrRecord {
+        type: "NAPTR";
+    }
+
+    interface SoaRecord {
+        nsname: string;
+        hostmaster: string;
+        serial: number;
+        refresh: number;
+        retry: number;
+        expire: number;
+        minttl: number;
+    }
+
+    interface AnySoaRecord extends SoaRecord {
+        type: "SOA";
+    }
+
+    interface SrvRecord {
+        priority: number;
+        weight: number;
+        port: number;
+        name: string;
+    }
+
+    interface AnySrvRecord extends SrvRecord {
+        type: "SRV";
+    }
+
+    interface AnyTxtRecord {
+        type: "TXT";
+        entries: string[];
+    }
+
+    interface AnyNsRecord {
+        type: "NS";
+        value: string;
+    }
+
+    interface AnyPtrRecord {
+        type: "PTR";
+        value: string;
+    }
+
+    interface AnyCnameRecord {
+        type: "CNAME";
+        value: string;
+    }
+
+    type AnyRecord = AnyARecord |
+        AnyAaaaRecord |
+        AnyCnameRecord |
+        AnyMxRecord |
+        AnyNaptrRecord |
+        AnyNsRecord |
+        AnyPtrRecord |
+        AnySoaRecord |
+        AnySrvRecord |
+        AnyTxtRecord;
+
+    function resolve(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve(hostname: string, rrtype: "A", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve(hostname: string, rrtype: "AAAA", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve(hostname: string, rrtype: "ANY", callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void;
+    function resolve(hostname: string, rrtype: "CNAME", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve(hostname: string, rrtype: "MX", callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void;
+    function resolve(hostname: string, rrtype: "NAPTR", callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void;
+    function resolve(hostname: string, rrtype: "NS", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve(hostname: string, rrtype: "PTR", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve(hostname: string, rrtype: "SOA", callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void): void;
+    function resolve(hostname: string, rrtype: "SRV", callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void;
+    function resolve(hostname: string, rrtype: "TXT", callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void;
+    function resolve(
+        hostname: string,
+        rrtype: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]) => void,
+    ): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace resolve {
+        function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise<string[]>;
+        function __promisify__(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
+        function __promisify__(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
+        function __promisify__(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
+        function __promisify__(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
+        function __promisify__(hostname: string, rrtype: "SRV"): Promise<SrvRecord[]>;
+        function __promisify__(hostname: string, rrtype: "TXT"): Promise<string[][]>;
+        function __promisify__(hostname: string, rrtype: string): Promise<string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]>;
+    }
+
+    function resolve4(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve4(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void;
+    function resolve4(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace resolve4 {
+        function __promisify__(hostname: string): Promise<string[]>;
+        function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
+        function __promisify__(hostname: string, options?: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
+    }
+
+    function resolve6(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    function resolve6(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void;
+    function resolve6(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace resolve6 {
+        function __promisify__(hostname: string): Promise<string[]>;
+        function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
+        function __promisify__(hostname: string, options?: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
+    }
+
+    function resolveCname(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    namespace resolveCname {
+        function __promisify__(hostname: string): Promise<string[]>;
+    }
+
+    function resolveMx(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void;
+    namespace resolveMx {
+        function __promisify__(hostname: string): Promise<MxRecord[]>;
+    }
+
+    function resolveNaptr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void;
+    namespace resolveNaptr {
+        function __promisify__(hostname: string): Promise<NaptrRecord[]>;
+    }
+
+    function resolveNs(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    namespace resolveNs {
+        function __promisify__(hostname: string): Promise<string[]>;
+    }
+
+    function resolvePtr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+    namespace resolvePtr {
+        function __promisify__(hostname: string): Promise<string[]>;
+    }
+
+    function resolveSoa(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void): void;
+    namespace resolveSoa {
+        function __promisify__(hostname: string): Promise<SoaRecord>;
+    }
+
+    function resolveSrv(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void;
+    namespace resolveSrv {
+        function __promisify__(hostname: string): Promise<SrvRecord[]>;
+    }
+
+    function resolveTxt(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void;
+    namespace resolveTxt {
+        function __promisify__(hostname: string): Promise<string[][]>;
+    }
+
+    function resolveAny(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void;
+    namespace resolveAny {
+        function __promisify__(hostname: string): Promise<AnyRecord[]>;
+    }
+
+    function reverse(ip: string, callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void): void;
+    function setServers(servers: ReadonlyArray<string>): void;
+    function getServers(): string[];
+
+    // Error codes
+    const NODATA: string;
+    const FORMERR: string;
+    const SERVFAIL: string;
+    const NOTFOUND: string;
+    const NOTIMP: string;
+    const REFUSED: string;
+    const BADQUERY: string;
+    const BADNAME: string;
+    const BADFAMILY: string;
+    const BADRESP: string;
+    const CONNREFUSED: string;
+    const TIMEOUT: string;
+    const EOF: string;
+    const FILE: string;
+    const NOMEM: string;
+    const DESTRUCTION: string;
+    const BADSTR: string;
+    const BADFLAGS: string;
+    const NONAME: string;
+    const BADHINTS: string;
+    const NOTINITIALIZED: string;
+    const LOADIPHLPAPI: string;
+    const ADDRGETNETWORKPARAMS: string;
+    const CANCELLED: string;
+
+    class Resolver {
+        getServers: typeof getServers;
+        setServers: typeof setServers;
+        resolve: typeof resolve;
+        resolve4: typeof resolve4;
+        resolve6: typeof resolve6;
+        resolveAny: typeof resolveAny;
+        resolveCname: typeof resolveCname;
+        resolveMx: typeof resolveMx;
+        resolveNaptr: typeof resolveNaptr;
+        resolveNs: typeof resolveNs;
+        resolvePtr: typeof resolvePtr;
+        resolveSoa: typeof resolveSoa;
+        resolveSrv: typeof resolveSrv;
+        resolveTxt: typeof resolveTxt;
+        reverse: typeof reverse;
+        cancel(): void;
+    }
+
+    namespace promises {
+        function getServers(): string[];
+
+        function lookup(hostname: string, family: number): Promise<LookupAddress>;
+        function lookup(hostname: string, options: LookupOneOptions): Promise<LookupAddress>;
+        function lookup(hostname: string, options: LookupAllOptions): Promise<LookupAddress[]>;
+        function lookup(hostname: string, options: LookupOptions): Promise<LookupAddress | LookupAddress[]>;
+        function lookup(hostname: string): Promise<LookupAddress>;
+
+        function lookupService(address: string, port: number): Promise<{ hostname: string, service: string }>;
+
+        function resolve(hostname: string): Promise<string[]>;
+        function resolve(hostname: string, rrtype: "A"): Promise<string[]>;
+        function resolve(hostname: string, rrtype: "AAAA"): Promise<string[]>;
+        function resolve(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
+        function resolve(hostname: string, rrtype: "CNAME"): Promise<string[]>;
+        function resolve(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
+        function resolve(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
+        function resolve(hostname: string, rrtype: "NS"): Promise<string[]>;
+        function resolve(hostname: string, rrtype: "PTR"): Promise<string[]>;
+        function resolve(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
+        function resolve(hostname: string, rrtype: "SRV"): Promise<SrvRecord[]>;
+        function resolve(hostname: string, rrtype: "TXT"): Promise<string[][]>;
+        function resolve(hostname: string, rrtype: string): Promise<string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]>;
+
+        function resolve4(hostname: string): Promise<string[]>;
+        function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
+        function resolve4(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
+
+        function resolve6(hostname: string): Promise<string[]>;
+        function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
+        function resolve6(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
+
+        function resolveAny(hostname: string): Promise<AnyRecord[]>;
+
+        function resolveCname(hostname: string): Promise<string[]>;
+
+        function resolveMx(hostname: string): Promise<MxRecord[]>;
+
+        function resolveNaptr(hostname: string): Promise<NaptrRecord[]>;
+
+        function resolveNs(hostname: string): Promise<string[]>;
+
+        function resolvePtr(hostname: string): Promise<string[]>;
+
+        function resolveSoa(hostname: string): Promise<SoaRecord>;
+
+        function resolveSrv(hostname: string): Promise<SrvRecord[]>;
+
+        function resolveTxt(hostname: string): Promise<string[][]>;
+
+        function reverse(ip: string): Promise<string[]>;
+
+        function setServers(servers: ReadonlyArray<string>): void;
+
+        class Resolver {
+            getServers: typeof getServers;
+            resolve: typeof resolve;
+            resolve4: typeof resolve4;
+            resolve6: typeof resolve6;
+            resolveAny: typeof resolveAny;
+            resolveCname: typeof resolveCname;
+            resolveMx: typeof resolveMx;
+            resolveNaptr: typeof resolveNaptr;
+            resolveNs: typeof resolveNs;
+            resolvePtr: typeof resolvePtr;
+            resolveSoa: typeof resolveSoa;
+            resolveSrv: typeof resolveSrv;
+            resolveTxt: typeof resolveTxt;
+            reverse: typeof reverse;
+            setServers: typeof setServers;
+        }
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/domain.d.ts b/setup-maven/node_modules/@types/node/domain.d.ts
new file mode 100644
index 0000000..45e388c
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/domain.d.ts
@@ -0,0 +1,16 @@
+declare module "domain" {
+    import * as events from "events";
+
+    class Domain extends events.EventEmitter implements NodeJS.Domain {
+        run<T>(fn: (...args: any[]) => T, ...args: any[]): T;
+        add(emitter: events.EventEmitter | NodeJS.Timer): void;
+        remove(emitter: events.EventEmitter | NodeJS.Timer): void;
+        bind<T extends Function>(cb: T): T;
+        intercept<T extends Function>(cb: T): T;
+        members: Array<events.EventEmitter | NodeJS.Timer>;
+        enter(): void;
+        exit(): void;
+    }
+
+    function create(): Domain;
+}
diff --git a/setup-maven/node_modules/@types/node/events.d.ts b/setup-maven/node_modules/@types/node/events.d.ts
new file mode 100644
index 0000000..03f5b90
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/events.d.ts
@@ -0,0 +1,39 @@
+declare module "events" {
+    class internal extends NodeJS.EventEmitter { }
+
+    interface NodeEventTarget {
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    interface DOMEventTarget {
+        addEventListener(event: string, listener: (...args: any[]) => void, opts?: { once: boolean }): any;
+    }
+
+    namespace internal {
+        function once(emitter: NodeEventTarget, event: string | symbol): Promise<any[]>;
+        function once(emitter: DOMEventTarget, event: string): Promise<any[]>;
+         class EventEmitter extends internal {
+            /** @deprecated since v4.0.0 */
+            static listenerCount(emitter: EventEmitter, event: string | symbol): number;
+            static defaultMaxListeners: number;
+
+            addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+            on(event: string | symbol, listener: (...args: any[]) => void): this;
+            once(event: string | symbol, listener: (...args: any[]) => void): this;
+            prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+            prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+            removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
+            off(event: string | symbol, listener: (...args: any[]) => void): this;
+            removeAllListeners(event?: string | symbol): this;
+            setMaxListeners(n: number): this;
+            getMaxListeners(): number;
+            listeners(event: string | symbol): Function[];
+            rawListeners(event: string | symbol): Function[];
+            emit(event: string | symbol, ...args: any[]): boolean;
+            eventNames(): Array<string | symbol>;
+            listenerCount(type: string | symbol): number;
+        }
+    }
+
+    export = internal;
+}
diff --git a/setup-maven/node_modules/@types/node/fs.d.ts b/setup-maven/node_modules/@types/node/fs.d.ts
new file mode 100644
index 0000000..8c57f0c
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/fs.d.ts
@@ -0,0 +1,2446 @@
+declare module "fs" {
+    import * as stream from "stream";
+    import * as events from "events";
+    import { URL } from "url";
+
+    /**
+     * Valid types for path values in "fs".
+     */
+    type PathLike = string | Buffer | URL;
+
+    type NoParamCallback = (err: NodeJS.ErrnoException | null) => void;
+
+    interface StatsBase<T> {
+        isFile(): boolean;
+        isDirectory(): boolean;
+        isBlockDevice(): boolean;
+        isCharacterDevice(): boolean;
+        isSymbolicLink(): boolean;
+        isFIFO(): boolean;
+        isSocket(): boolean;
+
+        dev: number;
+        ino: number;
+        mode: number;
+        nlink: number;
+        uid: number;
+        gid: number;
+        rdev: number;
+        size: number;
+        blksize: number;
+        blocks: number;
+        atimeMs: number;
+        mtimeMs: number;
+        ctimeMs: number;
+        birthtimeMs: number;
+        atime: Date;
+        mtime: Date;
+        ctime: Date;
+        birthtime: Date;
+    }
+
+    interface Stats extends StatsBase<number> {
+    }
+
+    class Stats {
+    }
+
+    class Dirent {
+        isFile(): boolean;
+        isDirectory(): boolean;
+        isBlockDevice(): boolean;
+        isCharacterDevice(): boolean;
+        isSymbolicLink(): boolean;
+        isFIFO(): boolean;
+        isSocket(): boolean;
+        name: string;
+    }
+
+    /**
+     * A class representing a directory stream.
+     */
+    class Dir {
+        readonly path: string;
+
+        /**
+         * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read.
+         */
+        [Symbol.asyncIterator](): AsyncIterableIterator<Dirent>;
+
+        /**
+         * Asynchronously close the directory's underlying resource handle.
+         * Subsequent reads will result in errors.
+         */
+        close(): Promise<void>;
+        close(cb: NoParamCallback): void;
+
+        /**
+         * Synchronously close the directory's underlying resource handle.
+         * Subsequent reads will result in errors.
+         */
+        closeSync(): void;
+
+        /**
+         * Asynchronously read the next directory entry via `readdir(3)` as an `Dirent`.
+         * After the read is completed, a value is returned that will be resolved with an `Dirent`, or `null` if there are no more directory entries to read.
+         * Directory entries returned by this function are in no particular order as provided by the operating system's underlying directory mechanisms.
+         */
+        read(): Promise<Dirent | null>;
+        read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void;
+
+        /**
+         * Synchronously read the next directory entry via `readdir(3)` as a `Dirent`.
+         * If there are no more directory entries to read, null will be returned.
+         * Directory entries returned by this function are in no particular order as provided by the operating system's underlying directory mechanisms.
+         */
+        readSync(): Dirent;
+    }
+
+    interface FSWatcher extends events.EventEmitter {
+        close(): void;
+
+        /**
+         * events.EventEmitter
+         *   1. change
+         *   2. error
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        addListener(event: "error", listener: (error: Error) => void): this;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        on(event: "error", listener: (error: Error) => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        once(event: "error", listener: (error: Error) => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        prependListener(event: "error", listener: (error: Error) => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+        prependOnceListener(event: "error", listener: (error: Error) => void): this;
+    }
+
+    class ReadStream extends stream.Readable {
+        close(): void;
+        bytesRead: number;
+        path: string | Buffer;
+
+        /**
+         * events.EventEmitter
+         *   1. open
+         *   2. close
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "open", listener: (fd: number) => void): this;
+        addListener(event: "close", listener: () => void): this;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "open", listener: (fd: number) => void): this;
+        on(event: "close", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "open", listener: (fd: number) => void): this;
+        once(event: "close", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "open", listener: (fd: number) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "open", listener: (fd: number) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+    }
+
+    class WriteStream extends stream.Writable {
+        close(): void;
+        bytesWritten: number;
+        path: string | Buffer;
+
+        /**
+         * events.EventEmitter
+         *   1. open
+         *   2. close
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "open", listener: (fd: number) => void): this;
+        addListener(event: "close", listener: () => void): this;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "open", listener: (fd: number) => void): this;
+        on(event: "close", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "open", listener: (fd: number) => void): this;
+        once(event: "close", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "open", listener: (fd: number) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "open", listener: (fd: number) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+    }
+
+    /**
+     * Asynchronous rename(2) - Change the name or location of a file or directory.
+     * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace rename {
+        /**
+         * Asynchronous rename(2) - Change the name or location of a file or directory.
+         * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function __promisify__(oldPath: PathLike, newPath: PathLike): Promise<void>;
+    }
+
+    /**
+     * Synchronous rename(2) - Change the name or location of a file or directory.
+     * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function renameSync(oldPath: PathLike, newPath: PathLike): void;
+
+    /**
+     * Asynchronous truncate(2) - Truncate a file to a specified length.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param len If not specified, defaults to `0`.
+     */
+    function truncate(path: PathLike, len: number | undefined | null, callback: NoParamCallback): void;
+
+    /**
+     * Asynchronous truncate(2) - Truncate a file to a specified length.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function truncate(path: PathLike, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace truncate {
+        /**
+         * Asynchronous truncate(2) - Truncate a file to a specified length.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param len If not specified, defaults to `0`.
+         */
+        function __promisify__(path: PathLike, len?: number | null): Promise<void>;
+    }
+
+    /**
+     * Synchronous truncate(2) - Truncate a file to a specified length.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param len If not specified, defaults to `0`.
+     */
+    function truncateSync(path: PathLike, len?: number | null): void;
+
+    /**
+     * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+     * @param fd A file descriptor.
+     * @param len If not specified, defaults to `0`.
+     */
+    function ftruncate(fd: number, len: number | undefined | null, callback: NoParamCallback): void;
+
+    /**
+     * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+     * @param fd A file descriptor.
+     */
+    function ftruncate(fd: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace ftruncate {
+        /**
+         * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+         * @param fd A file descriptor.
+         * @param len If not specified, defaults to `0`.
+         */
+        function __promisify__(fd: number, len?: number | null): Promise<void>;
+    }
+
+    /**
+     * Synchronous ftruncate(2) - Truncate a file to a specified length.
+     * @param fd A file descriptor.
+     * @param len If not specified, defaults to `0`.
+     */
+    function ftruncateSync(fd: number, len?: number | null): void;
+
+    /**
+     * Asynchronous chown(2) - Change ownership of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace chown {
+        /**
+         * Asynchronous chown(2) - Change ownership of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike, uid: number, gid: number): Promise<void>;
+    }
+
+    /**
+     * Synchronous chown(2) - Change ownership of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function chownSync(path: PathLike, uid: number, gid: number): void;
+
+    /**
+     * Asynchronous fchown(2) - Change ownership of a file.
+     * @param fd A file descriptor.
+     */
+    function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace fchown {
+        /**
+         * Asynchronous fchown(2) - Change ownership of a file.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number, uid: number, gid: number): Promise<void>;
+    }
+
+    /**
+     * Synchronous fchown(2) - Change ownership of a file.
+     * @param fd A file descriptor.
+     */
+    function fchownSync(fd: number, uid: number, gid: number): void;
+
+    /**
+     * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace lchown {
+        /**
+         * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike, uid: number, gid: number): Promise<void>;
+    }
+
+    /**
+     * Synchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function lchownSync(path: PathLike, uid: number, gid: number): void;
+
+    /**
+     * Asynchronous chmod(2) - Change permissions of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+     */
+    function chmod(path: PathLike, mode: string | number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace chmod {
+        /**
+         * Asynchronous chmod(2) - Change permissions of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function __promisify__(path: PathLike, mode: string | number): Promise<void>;
+    }
+
+    /**
+     * Synchronous chmod(2) - Change permissions of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+     */
+    function chmodSync(path: PathLike, mode: string | number): void;
+
+    /**
+     * Asynchronous fchmod(2) - Change permissions of a file.
+     * @param fd A file descriptor.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+     */
+    function fchmod(fd: number, mode: string | number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace fchmod {
+        /**
+         * Asynchronous fchmod(2) - Change permissions of a file.
+         * @param fd A file descriptor.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function __promisify__(fd: number, mode: string | number): Promise<void>;
+    }
+
+    /**
+     * Synchronous fchmod(2) - Change permissions of a file.
+     * @param fd A file descriptor.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+     */
+    function fchmodSync(fd: number, mode: string | number): void;
+
+    /**
+     * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+     */
+    function lchmod(path: PathLike, mode: string | number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace lchmod {
+        /**
+         * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function __promisify__(path: PathLike, mode: string | number): Promise<void>;
+    }
+
+    /**
+     * Synchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+     */
+    function lchmodSync(path: PathLike, mode: string | number): void;
+
+    /**
+     * Asynchronous stat(2) - Get file status.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace stat {
+        /**
+         * Asynchronous stat(2) - Get file status.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike): Promise<Stats>;
+    }
+
+    /**
+     * Synchronous stat(2) - Get file status.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function statSync(path: PathLike): Stats;
+
+    /**
+     * Asynchronous fstat(2) - Get file status.
+     * @param fd A file descriptor.
+     */
+    function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace fstat {
+        /**
+         * Asynchronous fstat(2) - Get file status.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number): Promise<Stats>;
+    }
+
+    /**
+     * Synchronous fstat(2) - Get file status.
+     * @param fd A file descriptor.
+     */
+    function fstatSync(fd: number): Stats;
+
+    /**
+     * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace lstat {
+        /**
+         * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike): Promise<Stats>;
+    }
+
+    /**
+     * Synchronous lstat(2) - Get file status. Does not dereference symbolic links.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function lstatSync(path: PathLike): Stats;
+
+    /**
+     * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+     * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace link {
+        /**
+         * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+         * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(existingPath: PathLike, newPath: PathLike): Promise<void>;
+    }
+
+    /**
+     * Synchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+     * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function linkSync(existingPath: PathLike, newPath: PathLike): void;
+
+    /**
+     * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+     * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+     * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+     * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+     * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+     */
+    function symlink(target: PathLike, path: PathLike, type: symlink.Type | undefined | null, callback: NoParamCallback): void;
+
+    /**
+     * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+     * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+     * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+     */
+    function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace symlink {
+        /**
+         * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+         * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+         * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+         * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+         * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+         */
+        function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise<void>;
+
+        type Type = "dir" | "file" | "junction";
+    }
+
+    /**
+     * Synchronous symlink(2) - Create a new symbolic link to an existing file.
+     * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+     * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+     * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+     * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+     */
+    function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void;
+
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlink(
+        path: PathLike,
+        options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, linkString: string) => void
+    ): void;
+
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlink(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void): void;
+
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlink(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void): void;
+
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function readlink(path: PathLike, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace readlink {
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise<string>;
+
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise<Buffer>;
+
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: { encoding?: string | null } | string | null): Promise<string | Buffer>;
+    }
+
+    /**
+     * Synchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlinkSync(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string;
+
+    /**
+     * Synchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlinkSync(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer;
+
+    /**
+     * Synchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlinkSync(path: PathLike, options?: { encoding?: string | null } | string | null): string | Buffer;
+
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpath(
+        path: PathLike,
+        options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void
+    ): void;
+
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpath(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void): void;
+
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpath(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void): void;
+
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function realpath(path: PathLike, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace realpath {
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise<string>;
+
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise<Buffer>;
+
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: { encoding?: string | null } | string | null): Promise<string | Buffer>;
+
+        function native(
+            path: PathLike,
+            options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null,
+            callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void
+        ): void;
+        function native(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void): void;
+        function native(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void): void;
+        function native(path: PathLike, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void;
+    }
+
+    /**
+     * Synchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpathSync(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string;
+
+    /**
+     * Synchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpathSync(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer;
+
+    /**
+     * Synchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpathSync(path: PathLike, options?: { encoding?: string | null } | string | null): string | Buffer;
+
+    namespace realpathSync {
+        function native(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string;
+        function native(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer;
+        function native(path: PathLike, options?: { encoding?: string | null } | string | null): string | Buffer;
+    }
+
+    /**
+     * Asynchronous unlink(2) - delete a name and possibly the file it refers to.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function unlink(path: PathLike, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace unlink {
+        /**
+         * Asynchronous unlink(2) - delete a name and possibly the file it refers to.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike): Promise<void>;
+    }
+
+    /**
+     * Synchronous unlink(2) - delete a name and possibly the file it refers to.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function unlinkSync(path: PathLike): void;
+
+    interface RmDirOptions {
+        /**
+         * If `true`, perform a recursive directory removal. In
+         * recursive mode, errors are not reported if `path` does not exist, and
+         * operations are retried on failure.
+         * @experimental
+         * @default false
+         */
+        recursive?: boolean;
+    }
+
+    interface RmDirAsyncOptions extends RmDirOptions {
+        /**
+         * If an `EMFILE` error is encountered, Node.js will
+         * retry the operation with a linear backoff of 1ms longer on each try until the
+         * timeout duration passes this limit. This option is ignored if the `recursive`
+         * option is not `true`.
+         * @default 1000
+         */
+        emfileWait?: number;
+        /**
+         * If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error is
+         * encountered, Node.js will retry the operation with a linear backoff wait of
+         * 100ms longer on each try. This option represents the number of retries. This
+         * option is ignored if the `recursive` option is not `true`.
+         * @default 3
+         */
+        maxBusyTries?: number;
+    }
+
+    /**
+     * Asynchronous rmdir(2) - delete a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function rmdir(path: PathLike, callback: NoParamCallback): void;
+    function rmdir(path: PathLike, options: RmDirAsyncOptions, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace rmdir {
+        /**
+         * Asynchronous rmdir(2) - delete a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike, options?: RmDirAsyncOptions): Promise<void>;
+    }
+
+    /**
+     * Synchronous rmdir(2) - delete a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function rmdirSync(path: PathLike, options?: RmDirOptions): void;
+
+    interface MakeDirectoryOptions {
+        /**
+         * Indicates whether parent folders should be created.
+         * @default false
+         */
+        recursive?: boolean;
+        /**
+         * A file mode. If a string is passed, it is parsed as an octal integer. If not specified
+         * @default 0o777.
+         */
+        mode?: number;
+    }
+
+    /**
+     * Asynchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    function mkdir(path: PathLike, options: number | string | MakeDirectoryOptions | undefined | null, callback: NoParamCallback): void;
+
+    /**
+     * Asynchronous mkdir(2) - create a directory with a mode of `0o777`.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function mkdir(path: PathLike, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace mkdir {
+        /**
+         * Asynchronous mkdir(2) - create a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+         * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+         */
+        function __promisify__(path: PathLike, options?: number | string | MakeDirectoryOptions | null): Promise<void>;
+    }
+
+    /**
+     * Synchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    function mkdirSync(path: PathLike, options?: number | string | MakeDirectoryOptions | null): void;
+
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtemp(prefix: string, options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, folder: string) => void): void;
+
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtemp(prefix: string, options: "buffer" | { encoding: "buffer" }, callback: (err: NodeJS.ErrnoException | null, folder: Buffer) => void): void;
+
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtemp(prefix: string, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException | null, folder: string | Buffer) => void): void;
+
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     */
+    function mkdtemp(prefix: string, callback: (err: NodeJS.ErrnoException | null, folder: string) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace mkdtemp {
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(prefix: string, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise<string>;
+
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(prefix: string, options: { encoding: "buffer" } | "buffer"): Promise<Buffer>;
+
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(prefix: string, options?: { encoding?: string | null } | string | null): Promise<string | Buffer>;
+    }
+
+    /**
+     * Synchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtempSync(prefix: string, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string;
+
+    /**
+     * Synchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtempSync(prefix: string, options: { encoding: "buffer" } | "buffer"): Buffer;
+
+    /**
+     * Synchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtempSync(prefix: string, options?: { encoding?: string | null } | string | null): string | Buffer;
+
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdir(
+        path: PathLike,
+        options: { encoding: BufferEncoding | null; withFileTypes?: false } | BufferEncoding | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, files: string[]) => void,
+    ): void;
+
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdir(path: PathLike, options: { encoding: "buffer"; withFileTypes?: false } | "buffer", callback: (err: NodeJS.ErrnoException | null, files: Buffer[]) => void): void;
+
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdir(
+        path: PathLike,
+        options: { encoding?: string | null; withFileTypes?: false } | string | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, files: string[] | Buffer[]) => void,
+    ): void;
+
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function readdir(path: PathLike, callback: (err: NodeJS.ErrnoException | null, files: string[]) => void): void;
+
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
+     */
+    function readdir(path: PathLike, options: { encoding?: string | null; withFileTypes: true }, callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace readdir {
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: { encoding: BufferEncoding | null; withFileTypes?: false } | BufferEncoding | null): Promise<string[]>;
+
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options: "buffer" | { encoding: "buffer"; withFileTypes?: false }): Promise<Buffer[]>;
+
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: { encoding?: string | null; withFileTypes?: false } | string | null): Promise<string[] | Buffer[]>;
+
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options If called with `withFileTypes: true` the result data will be an array of Dirent
+         */
+        function __promisify__(path: PathLike, options: { encoding?: string | null; withFileTypes: true }): Promise<Dirent[]>;
+    }
+
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdirSync(path: PathLike, options?: { encoding: BufferEncoding | null; withFileTypes?: false } | BufferEncoding | null): string[];
+
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdirSync(path: PathLike, options: { encoding: "buffer"; withFileTypes?: false } | "buffer"): Buffer[];
+
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdirSync(path: PathLike, options?: { encoding?: string | null; withFileTypes?: false } | string | null): string[] | Buffer[];
+
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
+     */
+    function readdirSync(path: PathLike, options: { encoding?: string | null; withFileTypes: true }): Dirent[];
+
+    /**
+     * Asynchronous close(2) - close a file descriptor.
+     * @param fd A file descriptor.
+     */
+    function close(fd: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace close {
+        /**
+         * Asynchronous close(2) - close a file descriptor.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number): Promise<void>;
+    }
+
+    /**
+     * Synchronous close(2) - close a file descriptor.
+     * @param fd A file descriptor.
+     */
+    function closeSync(fd: number): void;
+
+    /**
+     * Asynchronous open(2) - open and possibly create a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`.
+     */
+    function open(path: PathLike, flags: string | number, mode: string | number | undefined | null, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void;
+
+    /**
+     * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    function open(path: PathLike, flags: string | number, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace open {
+        /**
+         * Asynchronous open(2) - open and possibly create a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`.
+         */
+        function __promisify__(path: PathLike, flags: string | number, mode?: string | number | null): Promise<number>;
+    }
+
+    /**
+     * Synchronous open(2) - open and possibly create a file, returning a file descriptor..
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`.
+     */
+    function openSync(path: PathLike, flags: string | number, mode?: string | number | null): number;
+
+    /**
+     * Asynchronously change file timestamps of the file referenced by the supplied path.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param atime The last access time. If a string is provided, it will be coerced to number.
+     * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+     */
+    function utimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace utimes {
+        /**
+         * Asynchronously change file timestamps of the file referenced by the supplied path.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param atime The last access time. If a string is provided, it will be coerced to number.
+         * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+         */
+        function __promisify__(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise<void>;
+    }
+
+    /**
+     * Synchronously change file timestamps of the file referenced by the supplied path.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param atime The last access time. If a string is provided, it will be coerced to number.
+     * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+     */
+    function utimesSync(path: PathLike, atime: string | number | Date, mtime: string | number | Date): void;
+
+    /**
+     * Asynchronously change file timestamps of the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param atime The last access time. If a string is provided, it will be coerced to number.
+     * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+     */
+    function futimes(fd: number, atime: string | number | Date, mtime: string | number | Date, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace futimes {
+        /**
+         * Asynchronously change file timestamps of the file referenced by the supplied file descriptor.
+         * @param fd A file descriptor.
+         * @param atime The last access time. If a string is provided, it will be coerced to number.
+         * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+         */
+        function __promisify__(fd: number, atime: string | number | Date, mtime: string | number | Date): Promise<void>;
+    }
+
+    /**
+     * Synchronously change file timestamps of the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param atime The last access time. If a string is provided, it will be coerced to number.
+     * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+     */
+    function futimesSync(fd: number, atime: string | number | Date, mtime: string | number | Date): void;
+
+    /**
+     * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device.
+     * @param fd A file descriptor.
+     */
+    function fsync(fd: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace fsync {
+        /**
+         * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number): Promise<void>;
+    }
+
+    /**
+     * Synchronous fsync(2) - synchronize a file's in-core state with the underlying storage device.
+     * @param fd A file descriptor.
+     */
+    function fsyncSync(fd: number): void;
+
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+     * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     */
+    function write<TBuffer extends NodeJS.ArrayBufferView>(
+        fd: number,
+        buffer: TBuffer,
+        offset: number | undefined | null,
+        length: number | undefined | null,
+        position: number | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void,
+    ): void;
+
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+     * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+     */
+    function write<TBuffer extends NodeJS.ArrayBufferView>(
+        fd: number,
+        buffer: TBuffer,
+        offset: number | undefined | null,
+        length: number | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void,
+    ): void;
+
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+     */
+    function write<TBuffer extends NodeJS.ArrayBufferView>(
+        fd: number,
+        buffer: TBuffer,
+        offset: number | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void
+    ): void;
+
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     */
+    function write<TBuffer extends NodeJS.ArrayBufferView>(fd: number, buffer: TBuffer, callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void): void;
+
+    /**
+     * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param string A string to write. If something other than a string is supplied it will be coerced to a string.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     * @param encoding The expected string encoding.
+     */
+    function write(
+        fd: number,
+        string: any,
+        position: number | undefined | null,
+        encoding: string | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void,
+    ): void;
+
+    /**
+     * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param string A string to write. If something other than a string is supplied it will be coerced to a string.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     */
+    function write(fd: number, string: any, position: number | undefined | null, callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void): void;
+
+    /**
+     * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param string A string to write. If something other than a string is supplied it will be coerced to a string.
+     */
+    function write(fd: number, string: any, callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace write {
+        /**
+         * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+         * @param fd A file descriptor.
+         * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+         * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+         * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+         */
+        function __promisify__<TBuffer extends NodeJS.ArrayBufferView>(
+            fd: number,
+            buffer?: TBuffer,
+            offset?: number,
+            length?: number,
+            position?: number | null,
+        ): Promise<{ bytesWritten: number, buffer: TBuffer }>;
+
+        /**
+         * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+         * @param fd A file descriptor.
+         * @param string A string to write. If something other than a string is supplied it will be coerced to a string.
+         * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+         * @param encoding The expected string encoding.
+         */
+        function __promisify__(fd: number, string: any, position?: number | null, encoding?: string | null): Promise<{ bytesWritten: number, buffer: string }>;
+    }
+
+    /**
+     * Synchronously writes `buffer` to the file referenced by the supplied file descriptor, returning the number of bytes written.
+     * @param fd A file descriptor.
+     * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+     * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     */
+    function writeSync(fd: number, buffer: NodeJS.ArrayBufferView, offset?: number | null, length?: number | null, position?: number | null): number;
+
+    /**
+     * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written.
+     * @param fd A file descriptor.
+     * @param string A string to write. If something other than a string is supplied it will be coerced to a string.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     * @param encoding The expected string encoding.
+     */
+    function writeSync(fd: number, string: any, position?: number | null, encoding?: string | null): number;
+
+    /**
+     * Asynchronously reads data from the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param buffer The buffer that the data will be written to.
+     * @param offset The offset in the buffer at which to start writing.
+     * @param length The number of bytes to read.
+     * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position.
+     */
+    function read<TBuffer extends NodeJS.ArrayBufferView>(
+        fd: number,
+        buffer: TBuffer,
+        offset: number,
+        length: number,
+        position: number | null,
+        callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void,
+    ): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace read {
+        /**
+         * @param fd A file descriptor.
+         * @param buffer The buffer that the data will be written to.
+         * @param offset The offset in the buffer at which to start writing.
+         * @param length The number of bytes to read.
+         * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position.
+         */
+        function __promisify__<TBuffer extends NodeJS.ArrayBufferView>(
+            fd: number,
+            buffer: TBuffer,
+            offset: number,
+            length: number,
+            position: number | null
+        ): Promise<{ bytesRead: number, buffer: TBuffer }>;
+    }
+
+    /**
+     * Synchronously reads data from the file referenced by the supplied file descriptor, returning the number of bytes read.
+     * @param fd A file descriptor.
+     * @param buffer The buffer that the data will be written to.
+     * @param offset The offset in the buffer at which to start writing.
+     * @param length The number of bytes to read.
+     * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position.
+     */
+    function readSync(fd: number, buffer: NodeJS.ArrayBufferView, offset: number, length: number, position: number | null): number;
+
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options An object that may contain an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFile(path: PathLike | number, options: { encoding?: null; flag?: string; } | undefined | null, callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void): void;
+
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFile(path: PathLike | number, options: { encoding: string; flag?: string; } | string, callback: (err: NodeJS.ErrnoException | null, data: string) => void): void;
+
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFile(
+        path: PathLike | number,
+        options: { encoding?: string | null; flag?: string; } | string | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void,
+    ): void;
+
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     */
+    function readFile(path: PathLike | number, callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace readFile {
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param options An object that may contain an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function __promisify__(path: PathLike | number, options?: { encoding?: null; flag?: string; } | null): Promise<Buffer>;
+
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function __promisify__(path: PathLike | number, options: { encoding: string; flag?: string; } | string): Promise<string>;
+
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function __promisify__(path: PathLike | number, options?: { encoding?: string | null; flag?: string; } | string | null): Promise<string | Buffer>;
+    }
+
+    /**
+     * Synchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options An object that may contain an optional flag. If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFileSync(path: PathLike | number, options?: { encoding?: null; flag?: string; } | null): Buffer;
+
+    /**
+     * Synchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFileSync(path: PathLike | number, options: { encoding: string; flag?: string; } | string): string;
+
+    /**
+     * Synchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFileSync(path: PathLike | number, options?: { encoding?: string | null; flag?: string; } | string | null): string | Buffer;
+
+    type WriteFileOptions = { encoding?: string | null; mode?: number | string; flag?: string; } | string | null;
+
+    /**
+     * Asynchronously writes data to a file, replacing the file if it already exists.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+     * If `encoding` is not supplied, the default of `'utf8'` is used.
+     * If `mode` is not supplied, the default of `0o666` is used.
+     * If `mode` is a string, it is parsed as an octal integer.
+     * If `flag` is not supplied, the default of `'w'` is used.
+     */
+    function writeFile(path: PathLike | number, data: any, options: WriteFileOptions, callback: NoParamCallback): void;
+
+    /**
+     * Asynchronously writes data to a file, replacing the file if it already exists.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     */
+    function writeFile(path: PathLike | number, data: any, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace writeFile {
+        /**
+         * Asynchronously writes data to a file, replacing the file if it already exists.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+         * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+         * If `encoding` is not supplied, the default of `'utf8'` is used.
+         * If `mode` is not supplied, the default of `0o666` is used.
+         * If `mode` is a string, it is parsed as an octal integer.
+         * If `flag` is not supplied, the default of `'w'` is used.
+         */
+        function __promisify__(path: PathLike | number, data: any, options?: WriteFileOptions): Promise<void>;
+    }
+
+    /**
+     * Synchronously writes data to a file, replacing the file if it already exists.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+     * If `encoding` is not supplied, the default of `'utf8'` is used.
+     * If `mode` is not supplied, the default of `0o666` is used.
+     * If `mode` is a string, it is parsed as an octal integer.
+     * If `flag` is not supplied, the default of `'w'` is used.
+     */
+    function writeFileSync(path: PathLike | number, data: any, options?: WriteFileOptions): void;
+
+    /**
+     * Asynchronously append data to a file, creating the file if it does not exist.
+     * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+     * If `encoding` is not supplied, the default of `'utf8'` is used.
+     * If `mode` is not supplied, the default of `0o666` is used.
+     * If `mode` is a string, it is parsed as an octal integer.
+     * If `flag` is not supplied, the default of `'a'` is used.
+     */
+    function appendFile(file: PathLike | number, data: any, options: WriteFileOptions, callback: NoParamCallback): void;
+
+    /**
+     * Asynchronously append data to a file, creating the file if it does not exist.
+     * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     */
+    function appendFile(file: PathLike | number, data: any, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace appendFile {
+        /**
+         * Asynchronously append data to a file, creating the file if it does not exist.
+         * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+         * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+         * If `encoding` is not supplied, the default of `'utf8'` is used.
+         * If `mode` is not supplied, the default of `0o666` is used.
+         * If `mode` is a string, it is parsed as an octal integer.
+         * If `flag` is not supplied, the default of `'a'` is used.
+         */
+        function __promisify__(file: PathLike | number, data: any, options?: WriteFileOptions): Promise<void>;
+    }
+
+    /**
+     * Synchronously append data to a file, creating the file if it does not exist.
+     * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+     * If `encoding` is not supplied, the default of `'utf8'` is used.
+     * If `mode` is not supplied, the default of `0o666` is used.
+     * If `mode` is a string, it is parsed as an octal integer.
+     * If `flag` is not supplied, the default of `'a'` is used.
+     */
+    function appendFileSync(file: PathLike | number, data: any, options?: WriteFileOptions): void;
+
+    /**
+     * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed.
+     */
+    function watchFile(filename: PathLike, options: { persistent?: boolean; interval?: number; } | undefined, listener: (curr: Stats, prev: Stats) => void): void;
+
+    /**
+     * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed.
+     * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function watchFile(filename: PathLike, listener: (curr: Stats, prev: Stats) => void): void;
+
+    /**
+     * Stop watching for changes on `filename`.
+     * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function unwatchFile(filename: PathLike, listener?: (curr: Stats, prev: Stats) => void): void;
+
+    /**
+     * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`.
+     * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options.
+     * If `encoding` is not supplied, the default of `'utf8'` is used.
+     * If `persistent` is not supplied, the default of `true` is used.
+     * If `recursive` is not supplied, the default of `false` is used.
+     */
+    function watch(
+        filename: PathLike,
+        options: { encoding?: BufferEncoding | null, persistent?: boolean, recursive?: boolean } | BufferEncoding | undefined | null,
+        listener?: (event: string, filename: string) => void,
+    ): FSWatcher;
+
+    /**
+     * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`.
+     * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options.
+     * If `encoding` is not supplied, the default of `'utf8'` is used.
+     * If `persistent` is not supplied, the default of `true` is used.
+     * If `recursive` is not supplied, the default of `false` is used.
+     */
+    function watch(filename: PathLike, options: { encoding: "buffer", persistent?: boolean, recursive?: boolean } | "buffer", listener?: (event: string, filename: Buffer) => void): FSWatcher;
+
+    /**
+     * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`.
+     * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options.
+     * If `encoding` is not supplied, the default of `'utf8'` is used.
+     * If `persistent` is not supplied, the default of `true` is used.
+     * If `recursive` is not supplied, the default of `false` is used.
+     */
+    function watch(
+        filename: PathLike,
+        options: { encoding?: string | null, persistent?: boolean, recursive?: boolean } | string | null,
+        listener?: (event: string, filename: string | Buffer) => void,
+    ): FSWatcher;
+
+    /**
+     * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`.
+     * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function watch(filename: PathLike, listener?: (event: string, filename: string) => any): FSWatcher;
+
+    /**
+     * Asynchronously tests whether or not the given path exists by checking with the file system.
+     * @deprecated
+     * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function exists(path: PathLike, callback: (exists: boolean) => void): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace exists {
+        /**
+         * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function __promisify__(path: PathLike): Promise<boolean>;
+    }
+
+    /**
+     * Synchronously tests whether or not the given path exists by checking with the file system.
+     * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function existsSync(path: PathLike): boolean;
+
+    namespace constants {
+        // File Access Constants
+
+        /** Constant for fs.access(). File is visible to the calling process. */
+        const F_OK: number;
+
+        /** Constant for fs.access(). File can be read by the calling process. */
+        const R_OK: number;
+
+        /** Constant for fs.access(). File can be written by the calling process. */
+        const W_OK: number;
+
+        /** Constant for fs.access(). File can be executed by the calling process. */
+        const X_OK: number;
+
+        // File Copy Constants
+
+        /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */
+        const COPYFILE_EXCL: number;
+
+        /**
+         * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink.
+         * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used.
+         */
+        const COPYFILE_FICLONE: number;
+
+        /**
+         * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink.
+         * If the underlying platform does not support copy-on-write, then the operation will fail with an error.
+         */
+        const COPYFILE_FICLONE_FORCE: number;
+
+        // File Open Constants
+
+        /** Constant for fs.open(). Flag indicating to open a file for read-only access. */
+        const O_RDONLY: number;
+
+        /** Constant for fs.open(). Flag indicating to open a file for write-only access. */
+        const O_WRONLY: number;
+
+        /** Constant for fs.open(). Flag indicating to open a file for read-write access. */
+        const O_RDWR: number;
+
+        /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */
+        const O_CREAT: number;
+
+        /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */
+        const O_EXCL: number;
+
+        /**
+         * Constant for fs.open(). Flag indicating that if path identifies a terminal device,
+         * opening the path shall not cause that terminal to become the controlling terminal for the process
+         * (if the process does not already have one).
+         */
+        const O_NOCTTY: number;
+
+        /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */
+        const O_TRUNC: number;
+
+        /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */
+        const O_APPEND: number;
+
+        /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */
+        const O_DIRECTORY: number;
+
+        /**
+         * constant for fs.open().
+         * Flag indicating reading accesses to the file system will no longer result in
+         * an update to the atime information associated with the file.
+         * This flag is available on Linux operating systems only.
+         */
+        const O_NOATIME: number;
+
+        /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */
+        const O_NOFOLLOW: number;
+
+        /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */
+        const O_SYNC: number;
+
+        /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */
+        const O_DSYNC: number;
+
+        /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */
+        const O_SYMLINK: number;
+
+        /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */
+        const O_DIRECT: number;
+
+        /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */
+        const O_NONBLOCK: number;
+
+        // File Type Constants
+
+        /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */
+        const S_IFMT: number;
+
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */
+        const S_IFREG: number;
+
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */
+        const S_IFDIR: number;
+
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */
+        const S_IFCHR: number;
+
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */
+        const S_IFBLK: number;
+
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */
+        const S_IFIFO: number;
+
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */
+        const S_IFLNK: number;
+
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */
+        const S_IFSOCK: number;
+
+        // File Mode Constants
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */
+        const S_IRWXU: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */
+        const S_IRUSR: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */
+        const S_IWUSR: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */
+        const S_IXUSR: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */
+        const S_IRWXG: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */
+        const S_IRGRP: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */
+        const S_IWGRP: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */
+        const S_IXGRP: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */
+        const S_IRWXO: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */
+        const S_IROTH: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */
+        const S_IWOTH: number;
+
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */
+        const S_IXOTH: number;
+
+        /**
+         * When set, a memory file mapping is used to access the file. This flag
+         * is available on Windows operating systems only. On other operating systems,
+         * this flag is ignored.
+         */
+        const UV_FS_O_FILEMAP: number;
+    }
+
+    /**
+     * Asynchronously tests a user's permissions for the file specified by path.
+     * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void;
+
+    /**
+     * Asynchronously tests a user's permissions for the file specified by path.
+     * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function access(path: PathLike, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace access {
+        /**
+         * Asynchronously tests a user's permissions for the file specified by path.
+         * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function __promisify__(path: PathLike, mode?: number): Promise<void>;
+    }
+
+    /**
+     * Synchronously tests a user's permissions for the file specified by path.
+     * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function accessSync(path: PathLike, mode?: number): void;
+
+    /**
+     * Returns a new `ReadStream` object.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function createReadStream(path: PathLike, options?: string | {
+        flags?: string;
+        encoding?: string;
+        fd?: number;
+        mode?: number;
+        autoClose?: boolean;
+        /**
+         * @default false
+         */
+        emitClose?: boolean;
+        start?: number;
+        end?: number;
+        highWaterMark?: number;
+    }): ReadStream;
+
+    /**
+     * Returns a new `WriteStream` object.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * URL support is _experimental_.
+     */
+    function createWriteStream(path: PathLike, options?: string | {
+        flags?: string;
+        encoding?: string;
+        fd?: number;
+        mode?: number;
+        autoClose?: boolean;
+        start?: number;
+        highWaterMark?: number;
+    }): WriteStream;
+
+    /**
+     * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device.
+     * @param fd A file descriptor.
+     */
+    function fdatasync(fd: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace fdatasync {
+        /**
+         * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number): Promise<void>;
+    }
+
+    /**
+     * Synchronous fdatasync(2) - synchronize a file's in-core state with storage device.
+     * @param fd A file descriptor.
+     */
+    function fdatasyncSync(fd: number): void;
+
+    /**
+     * Asynchronously copies src to dest. By default, dest is overwritten if it already exists.
+     * No arguments other than a possible exception are given to the callback function.
+     * Node.js makes no guarantees about the atomicity of the copy operation.
+     * If an error occurs after the destination file has been opened for writing, Node.js will attempt
+     * to remove the destination.
+     * @param src A path to the source file.
+     * @param dest A path to the destination file.
+     */
+    function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void;
+    /**
+     * Asynchronously copies src to dest. By default, dest is overwritten if it already exists.
+     * No arguments other than a possible exception are given to the callback function.
+     * Node.js makes no guarantees about the atomicity of the copy operation.
+     * If an error occurs after the destination file has been opened for writing, Node.js will attempt
+     * to remove the destination.
+     * @param src A path to the source file.
+     * @param dest A path to the destination file.
+     * @param flags An integer that specifies the behavior of the copy operation. The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists.
+     */
+    function copyFile(src: PathLike, dest: PathLike, flags: number, callback: NoParamCallback): void;
+
+    // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+    namespace copyFile {
+        /**
+         * Asynchronously copies src to dest. By default, dest is overwritten if it already exists.
+         * No arguments other than a possible exception are given to the callback function.
+         * Node.js makes no guarantees about the atomicity of the copy operation.
+         * If an error occurs after the destination file has been opened for writing, Node.js will attempt
+         * to remove the destination.
+         * @param src A path to the source file.
+         * @param dest A path to the destination file.
+         * @param flags An optional integer that specifies the behavior of the copy operation.
+         * The only supported flag is fs.constants.COPYFILE_EXCL,
+         * which causes the copy operation to fail if dest already exists.
+         */
+        function __promisify__(src: PathLike, dst: PathLike, flags?: number): Promise<void>;
+    }
+
+    /**
+     * Synchronously copies src to dest. By default, dest is overwritten if it already exists.
+     * Node.js makes no guarantees about the atomicity of the copy operation.
+     * If an error occurs after the destination file has been opened for writing, Node.js will attempt
+     * to remove the destination.
+     * @param src A path to the source file.
+     * @param dest A path to the destination file.
+     * @param flags An optional integer that specifies the behavior of the copy operation.
+     * The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists.
+     */
+    function copyFileSync(src: PathLike, dest: PathLike, flags?: number): void;
+
+    /**
+     * Write an array of ArrayBufferViews to the file specified by fd using writev().
+     * position is the offset from the beginning of the file where this data should be written.
+     * It is unsafe to use fs.writev() multiple times on the same file without waiting for the callback. For this scenario, use fs.createWriteStream().
+     * On Linux, positional writes don't work when the file is opened in append mode.
+     * The kernel ignores the position argument and always appends the data to the end of the file.
+     */
+    function writev(
+        fd: number,
+        buffers: NodeJS.ArrayBufferView[],
+        cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void
+    ): void;
+    function writev(
+        fd: number,
+        buffers: NodeJS.ArrayBufferView[],
+        position: number,
+        cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void
+    ): void;
+
+    interface WriteVResult {
+        bytesWritten: number;
+        buffers: NodeJS.ArrayBufferView[];
+    }
+
+    namespace writev {
+        function __promisify__(fd: number, buffers: NodeJS.ArrayBufferView[], position?: number): Promise<WriteVResult>;
+    }
+
+    /**
+     * See `writev`.
+     */
+    function writevSync(fd: number, buffers: NodeJS.ArrayBufferView[], position?: number): number;
+
+    interface OpenDirOptions {
+        encoding?: BufferEncoding;
+    }
+
+    function opendirSync(path: string, options?: OpenDirOptions): Dir;
+
+    function opendir(path: string, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
+    function opendir(path: string, options: OpenDirOptions, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
+
+    namespace opendir {
+        function __promisify__(path: string, options?: OpenDirOptions): Promise<Dir>;
+    }
+
+    namespace promises {
+        interface FileHandle {
+            /**
+             * Gets the file descriptor for this file handle.
+             */
+            readonly fd: number;
+
+            /**
+             * Asynchronously append data to a file, creating the file if it does not exist. The underlying file will _not_ be closed automatically.
+             * The `FileHandle` must have been opened for appending.
+             * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string.
+             * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+             * If `encoding` is not supplied, the default of `'utf8'` is used.
+             * If `mode` is not supplied, the default of `0o666` is used.
+             * If `mode` is a string, it is parsed as an octal integer.
+             * If `flag` is not supplied, the default of `'a'` is used.
+             */
+            appendFile(data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise<void>;
+
+            /**
+             * Asynchronous fchown(2) - Change ownership of a file.
+             */
+            chown(uid: number, gid: number): Promise<void>;
+
+            /**
+             * Asynchronous fchmod(2) - Change permissions of a file.
+             * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+             */
+            chmod(mode: string | number): Promise<void>;
+
+            /**
+             * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device.
+             */
+            datasync(): Promise<void>;
+
+            /**
+             * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device.
+             */
+            sync(): Promise<void>;
+
+            /**
+             * Asynchronously reads data from the file.
+             * The `FileHandle` must have been opened for reading.
+             * @param buffer The buffer that the data will be written to.
+             * @param offset The offset in the buffer at which to start writing.
+             * @param length The number of bytes to read.
+             * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position.
+             */
+            read<TBuffer extends Uint8Array>(buffer: TBuffer, offset?: number | null, length?: number | null, position?: number | null): Promise<{ bytesRead: number, buffer: TBuffer }>;
+
+            /**
+             * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically.
+             * The `FileHandle` must have been opened for reading.
+             * @param options An object that may contain an optional flag.
+             * If a flag is not provided, it defaults to `'r'`.
+             */
+            readFile(options?: { encoding?: null, flag?: string | number } | null): Promise<Buffer>;
+
+            /**
+             * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically.
+             * The `FileHandle` must have been opened for reading.
+             * @param options An object that may contain an optional flag.
+             * If a flag is not provided, it defaults to `'r'`.
+             */
+            readFile(options: { encoding: BufferEncoding, flag?: string | number } | BufferEncoding): Promise<string>;
+
+            /**
+             * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically.
+             * The `FileHandle` must have been opened for reading.
+             * @param options An object that may contain an optional flag.
+             * If a flag is not provided, it defaults to `'r'`.
+             */
+            readFile(options?: { encoding?: string | null, flag?: string | number } | string | null): Promise<string | Buffer>;
+
+            /**
+             * Asynchronous fstat(2) - Get file status.
+             */
+            stat(): Promise<Stats>;
+
+            /**
+             * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+             * @param len If not specified, defaults to `0`.
+             */
+            truncate(len?: number): Promise<void>;
+
+            /**
+             * Asynchronously change file timestamps of the file.
+             * @param atime The last access time. If a string is provided, it will be coerced to number.
+             * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+             */
+            utimes(atime: string | number | Date, mtime: string | number | Date): Promise<void>;
+
+            /**
+             * Asynchronously writes `buffer` to the file.
+             * The `FileHandle` must have been opened for writing.
+             * @param buffer The buffer that the data will be written to.
+             * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+             * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+             * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+             */
+            write<TBuffer extends Uint8Array>(buffer: TBuffer, offset?: number | null, length?: number | null, position?: number | null): Promise<{ bytesWritten: number, buffer: TBuffer }>;
+
+            /**
+             * Asynchronously writes `string` to the file.
+             * The `FileHandle` must have been opened for writing.
+             * It is unsafe to call `write()` multiple times on the same file without waiting for the `Promise`
+             * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended.
+             * @param string A string to write. If something other than a string is supplied it will be coerced to a string.
+             * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+             * @param encoding The expected string encoding.
+             */
+            write(data: any, position?: number | null, encoding?: string | null): Promise<{ bytesWritten: number, buffer: string }>;
+
+            /**
+             * Asynchronously writes data to a file, replacing the file if it already exists. The underlying file will _not_ be closed automatically.
+             * The `FileHandle` must have been opened for writing.
+             * It is unsafe to call `writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected).
+             * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string.
+             * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+             * If `encoding` is not supplied, the default of `'utf8'` is used.
+             * If `mode` is not supplied, the default of `0o666` is used.
+             * If `mode` is a string, it is parsed as an octal integer.
+             * If `flag` is not supplied, the default of `'w'` is used.
+             */
+            writeFile(data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise<void>;
+
+            /**
+             * See `fs.writev` promisified version.
+             */
+            writev(buffers: NodeJS.ArrayBufferView[], position?: number): Promise<WriteVResult>;
+
+            /**
+             * Asynchronous close(2) - close a `FileHandle`.
+             */
+            close(): Promise<void>;
+        }
+
+        /**
+         * Asynchronously tests a user's permissions for the file specified by path.
+         * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function access(path: PathLike, mode?: number): Promise<void>;
+
+        /**
+         * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it already exists.
+         * Node.js makes no guarantees about the atomicity of the copy operation.
+         * If an error occurs after the destination file has been opened for writing, Node.js will attempt
+         * to remove the destination.
+         * @param src A path to the source file.
+         * @param dest A path to the destination file.
+         * @param flags An optional integer that specifies the behavior of the copy operation. The only
+         * supported flag is `fs.constants.COPYFILE_EXCL`, which causes the copy operation to fail if
+         * `dest` already exists.
+         */
+        function copyFile(src: PathLike, dest: PathLike, flags?: number): Promise<void>;
+
+        /**
+         * Asynchronous open(2) - open and possibly create a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not
+         * supplied, defaults to `0o666`.
+         */
+        function open(path: PathLike, flags: string | number, mode?: string | number): Promise<FileHandle>;
+
+        /**
+         * Asynchronously reads data from the file referenced by the supplied `FileHandle`.
+         * @param handle A `FileHandle`.
+         * @param buffer The buffer that the data will be written to.
+         * @param offset The offset in the buffer at which to start writing.
+         * @param length The number of bytes to read.
+         * @param position The offset from the beginning of the file from which data should be read. If
+         * `null`, data will be read from the current position.
+         */
+        function read<TBuffer extends Uint8Array>(
+            handle: FileHandle,
+            buffer: TBuffer,
+            offset?: number | null,
+            length?: number | null,
+            position?: number | null,
+        ): Promise<{ bytesRead: number, buffer: TBuffer }>;
+
+        /**
+         * Asynchronously writes `buffer` to the file referenced by the supplied `FileHandle`.
+         * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise`
+         * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended.
+         * @param handle A `FileHandle`.
+         * @param buffer The buffer that the data will be written to.
+         * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+         * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+         * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+         */
+        function write<TBuffer extends Uint8Array>(
+            handle: FileHandle,
+            buffer: TBuffer,
+            offset?: number | null,
+            length?: number | null, position?: number | null): Promise<{ bytesWritten: number, buffer: TBuffer }>;
+
+        /**
+         * Asynchronously writes `string` to the file referenced by the supplied `FileHandle`.
+         * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise`
+         * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended.
+         * @param handle A `FileHandle`.
+         * @param string A string to write. If something other than a string is supplied it will be coerced to a string.
+         * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+         * @param encoding The expected string encoding.
+         */
+        function write(handle: FileHandle, string: any, position?: number | null, encoding?: string | null): Promise<{ bytesWritten: number, buffer: string }>;
+
+        /**
+         * Asynchronous rename(2) - Change the name or location of a file or directory.
+         * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function rename(oldPath: PathLike, newPath: PathLike): Promise<void>;
+
+        /**
+         * Asynchronous truncate(2) - Truncate a file to a specified length.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param len If not specified, defaults to `0`.
+         */
+        function truncate(path: PathLike, len?: number): Promise<void>;
+
+        /**
+         * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+         * @param handle A `FileHandle`.
+         * @param len If not specified, defaults to `0`.
+         */
+        function ftruncate(handle: FileHandle, len?: number): Promise<void>;
+
+        /**
+         * Asynchronous rmdir(2) - delete a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function rmdir(path: PathLike, options?: RmDirAsyncOptions): Promise<void>;
+
+        /**
+         * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device.
+         * @param handle A `FileHandle`.
+         */
+        function fdatasync(handle: FileHandle): Promise<void>;
+
+        /**
+         * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device.
+         * @param handle A `FileHandle`.
+         */
+        function fsync(handle: FileHandle): Promise<void>;
+
+        /**
+         * Asynchronous mkdir(2) - create a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+         * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+         */
+        function mkdir(path: PathLike, options?: number | string | MakeDirectoryOptions | null): Promise<void>;
+
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function readdir(path: PathLike, options?: { encoding?: BufferEncoding | null; withFileTypes?: false } | BufferEncoding | null): Promise<string[]>;
+
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function readdir(path: PathLike, options: { encoding: "buffer"; withFileTypes?: false } | "buffer"): Promise<Buffer[]>;
+
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function readdir(path: PathLike, options?: { encoding?: string | null; withFileTypes?: false } | string | null): Promise<string[] | Buffer[]>;
+
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
+         */
+        function readdir(path: PathLike, options: { encoding?: string | null; withFileTypes: true }): Promise<Dirent[]>;
+
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function readlink(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise<string>;
+
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function readlink(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise<Buffer>;
+
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function readlink(path: PathLike, options?: { encoding?: string | null } | string | null): Promise<string | Buffer>;
+
+        /**
+         * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+         * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+         * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+         * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+         * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+         */
+        function symlink(target: PathLike, path: PathLike, type?: string | null): Promise<void>;
+
+        /**
+         * Asynchronous fstat(2) - Get file status.
+         * @param handle A `FileHandle`.
+         */
+        function fstat(handle: FileHandle): Promise<Stats>;
+
+        /**
+         * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function lstat(path: PathLike): Promise<Stats>;
+
+        /**
+         * Asynchronous stat(2) - Get file status.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function stat(path: PathLike): Promise<Stats>;
+
+        /**
+         * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+         * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function link(existingPath: PathLike, newPath: PathLike): Promise<void>;
+
+        /**
+         * Asynchronous unlink(2) - delete a name and possibly the file it refers to.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function unlink(path: PathLike): Promise<void>;
+
+        /**
+         * Asynchronous fchmod(2) - Change permissions of a file.
+         * @param handle A `FileHandle`.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function fchmod(handle: FileHandle, mode: string | number): Promise<void>;
+
+        /**
+         * Asynchronous chmod(2) - Change permissions of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function chmod(path: PathLike, mode: string | number): Promise<void>;
+
+        /**
+         * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function lchmod(path: PathLike, mode: string | number): Promise<void>;
+
+        /**
+         * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function lchown(path: PathLike, uid: number, gid: number): Promise<void>;
+
+        /**
+         * Asynchronous fchown(2) - Change ownership of a file.
+         * @param handle A `FileHandle`.
+         */
+        function fchown(handle: FileHandle, uid: number, gid: number): Promise<void>;
+
+        /**
+         * Asynchronous chown(2) - Change ownership of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function chown(path: PathLike, uid: number, gid: number): Promise<void>;
+
+        /**
+         * Asynchronously change file timestamps of the file referenced by the supplied path.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param atime The last access time. If a string is provided, it will be coerced to number.
+         * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+         */
+        function utimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise<void>;
+
+        /**
+         * Asynchronously change file timestamps of the file referenced by the supplied `FileHandle`.
+         * @param handle A `FileHandle`.
+         * @param atime The last access time. If a string is provided, it will be coerced to number.
+         * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+         */
+        function futimes(handle: FileHandle, atime: string | number | Date, mtime: string | number | Date): Promise<void>;
+
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function realpath(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise<string>;
+
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function realpath(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise<Buffer>;
+
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function realpath(path: PathLike, options?: { encoding?: string | null } | string | null): Promise<string | Buffer>;
+
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function mkdtemp(prefix: string, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise<string>;
+
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function mkdtemp(prefix: string, options: { encoding: "buffer" } | "buffer"): Promise<Buffer>;
+
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function mkdtemp(prefix: string, options?: { encoding?: string | null } | string | null): Promise<string | Buffer>;
+
+        /**
+         * Asynchronously writes data to a file, replacing the file if it already exists.
+         * It is unsafe to call `fsPromises.writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected).
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically.
+         * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string.
+         * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+         * If `encoding` is not supplied, the default of `'utf8'` is used.
+         * If `mode` is not supplied, the default of `0o666` is used.
+         * If `mode` is a string, it is parsed as an octal integer.
+         * If `flag` is not supplied, the default of `'w'` is used.
+         */
+        function writeFile(path: PathLike | FileHandle, data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise<void>;
+
+        /**
+         * Asynchronously append data to a file, creating the file if it does not exist.
+         * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically.
+         * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string.
+         * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+         * If `encoding` is not supplied, the default of `'utf8'` is used.
+         * If `mode` is not supplied, the default of `0o666` is used.
+         * If `mode` is a string, it is parsed as an octal integer.
+         * If `flag` is not supplied, the default of `'a'` is used.
+         */
+        function appendFile(path: PathLike | FileHandle, data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise<void>;
+
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically.
+         * @param options An object that may contain an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function readFile(path: PathLike | FileHandle, options?: { encoding?: null, flag?: string | number } | null): Promise<Buffer>;
+
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically.
+         * @param options An object that may contain an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function readFile(path: PathLike | FileHandle, options: { encoding: BufferEncoding, flag?: string | number } | BufferEncoding): Promise<string>;
+
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically.
+         * @param options An object that may contain an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function readFile(path: PathLike | FileHandle, options?: { encoding?: string | null, flag?: string | number } | string | null): Promise<string | Buffer>;
+
+        function opendir(path: string, options?: OpenDirOptions): Promise<Dir>;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/globals.d.ts b/setup-maven/node_modules/@types/node/globals.d.ts
new file mode 100644
index 0000000..d9505f1
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/globals.d.ts
@@ -0,0 +1,1165 @@
+// This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build
+interface Console {
+    Console: NodeJS.ConsoleConstructor;
+    /**
+     * A simple assertion test that verifies whether `value` is truthy.
+     * If it is not, an `AssertionError` is thrown.
+     * If provided, the error `message` is formatted using `util.format()` and used as the error message.
+     */
+    assert(value: any, message?: string, ...optionalParams: any[]): void;
+    /**
+     * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the TTY.
+     * When `stdout` is not a TTY, this method does nothing.
+     */
+    clear(): void;
+    /**
+     * Maintains an internal counter specific to `label` and outputs to `stdout` the number of times `console.count()` has been called with the given `label`.
+     */
+    count(label?: string): void;
+    /**
+     * Resets the internal counter specific to `label`.
+     */
+    countReset(label?: string): void;
+    /**
+     * The `console.debug()` function is an alias for {@link console.log()}.
+     */
+    debug(message?: any, ...optionalParams: any[]): void;
+    /**
+     * Uses {@link util.inspect()} on `obj` and prints the resulting string to `stdout`.
+     * This function bypasses any custom `inspect()` function defined on `obj`.
+     */
+    dir(obj: any, options?: NodeJS.InspectOptions): void;
+    /**
+     * This method calls {@link console.log()} passing it the arguments received. Please note that this method does not produce any XML formatting
+     */
+    dirxml(...data: any[]): void;
+    /**
+     * Prints to `stderr` with newline.
+     */
+    error(message?: any, ...optionalParams: any[]): void;
+    /**
+     * Increases indentation of subsequent lines by two spaces.
+     * If one or more `label`s are provided, those are printed first without the additional indentation.
+     */
+    group(...label: any[]): void;
+    /**
+     * The `console.groupCollapsed()` function is an alias for {@link console.group()}.
+     */
+    groupCollapsed(...label: any[]): void;
+    /**
+     * Decreases indentation of subsequent lines by two spaces.
+     */
+    groupEnd(): void;
+    /**
+     * The {@link console.info()} function is an alias for {@link console.log()}.
+     */
+    info(message?: any, ...optionalParams: any[]): void;
+    /**
+     * Prints to `stdout` with newline.
+     */
+    log(message?: any, ...optionalParams: any[]): void;
+    /**
+     * This method does not display anything unless used in the inspector.
+     *  Prints to `stdout` the array `array` formatted as a table.
+     */
+    table(tabularData: any, properties?: string[]): void;
+    /**
+     * Starts a timer that can be used to compute the duration of an operation. Timers are identified by a unique `label`.
+     */
+    time(label?: string): void;
+    /**
+     * Stops a timer that was previously started by calling {@link console.time()} and prints the result to `stdout`.
+     */
+    timeEnd(label?: string): void;
+    /**
+     * For a timer that was previously started by calling {@link console.time()}, prints the elapsed time and other `data` arguments to `stdout`.
+     */
+    timeLog(label?: string, ...data: any[]): void;
+    /**
+     * Prints to `stderr` the string 'Trace :', followed by the {@link util.format()} formatted message and stack trace to the current position in the code.
+     */
+    trace(message?: any, ...optionalParams: any[]): void;
+    /**
+     * The {@link console.warn()} function is an alias for {@link console.error()}.
+     */
+    warn(message?: any, ...optionalParams: any[]): void;
+
+    // --- Inspector mode only ---
+    /**
+     * This method does not display anything unless used in the inspector.
+     *  The console.markTimeline() method is the deprecated form of console.timeStamp().
+     *
+     * @deprecated Use console.timeStamp() instead.
+     */
+    markTimeline(label?: string): void;
+    /**
+     * This method does not display anything unless used in the inspector.
+     *  Starts a JavaScript CPU profile with an optional label.
+     */
+    profile(label?: string): void;
+    /**
+     * This method does not display anything unless used in the inspector.
+     *  Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector.
+     */
+    profileEnd(label?: string): void;
+    /**
+     * This method does not display anything unless used in the inspector.
+     *  Adds an event with the label `label` to the Timeline panel of the inspector.
+     */
+    timeStamp(label?: string): void;
+    /**
+     * This method does not display anything unless used in the inspector.
+     *  The console.timeline() method is the deprecated form of console.time().
+     *
+     * @deprecated Use console.time() instead.
+     */
+    timeline(label?: string): void;
+    /**
+     * This method does not display anything unless used in the inspector.
+     *  The console.timelineEnd() method is the deprecated form of console.timeEnd().
+     *
+     * @deprecated Use console.timeEnd() instead.
+     */
+    timelineEnd(label?: string): void;
+}
+
+interface Error {
+    stack?: string;
+}
+
+// Declare "static" methods in Error
+interface ErrorConstructor {
+    /** Create .stack property on a target object */
+    captureStackTrace(targetObject: Object, constructorOpt?: Function): void;
+
+    /**
+     * Optional override for formatting stack traces
+     *
+     * @see https://github.com/v8/v8/wiki/Stack%20Trace%20API#customizing-stack-traces
+     */
+    prepareStackTrace?: (err: Error, stackTraces: NodeJS.CallSite[]) => any;
+
+    stackTraceLimit: number;
+}
+
+interface SymbolConstructor {
+    readonly observable: symbol;
+}
+
+// Node.js ESNEXT support
+interface String {
+    /** Removes whitespace from the left end of a string. */
+    trimLeft(): string;
+    /** Removes whitespace from the right end of a string. */
+    trimRight(): string;
+}
+
+interface ImportMeta {
+    url: string;
+}
+
+/*-----------------------------------------------*
+ *                                               *
+ *                   GLOBAL                      *
+ *                                               *
+ ------------------------------------------------*/
+declare var process: NodeJS.Process;
+declare var global: NodeJS.Global;
+declare var console: Console;
+
+declare var __filename: string;
+declare var __dirname: string;
+
+declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout;
+declare namespace setTimeout {
+    function __promisify__(ms: number): Promise<void>;
+    function __promisify__<T>(ms: number, value: T): Promise<T>;
+}
+declare function clearTimeout(timeoutId: NodeJS.Timeout): void;
+declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout;
+declare function clearInterval(intervalId: NodeJS.Timeout): void;
+declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate;
+declare namespace setImmediate {
+    function __promisify__(): Promise<void>;
+    function __promisify__<T>(value: T): Promise<T>;
+}
+declare function clearImmediate(immediateId: NodeJS.Immediate): void;
+
+declare function queueMicrotask(callback: () => void): void;
+
+// TODO: change to `type NodeRequireFunction = (id: string) => any;` in next mayor version.
+interface NodeRequireFunction {
+    /* tslint:disable-next-line:callable-types */
+    (id: string): any;
+}
+
+interface NodeRequireCache {
+    [path: string]: NodeModule;
+}
+
+interface NodeRequire extends NodeRequireFunction {
+    resolve: RequireResolve;
+    cache: NodeRequireCache;
+    /**
+     * @deprecated
+     */
+    extensions: NodeExtensions;
+    main: NodeModule | undefined;
+}
+
+interface RequireResolve {
+    (id: string, options?: { paths?: string[]; }): string;
+    paths(request: string): string[] | null;
+}
+
+interface NodeExtensions {
+    '.js': (m: NodeModule, filename: string) => any;
+    '.json': (m: NodeModule, filename: string) => any;
+    '.node': (m: NodeModule, filename: string) => any;
+    [ext: string]: (m: NodeModule, filename: string) => any;
+}
+
+declare var require: NodeRequire;
+
+interface NodeModule {
+    exports: any;
+    require: NodeRequireFunction;
+    id: string;
+    filename: string;
+    loaded: boolean;
+    parent: NodeModule | null;
+    children: NodeModule[];
+    paths: string[];
+}
+
+declare var module: NodeModule;
+
+// Same as module.exports
+declare var exports: any;
+
+// Buffer class
+type BufferEncoding = "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "latin1" | "binary" | "hex";
+
+interface Buffer {
+    constructor: typeof Buffer;
+}
+
+/**
+ * Raw data is stored in instances of the Buffer class.
+ * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap.  A Buffer cannot be resized.
+ * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'
+ */
+declare class Buffer extends Uint8Array {
+    /**
+     * Allocates a new buffer containing the given {str}.
+     *
+     * @param str String to store in buffer.
+     * @param encoding encoding to use, optional.  Default is 'utf8'
+     * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead.
+     */
+    constructor(str: string, encoding?: BufferEncoding);
+    /**
+     * Allocates a new buffer of {size} octets.
+     *
+     * @param size count of octets to allocate.
+     * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`).
+     */
+    constructor(size: number);
+    /**
+     * Allocates a new buffer containing the given {array} of octets.
+     *
+     * @param array The octets to store.
+     * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead.
+     */
+    constructor(array: Uint8Array);
+    /**
+     * Produces a Buffer backed by the same allocated memory as
+     * the given {ArrayBuffer}/{SharedArrayBuffer}.
+     *
+     *
+     * @param arrayBuffer The ArrayBuffer with which to share memory.
+     * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead.
+     */
+    constructor(arrayBuffer: ArrayBuffer | SharedArrayBuffer);
+    /**
+     * Allocates a new buffer containing the given {array} of octets.
+     *
+     * @param array The octets to store.
+     * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead.
+     */
+    constructor(array: any[]);
+    /**
+     * Copies the passed {buffer} data onto a new {Buffer} instance.
+     *
+     * @param buffer The buffer to copy.
+     * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead.
+     */
+    constructor(buffer: Buffer);
+    /**
+     * When passed a reference to the .buffer property of a TypedArray instance,
+     * the newly created Buffer will share the same allocated memory as the TypedArray.
+     * The optional {byteOffset} and {length} arguments specify a memory range
+     * within the {arrayBuffer} that will be shared by the Buffer.
+     *
+     * @param arrayBuffer The .buffer property of any TypedArray or a new ArrayBuffer()
+     */
+    static from(arrayBuffer: ArrayBuffer | SharedArrayBuffer, byteOffset?: number, length?: number): Buffer;
+    /**
+     * Creates a new Buffer using the passed {data}
+     * @param data data to create a new Buffer
+     */
+    static from(data: number[]): Buffer;
+    static from(data: Uint8Array): Buffer;
+    /**
+     * Creates a new Buffer containing the given JavaScript string {str}.
+     * If provided, the {encoding} parameter identifies the character encoding.
+     * If not provided, {encoding} defaults to 'utf8'.
+     */
+    static from(str: string, encoding?: BufferEncoding): Buffer;
+    /**
+     * Creates a new Buffer using the passed {data}
+     * @param values to create a new Buffer
+     */
+    static of(...items: number[]): Buffer;
+    /**
+     * Returns true if {obj} is a Buffer
+     *
+     * @param obj object to test.
+     */
+    static isBuffer(obj: any): obj is Buffer;
+    /**
+     * Returns true if {encoding} is a valid encoding argument.
+     * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'
+     *
+     * @param encoding string to test.
+     */
+    static isEncoding(encoding: string): encoding is BufferEncoding;
+    /**
+     * Gives the actual byte length of a string. encoding defaults to 'utf8'.
+     * This is not the same as String.prototype.length since that returns the number of characters in a string.
+     *
+     * @param string string to test.
+     * @param encoding encoding used to evaluate (defaults to 'utf8')
+     */
+    static byteLength(
+        string: string | NodeJS.ArrayBufferView | ArrayBuffer | SharedArrayBuffer,
+        encoding?: BufferEncoding
+    ): number;
+    /**
+     * Returns a buffer which is the result of concatenating all the buffers in the list together.
+     *
+     * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer.
+     * If the list has exactly one item, then the first item of the list is returned.
+     * If the list has more than one item, then a new Buffer is created.
+     *
+     * @param list An array of Buffer objects to concatenate
+     * @param totalLength Total length of the buffers when concatenated.
+     *   If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly.
+     */
+    static concat(list: Uint8Array[], totalLength?: number): Buffer;
+    /**
+     * The same as buf1.compare(buf2).
+     */
+    static compare(buf1: Uint8Array, buf2: Uint8Array): number;
+    /**
+     * Allocates a new buffer of {size} octets.
+     *
+     * @param size count of octets to allocate.
+     * @param fill if specified, buffer will be initialized by calling buf.fill(fill).
+     *    If parameter is omitted, buffer will be filled with zeros.
+     * @param encoding encoding used for call to buf.fill while initalizing
+     */
+    static alloc(size: number, fill?: string | Buffer | number, encoding?: BufferEncoding): Buffer;
+    /**
+     * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents
+     * of the newly created Buffer are unknown and may contain sensitive data.
+     *
+     * @param size count of octets to allocate
+     */
+    static allocUnsafe(size: number): Buffer;
+    /**
+     * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents
+     * of the newly created Buffer are unknown and may contain sensitive data.
+     *
+     * @param size count of octets to allocate
+     */
+    static allocUnsafeSlow(size: number): Buffer;
+    /**
+     * This is the number of bytes used to determine the size of pre-allocated, internal Buffer instances used for pooling. This value may be modified.
+     */
+    static poolSize: number;
+
+    write(string: string, encoding?: BufferEncoding): number;
+    write(string: string, offset: number, encoding?: BufferEncoding): number;
+    write(string: string, offset: number, length: number, encoding?: BufferEncoding): number;
+    toString(encoding?: string, start?: number, end?: number): string;
+    toJSON(): { type: 'Buffer'; data: number[] };
+    equals(otherBuffer: Uint8Array): boolean;
+    compare(
+        otherBuffer: Uint8Array,
+        targetStart?: number,
+        targetEnd?: number,
+        sourceStart?: number,
+        sourceEnd?: number
+    ): number;
+    copy(targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
+    /**
+     * Returns a new `Buffer` that references **the same memory as the original**, but offset and cropped by the start and end indices.
+     *
+     * This method is incompatible with `Uint8Array#slice()`, which returns a copy of the original memory.
+     *
+     * @param begin Where the new `Buffer` will start. Default: `0`.
+     * @param end Where the new `Buffer` will end (not inclusive). Default: `buf.length`.
+     */
+    slice(begin?: number, end?: number): Buffer;
+    /**
+     * Returns a new `Buffer` that references **the same memory as the original**, but offset and cropped by the start and end indices.
+     *
+     * This method is compatible with `Uint8Array#subarray()`.
+     *
+     * @param begin Where the new `Buffer` will start. Default: `0`.
+     * @param end Where the new `Buffer` will end (not inclusive). Default: `buf.length`.
+     */
+    subarray(begin?: number, end?: number): Buffer;
+    writeUIntLE(value: number, offset: number, byteLength: number): number;
+    writeUIntBE(value: number, offset: number, byteLength: number): number;
+    writeIntLE(value: number, offset: number, byteLength: number): number;
+    writeIntBE(value: number, offset: number, byteLength: number): number;
+    readUIntLE(offset: number, byteLength: number): number;
+    readUIntBE(offset: number, byteLength: number): number;
+    readIntLE(offset: number, byteLength: number): number;
+    readIntBE(offset: number, byteLength: number): number;
+    readUInt8(offset: number): number;
+    readUInt16LE(offset: number): number;
+    readUInt16BE(offset: number): number;
+    readUInt32LE(offset: number): number;
+    readUInt32BE(offset: number): number;
+    readInt8(offset: number): number;
+    readInt16LE(offset: number): number;
+    readInt16BE(offset: number): number;
+    readInt32LE(offset: number): number;
+    readInt32BE(offset: number): number;
+    readFloatLE(offset: number): number;
+    readFloatBE(offset: number): number;
+    readDoubleLE(offset: number): number;
+    readDoubleBE(offset: number): number;
+    reverse(): this;
+    swap16(): Buffer;
+    swap32(): Buffer;
+    swap64(): Buffer;
+    writeUInt8(value: number, offset: number): number;
+    writeUInt16LE(value: number, offset: number): number;
+    writeUInt16BE(value: number, offset: number): number;
+    writeUInt32LE(value: number, offset: number): number;
+    writeUInt32BE(value: number, offset: number): number;
+    writeInt8(value: number, offset: number): number;
+    writeInt16LE(value: number, offset: number): number;
+    writeInt16BE(value: number, offset: number): number;
+    writeInt32LE(value: number, offset: number): number;
+    writeInt32BE(value: number, offset: number): number;
+    writeFloatLE(value: number, offset: number): number;
+    writeFloatBE(value: number, offset: number): number;
+    writeDoubleLE(value: number, offset: number): number;
+    writeDoubleBE(value: number, offset: number): number;
+
+    fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this;
+
+    indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
+    lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
+    entries(): IterableIterator<[number, number]>;
+    includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean;
+    keys(): IterableIterator<number>;
+    values(): IterableIterator<number>;
+}
+
+/*----------------------------------------------*
+*                                               *
+*               GLOBAL INTERFACES               *
+*                                               *
+*-----------------------------------------------*/
+declare namespace NodeJS {
+    interface InspectOptions {
+        /**
+         * If set to `true`, getters are going to be
+         * inspected as well. If set to `'get'` only getters without setter are going
+         * to be inspected. If set to `'set'` only getters having a corresponding
+         * setter are going to be inspected. This might cause side effects depending on
+         * the getter function.
+         * @default `false`
+         */
+        getters?: 'get' | 'set' | boolean;
+        showHidden?: boolean;
+        /**
+         * @default 2
+         */
+        depth?: number | null;
+        colors?: boolean;
+        customInspect?: boolean;
+        showProxy?: boolean;
+        maxArrayLength?: number | null;
+        breakLength?: number;
+        /**
+         * Setting this to `false` causes each object key
+         * to be displayed on a new line. It will also add new lines to text that is
+         * longer than `breakLength`. If set to a number, the most `n` inner elements
+         * are united on a single line as long as all properties fit into
+         * `breakLength`. Short array elements are also grouped together. Note that no
+         * text will be reduced below 16 characters, no matter the `breakLength` size.
+         * For more information, see the example below.
+         * @default `true`
+         */
+        compact?: boolean | number;
+        sorted?: boolean | ((a: string, b: string) => number);
+    }
+
+    interface ConsoleConstructorOptions {
+        stdout: WritableStream;
+        stderr?: WritableStream;
+        ignoreErrors?: boolean;
+        colorMode?: boolean | 'auto';
+        inspectOptions?: InspectOptions;
+    }
+
+    interface ConsoleConstructor {
+        prototype: Console;
+        new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console;
+        new(options: ConsoleConstructorOptions): Console;
+    }
+
+    interface CallSite {
+        /**
+         * Value of "this"
+         */
+        getThis(): any;
+
+        /**
+         * Type of "this" as a string.
+         * This is the name of the function stored in the constructor field of
+         * "this", if available.  Otherwise the object's [[Class]] internal
+         * property.
+         */
+        getTypeName(): string | null;
+
+        /**
+         * Current function
+         */
+        getFunction(): Function | undefined;
+
+        /**
+         * Name of the current function, typically its name property.
+         * If a name property is not available an attempt will be made to try
+         * to infer a name from the function's context.
+         */
+        getFunctionName(): string | null;
+
+        /**
+         * Name of the property [of "this" or one of its prototypes] that holds
+         * the current function
+         */
+        getMethodName(): string | null;
+
+        /**
+         * Name of the script [if this function was defined in a script]
+         */
+        getFileName(): string | null;
+
+        /**
+         * Current line number [if this function was defined in a script]
+         */
+        getLineNumber(): number | null;
+
+        /**
+         * Current column number [if this function was defined in a script]
+         */
+        getColumnNumber(): number | null;
+
+        /**
+         * A call site object representing the location where eval was called
+         * [if this function was created using a call to eval]
+         */
+        getEvalOrigin(): string | undefined;
+
+        /**
+         * Is this a toplevel invocation, that is, is "this" the global object?
+         */
+        isToplevel(): boolean;
+
+        /**
+         * Does this call take place in code defined by a call to eval?
+         */
+        isEval(): boolean;
+
+        /**
+         * Is this call in native V8 code?
+         */
+        isNative(): boolean;
+
+        /**
+         * Is this a constructor call?
+         */
+        isConstructor(): boolean;
+    }
+
+    interface ErrnoException extends Error {
+        errno?: number;
+        code?: string;
+        path?: string;
+        syscall?: string;
+        stack?: string;
+    }
+
+    class EventEmitter {
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        off(event: string | symbol, listener: (...args: any[]) => void): this;
+        removeAllListeners(event?: string | symbol): this;
+        setMaxListeners(n: number): this;
+        getMaxListeners(): number;
+        listeners(event: string | symbol): Function[];
+        rawListeners(event: string | symbol): Function[];
+        emit(event: string | symbol, ...args: any[]): boolean;
+        listenerCount(type: string | symbol): number;
+        // Added in Node 6...
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        eventNames(): Array<string | symbol>;
+    }
+
+    interface ReadableStream extends EventEmitter {
+        readable: boolean;
+        read(size?: number): string | Buffer;
+        setEncoding(encoding: string): this;
+        pause(): this;
+        resume(): this;
+        isPaused(): boolean;
+        pipe<T extends WritableStream>(destination: T, options?: { end?: boolean; }): T;
+        unpipe(destination?: WritableStream): this;
+        unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void;
+        wrap(oldStream: ReadableStream): this;
+        [Symbol.asyncIterator](): AsyncIterableIterator<string | Buffer>;
+    }
+
+    interface WritableStream extends EventEmitter {
+        writable: boolean;
+        write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean;
+        write(str: string, encoding?: string, cb?: (err?: Error | null) => void): boolean;
+        end(cb?: () => void): void;
+        end(data: string | Uint8Array, cb?: () => void): void;
+        end(str: string, encoding?: string, cb?: () => void): void;
+    }
+
+    interface ReadWriteStream extends ReadableStream, WritableStream { }
+
+    interface Domain extends EventEmitter {
+        run<T>(fn: (...args: any[]) => T, ...args: any[]): T;
+        add(emitter: EventEmitter | Timer): void;
+        remove(emitter: EventEmitter | Timer): void;
+        bind<T extends Function>(cb: T): T;
+        intercept<T extends Function>(cb: T): T;
+
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        on(event: string, listener: (...args: any[]) => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        removeListener(event: string, listener: (...args: any[]) => void): this;
+        removeAllListeners(event?: string): this;
+    }
+
+    interface MemoryUsage {
+        rss: number;
+        heapTotal: number;
+        heapUsed: number;
+        external: number;
+    }
+
+    interface CpuUsage {
+        user: number;
+        system: number;
+    }
+
+    interface ProcessRelease {
+        name: string;
+        sourceUrl?: string;
+        headersUrl?: string;
+        libUrl?: string;
+        lts?: string;
+    }
+
+    interface ProcessVersions {
+        http_parser: string;
+        node: string;
+        v8: string;
+        ares: string;
+        uv: string;
+        zlib: string;
+        modules: string;
+        openssl: string;
+    }
+
+    type Platform = 'aix'
+        | 'android'
+        | 'darwin'
+        | 'freebsd'
+        | 'linux'
+        | 'openbsd'
+        | 'sunos'
+        | 'win32'
+        | 'cygwin'
+        | 'netbsd';
+
+    type Signals =
+        "SIGABRT" | "SIGALRM" | "SIGBUS" | "SIGCHLD" | "SIGCONT" | "SIGFPE" | "SIGHUP" | "SIGILL" | "SIGINT" | "SIGIO" |
+        "SIGIOT" | "SIGKILL" | "SIGPIPE" | "SIGPOLL" | "SIGPROF" | "SIGPWR" | "SIGQUIT" | "SIGSEGV" | "SIGSTKFLT" |
+        "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" |
+        "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO";
+
+    type MultipleResolveType = 'resolve' | 'reject';
+
+    type BeforeExitListener = (code: number) => void;
+    type DisconnectListener = () => void;
+    type ExitListener = (code: number) => void;
+    type RejectionHandledListener = (promise: Promise<any>) => void;
+    type UncaughtExceptionListener = (error: Error) => void;
+    type UnhandledRejectionListener = (reason: {} | null | undefined, promise: Promise<any>) => void;
+    type WarningListener = (warning: Error) => void;
+    type MessageListener = (message: any, sendHandle: any) => void;
+    type SignalsListener = (signal: Signals) => void;
+    type NewListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void;
+    type RemoveListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void;
+    type MultipleResolveListener = (type: MultipleResolveType, promise: Promise<any>, value: any) => void;
+
+    interface Socket extends ReadWriteStream {
+        isTTY?: true;
+    }
+
+    interface ProcessEnv {
+        [key: string]: string | undefined;
+    }
+
+    interface HRTime {
+        (time?: [number, number]): [number, number];
+    }
+
+    interface ProcessReport {
+        /**
+         * Directory where the report is written.
+         * working directory of the Node.js process.
+         * @default '' indicating that reports are written to the current
+         */
+        directory: string;
+
+        /**
+         * Filename where the report is written.
+         * The default value is the empty string.
+         * @default '' the output filename will be comprised of a timestamp,
+         * PID, and sequence number.
+         */
+        filename: string;
+
+        /**
+         * Returns a JSON-formatted diagnostic report for the running process.
+         * The report's JavaScript stack trace is taken from err, if present.
+         */
+        getReport(err?: Error): string;
+
+        /**
+         * If true, a diagnostic report is generated on fatal errors,
+         * such as out of memory errors or failed C++ assertions.
+         * @default false
+         */
+        reportOnFatalError: boolean;
+
+        /**
+         * If true, a diagnostic report is generated when the process
+         * receives the signal specified by process.report.signal.
+         * @defaul false
+         */
+        reportOnSignal: boolean;
+
+        /**
+         * If true, a diagnostic report is generated on uncaught exception.
+         * @default false
+         */
+        reportOnUncaughtException: boolean;
+
+        /**
+         * The signal used to trigger the creation of a diagnostic report.
+         * @default 'SIGUSR2'
+         */
+        signal: Signals;
+
+        /**
+         * Writes a diagnostic report to a file. If filename is not provided, the default filename
+         * includes the date, time, PID, and a sequence number.
+         * The report's JavaScript stack trace is taken from err, if present.
+         *
+         * @param fileName Name of the file where the report is written.
+         * This should be a relative path, that will be appended to the directory specified in
+         * `process.report.directory`, or the current working directory of the Node.js process,
+         * if unspecified.
+         * @param error A custom error used for reporting the JavaScript stack.
+         * @return Filename of the generated report.
+         */
+        writeReport(fileName?: string): string;
+        writeReport(error?: Error): string;
+        writeReport(fileName?: string, err?: Error): string;
+    }
+
+    interface ResourceUsage {
+        fsRead: number;
+        fsWrite: number;
+        involuntaryContextSwitches: number;
+        ipcReceived: number;
+        ipcSent: number;
+        majorPageFault: number;
+        maxRSS: number;
+        minorPageFault: number;
+        sharedMemorySize: number;
+        signalsCount: number;
+        swappedOut: number;
+        systemCPUTime: number;
+        unsharedDataSize: number;
+        unsharedStackSize: number;
+        userCPUTime: number;
+        voluntaryContextSwitches: number;
+    }
+
+    interface Process extends EventEmitter {
+        /**
+         * Can also be a tty.WriteStream, not typed due to limitation.s
+         */
+        stdout: WriteStream;
+        /**
+         * Can also be a tty.WriteStream, not typed due to limitation.s
+         */
+        stderr: WriteStream;
+        stdin: ReadStream;
+        openStdin(): Socket;
+        argv: string[];
+        argv0: string;
+        execArgv: string[];
+        execPath: string;
+        abort(): void;
+        chdir(directory: string): void;
+        cwd(): string;
+        debugPort: number;
+        emitWarning(warning: string | Error, name?: string, ctor?: Function): void;
+        env: ProcessEnv;
+        exit(code?: number): never;
+        exitCode?: number;
+        getgid(): number;
+        setgid(id: number | string): void;
+        getuid(): number;
+        setuid(id: number | string): void;
+        geteuid(): number;
+        seteuid(id: number | string): void;
+        getegid(): number;
+        setegid(id: number | string): void;
+        getgroups(): number[];
+        setgroups(groups: Array<string | number>): void;
+        setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void;
+        hasUncaughtExceptionCaptureCallback(): boolean;
+        version: string;
+        versions: ProcessVersions;
+        config: {
+            target_defaults: {
+                cflags: any[];
+                default_configuration: string;
+                defines: string[];
+                include_dirs: string[];
+                libraries: string[];
+            };
+            variables: {
+                clang: number;
+                host_arch: string;
+                node_install_npm: boolean;
+                node_install_waf: boolean;
+                node_prefix: string;
+                node_shared_openssl: boolean;
+                node_shared_v8: boolean;
+                node_shared_zlib: boolean;
+                node_use_dtrace: boolean;
+                node_use_etw: boolean;
+                node_use_openssl: boolean;
+                target_arch: string;
+                v8_no_strict_aliasing: number;
+                v8_use_snapshot: boolean;
+                visibility: string;
+            };
+        };
+        kill(pid: number, signal?: string | number): void;
+        pid: number;
+        ppid: number;
+        title: string;
+        arch: string;
+        platform: Platform;
+        mainModule?: NodeModule;
+        memoryUsage(): MemoryUsage;
+        cpuUsage(previousValue?: CpuUsage): CpuUsage;
+        nextTick(callback: Function, ...args: any[]): void;
+        release: ProcessRelease;
+        features: {
+            inspector: boolean;
+            debug: boolean;
+            uv: boolean;
+            ipv6: boolean;
+            tls_alpn: boolean;
+            tls_sni: boolean;
+            tls_ocsp: boolean;
+            tls: boolean;
+        };
+        /**
+         * Can only be set if not in worker thread.
+         */
+        umask(mask?: number): number;
+        uptime(): number;
+        hrtime: HRTime;
+        domain: Domain;
+
+        // Worker
+        send?(message: any, sendHandle?: any, options?: { swallowErrors?: boolean}, callback?: (error: Error | null) => void): boolean;
+        disconnect(): void;
+        connected: boolean;
+
+        /**
+         * The `process.allowedNodeEnvironmentFlags` property is a special,
+         * read-only `Set` of flags allowable within the [`NODE_OPTIONS`][]
+         * environment variable.
+         */
+        allowedNodeEnvironmentFlags: ReadonlySet<string>;
+
+        /**
+         * Only available with `--experimental-report`
+         */
+        report?: ProcessReport;
+
+        resourceUsage(): ResourceUsage;
+
+        /**
+         * EventEmitter
+         *   1. beforeExit
+         *   2. disconnect
+         *   3. exit
+         *   4. message
+         *   5. rejectionHandled
+         *   6. uncaughtException
+         *   7. unhandledRejection
+         *   8. warning
+         *   9. message
+         *  10. <All OS Signals>
+         *  11. newListener/removeListener inherited from EventEmitter
+         */
+        addListener(event: "beforeExit", listener: BeforeExitListener): this;
+        addListener(event: "disconnect", listener: DisconnectListener): this;
+        addListener(event: "exit", listener: ExitListener): this;
+        addListener(event: "rejectionHandled", listener: RejectionHandledListener): this;
+        addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this;
+        addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this;
+        addListener(event: "warning", listener: WarningListener): this;
+        addListener(event: "message", listener: MessageListener): this;
+        addListener(event: Signals, listener: SignalsListener): this;
+        addListener(event: "newListener", listener: NewListenerListener): this;
+        addListener(event: "removeListener", listener: RemoveListenerListener): this;
+        addListener(event: "multipleResolves", listener: MultipleResolveListener): this;
+
+        emit(event: "beforeExit", code: number): boolean;
+        emit(event: "disconnect"): boolean;
+        emit(event: "exit", code: number): boolean;
+        emit(event: "rejectionHandled", promise: Promise<any>): boolean;
+        emit(event: "uncaughtException", error: Error): boolean;
+        emit(event: "unhandledRejection", reason: any, promise: Promise<any>): boolean;
+        emit(event: "warning", warning: Error): boolean;
+        emit(event: "message", message: any, sendHandle: any): this;
+        emit(event: Signals, signal: Signals): boolean;
+        emit(event: "newListener", eventName: string | symbol, listener: (...args: any[]) => void): this;
+        emit(event: "removeListener", eventName: string, listener: (...args: any[]) => void): this;
+        emit(event: "multipleResolves", listener: MultipleResolveListener): this;
+
+        on(event: "beforeExit", listener: BeforeExitListener): this;
+        on(event: "disconnect", listener: DisconnectListener): this;
+        on(event: "exit", listener: ExitListener): this;
+        on(event: "rejectionHandled", listener: RejectionHandledListener): this;
+        on(event: "uncaughtException", listener: UncaughtExceptionListener): this;
+        on(event: "unhandledRejection", listener: UnhandledRejectionListener): this;
+        on(event: "warning", listener: WarningListener): this;
+        on(event: "message", listener: MessageListener): this;
+        on(event: Signals, listener: SignalsListener): this;
+        on(event: "newListener", listener: NewListenerListener): this;
+        on(event: "removeListener", listener: RemoveListenerListener): this;
+        on(event: "multipleResolves", listener: MultipleResolveListener): this;
+
+        once(event: "beforeExit", listener: BeforeExitListener): this;
+        once(event: "disconnect", listener: DisconnectListener): this;
+        once(event: "exit", listener: ExitListener): this;
+        once(event: "rejectionHandled", listener: RejectionHandledListener): this;
+        once(event: "uncaughtException", listener: UncaughtExceptionListener): this;
+        once(event: "unhandledRejection", listener: UnhandledRejectionListener): this;
+        once(event: "warning", listener: WarningListener): this;
+        once(event: "message", listener: MessageListener): this;
+        once(event: Signals, listener: SignalsListener): this;
+        once(event: "newListener", listener: NewListenerListener): this;
+        once(event: "removeListener", listener: RemoveListenerListener): this;
+        once(event: "multipleResolves", listener: MultipleResolveListener): this;
+
+        prependListener(event: "beforeExit", listener: BeforeExitListener): this;
+        prependListener(event: "disconnect", listener: DisconnectListener): this;
+        prependListener(event: "exit", listener: ExitListener): this;
+        prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this;
+        prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this;
+        prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this;
+        prependListener(event: "warning", listener: WarningListener): this;
+        prependListener(event: "message", listener: MessageListener): this;
+        prependListener(event: Signals, listener: SignalsListener): this;
+        prependListener(event: "newListener", listener: NewListenerListener): this;
+        prependListener(event: "removeListener", listener: RemoveListenerListener): this;
+        prependListener(event: "multipleResolves", listener: MultipleResolveListener): this;
+
+        prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this;
+        prependOnceListener(event: "disconnect", listener: DisconnectListener): this;
+        prependOnceListener(event: "exit", listener: ExitListener): this;
+        prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this;
+        prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this;
+        prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this;
+        prependOnceListener(event: "warning", listener: WarningListener): this;
+        prependOnceListener(event: "message", listener: MessageListener): this;
+        prependOnceListener(event: Signals, listener: SignalsListener): this;
+        prependOnceListener(event: "newListener", listener: NewListenerListener): this;
+        prependOnceListener(event: "removeListener", listener: RemoveListenerListener): this;
+        prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this;
+
+        listeners(event: "beforeExit"): BeforeExitListener[];
+        listeners(event: "disconnect"): DisconnectListener[];
+        listeners(event: "exit"): ExitListener[];
+        listeners(event: "rejectionHandled"): RejectionHandledListener[];
+        listeners(event: "uncaughtException"): UncaughtExceptionListener[];
+        listeners(event: "unhandledRejection"): UnhandledRejectionListener[];
+        listeners(event: "warning"): WarningListener[];
+        listeners(event: "message"): MessageListener[];
+        listeners(event: Signals): SignalsListener[];
+        listeners(event: "newListener"): NewListenerListener[];
+        listeners(event: "removeListener"): RemoveListenerListener[];
+        listeners(event: "multipleResolves"): MultipleResolveListener[];
+    }
+
+    interface Global {
+        Array: typeof Array;
+        ArrayBuffer: typeof ArrayBuffer;
+        Boolean: typeof Boolean;
+        Buffer: typeof Buffer;
+        DataView: typeof DataView;
+        Date: typeof Date;
+        Error: typeof Error;
+        EvalError: typeof EvalError;
+        Float32Array: typeof Float32Array;
+        Float64Array: typeof Float64Array;
+        Function: typeof Function;
+        GLOBAL: Global;
+        Infinity: typeof Infinity;
+        Int16Array: typeof Int16Array;
+        Int32Array: typeof Int32Array;
+        Int8Array: typeof Int8Array;
+        Intl: typeof Intl;
+        JSON: typeof JSON;
+        Map: MapConstructor;
+        Math: typeof Math;
+        NaN: typeof NaN;
+        Number: typeof Number;
+        Object: typeof Object;
+        Promise: Function;
+        RangeError: typeof RangeError;
+        ReferenceError: typeof ReferenceError;
+        RegExp: typeof RegExp;
+        Set: SetConstructor;
+        String: typeof String;
+        Symbol: Function;
+        SyntaxError: typeof SyntaxError;
+        TypeError: typeof TypeError;
+        URIError: typeof URIError;
+        Uint16Array: typeof Uint16Array;
+        Uint32Array: typeof Uint32Array;
+        Uint8Array: typeof Uint8Array;
+        Uint8ClampedArray: Function;
+        WeakMap: WeakMapConstructor;
+        WeakSet: WeakSetConstructor;
+        clearImmediate: (immediateId: Immediate) => void;
+        clearInterval: (intervalId: Timeout) => void;
+        clearTimeout: (timeoutId: Timeout) => void;
+        console: typeof console;
+        decodeURI: typeof decodeURI;
+        decodeURIComponent: typeof decodeURIComponent;
+        encodeURI: typeof encodeURI;
+        encodeURIComponent: typeof encodeURIComponent;
+        escape: (str: string) => string;
+        eval: typeof eval;
+        global: Global;
+        isFinite: typeof isFinite;
+        isNaN: typeof isNaN;
+        parseFloat: typeof parseFloat;
+        parseInt: typeof parseInt;
+        process: Process;
+        root: Global;
+        setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => Immediate;
+        setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout;
+        setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout;
+        queueMicrotask: typeof queueMicrotask;
+        undefined: typeof undefined;
+        unescape: (str: string) => string;
+        gc: () => void;
+        v8debug?: any;
+    }
+
+    // compatibility with older typings
+    interface Timer {
+        hasRef(): boolean;
+        ref(): this;
+        refresh(): this;
+        unref(): this;
+    }
+
+    class Immediate {
+        hasRef(): boolean;
+        ref(): this;
+        unref(): this;
+        _onImmediate: Function; // to distinguish it from the Timeout class
+    }
+
+    class Timeout implements Timer {
+        hasRef(): boolean;
+        ref(): this;
+        refresh(): this;
+        unref(): this;
+    }
+
+    class Module {
+        static runMain(): void;
+        static wrap(code: string): string;
+
+        /**
+         * @deprecated Deprecated since: v12.2.0. Please use createRequire() instead.
+         */
+        static createRequireFromPath(path: string): NodeRequire;
+        static createRequire(path: string): NodeRequire;
+        static builtinModules: string[];
+
+        static Module: typeof Module;
+
+        exports: any;
+        require: NodeRequireFunction;
+        id: string;
+        filename: string;
+        loaded: boolean;
+        parent: Module | null;
+        children: Module[];
+        paths: string[];
+
+        constructor(id: string, parent?: Module);
+    }
+
+    type TypedArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array;
+    type ArrayBufferView = TypedArray | DataView;
+
+    // The value type here is a "poor man's `unknown`". When these types support TypeScript
+    // 3.0+, we can replace this with `unknown`.
+    type PoorMansUnknown = {} | null | undefined;
+}
diff --git a/setup-maven/node_modules/@types/node/http.d.ts b/setup-maven/node_modules/@types/node/http.d.ts
new file mode 100644
index 0000000..139a9fb
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/http.d.ts
@@ -0,0 +1,371 @@
+declare module "http" {
+    import * as events from "events";
+    import * as stream from "stream";
+    import { URL } from "url";
+    import { Socket, Server as NetServer } from "net";
+
+    // incoming headers will never contain number
+    interface IncomingHttpHeaders {
+        'accept'?: string;
+        'accept-language'?: string;
+        'accept-patch'?: string;
+        'accept-ranges'?: string;
+        'access-control-allow-credentials'?: string;
+        'access-control-allow-headers'?: string;
+        'access-control-allow-methods'?: string;
+        'access-control-allow-origin'?: string;
+        'access-control-expose-headers'?: string;
+        'access-control-max-age'?: string;
+        'age'?: string;
+        'allow'?: string;
+        'alt-svc'?: string;
+        'authorization'?: string;
+        'cache-control'?: string;
+        'connection'?: string;
+        'content-disposition'?: string;
+        'content-encoding'?: string;
+        'content-language'?: string;
+        'content-length'?: string;
+        'content-location'?: string;
+        'content-range'?: string;
+        'content-type'?: string;
+        'cookie'?: string;
+        'date'?: string;
+        'expect'?: string;
+        'expires'?: string;
+        'forwarded'?: string;
+        'from'?: string;
+        'host'?: string;
+        'if-match'?: string;
+        'if-modified-since'?: string;
+        'if-none-match'?: string;
+        'if-unmodified-since'?: string;
+        'last-modified'?: string;
+        'location'?: string;
+        'pragma'?: string;
+        'proxy-authenticate'?: string;
+        'proxy-authorization'?: string;
+        'public-key-pins'?: string;
+        'range'?: string;
+        'referer'?: string;
+        'retry-after'?: string;
+        'set-cookie'?: string[];
+        'strict-transport-security'?: string;
+        'tk'?: string;
+        'trailer'?: string;
+        'transfer-encoding'?: string;
+        'upgrade'?: string;
+        'user-agent'?: string;
+        'vary'?: string;
+        'via'?: string;
+        'warning'?: string;
+        'www-authenticate'?: string;
+        [header: string]: string | string[] | undefined;
+    }
+
+    // outgoing headers allows numbers (as they are converted internally to strings)
+    interface OutgoingHttpHeaders {
+        [header: string]: number | string | string[] | undefined;
+    }
+
+    interface ClientRequestArgs {
+        protocol?: string | null;
+        host?: string | null;
+        hostname?: string | null;
+        family?: number;
+        port?: number | string | null;
+        defaultPort?: number | string;
+        localAddress?: string;
+        socketPath?: string;
+        method?: string;
+        path?: string | null;
+        headers?: OutgoingHttpHeaders;
+        auth?: string | null;
+        agent?: Agent | boolean;
+        _defaultAgent?: Agent;
+        timeout?: number;
+        setHost?: boolean;
+        // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278
+        createConnection?: (options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket;
+    }
+
+    interface ServerOptions {
+        IncomingMessage?: typeof IncomingMessage;
+        ServerResponse?: typeof ServerResponse;
+    }
+
+    type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;
+
+    class Server extends NetServer {
+        constructor(requestListener?: RequestListener);
+        constructor(options: ServerOptions, requestListener?: RequestListener);
+
+        setTimeout(msecs?: number, callback?: () => void): this;
+        setTimeout(callback: () => void): this;
+        /**
+         * Limits maximum incoming headers count. If set to 0, no limit will be applied.
+         * @default 2000
+         * {@link https://nodejs.org/api/http.html#http_server_maxheaderscount}
+         */
+        maxHeadersCount: number | null;
+        timeout: number;
+        /**
+         * Limit the amount of time the parser will wait to receive the complete HTTP headers.
+         * @default 40000
+         * {@link https://nodejs.org/api/http.html#http_server_headerstimeout}
+         */
+        headersTimeout: number;
+        keepAliveTimeout: number;
+    }
+
+    // https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js
+    class OutgoingMessage extends stream.Writable {
+        upgrading: boolean;
+        chunkedEncoding: boolean;
+        shouldKeepAlive: boolean;
+        useChunkedEncodingByDefault: boolean;
+        sendDate: boolean;
+        finished: boolean;
+        headersSent: boolean;
+        connection: Socket;
+
+        constructor();
+
+        setTimeout(msecs: number, callback?: () => void): this;
+        setHeader(name: string, value: number | string | string[]): void;
+        getHeader(name: string): number | string | string[] | undefined;
+        getHeaders(): OutgoingHttpHeaders;
+        getHeaderNames(): string[];
+        hasHeader(name: string): boolean;
+        removeHeader(name: string): void;
+        addTrailers(headers: OutgoingHttpHeaders | Array<[string, string]>): void;
+        flushHeaders(): void;
+    }
+
+    // https://github.com/nodejs/node/blob/master/lib/_http_server.js#L108-L256
+    class ServerResponse extends OutgoingMessage {
+        statusCode: number;
+        statusMessage: string;
+        writableFinished: boolean;
+
+        constructor(req: IncomingMessage);
+
+        assignSocket(socket: Socket): void;
+        detachSocket(socket: Socket): void;
+        // https://github.com/nodejs/node/blob/master/test/parallel/test-http-write-callbacks.js#L53
+        // no args in writeContinue callback
+        writeContinue(callback?: () => void): void;
+        writeHead(statusCode: number, reasonPhrase?: string, headers?: OutgoingHttpHeaders): this;
+        writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
+        writeProcessing(): void;
+    }
+
+    interface InformationEvent {
+        statusCode: number;
+        statusMessage: string;
+        httpVersion: string;
+        httpVersionMajor: number;
+        httpVersionMinor: number;
+        headers: IncomingHttpHeaders;
+        rawHeaders: string[];
+    }
+
+    // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L77
+    class ClientRequest extends OutgoingMessage {
+        connection: Socket;
+        socket: Socket;
+        aborted: number;
+
+        constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void);
+
+        readonly path: string;
+        abort(): void;
+        onSocket(socket: Socket): void;
+        setTimeout(timeout: number, callback?: () => void): this;
+        setNoDelay(noDelay?: boolean): void;
+        setSocketKeepAlive(enable?: boolean, initialDelay?: number): void;
+
+        addListener(event: 'abort', listener: () => void): this;
+        addListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        addListener(event: 'continue', listener: () => void): this;
+        addListener(event: 'information', listener: (info: InformationEvent) => void): this;
+        addListener(event: 'response', listener: (response: IncomingMessage) => void): this;
+        addListener(event: 'socket', listener: (socket: Socket) => void): this;
+        addListener(event: 'timeout', listener: () => void): this;
+        addListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        addListener(event: 'close', listener: () => void): this;
+        addListener(event: 'drain', listener: () => void): this;
+        addListener(event: 'error', listener: (err: Error) => void): this;
+        addListener(event: 'finish', listener: () => void): this;
+        addListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+        addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        on(event: 'abort', listener: () => void): this;
+        on(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        on(event: 'continue', listener: () => void): this;
+        on(event: 'information', listener: (info: InformationEvent) => void): this;
+        on(event: 'response', listener: (response: IncomingMessage) => void): this;
+        on(event: 'socket', listener: (socket: Socket) => void): this;
+        on(event: 'timeout', listener: () => void): this;
+        on(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        on(event: 'close', listener: () => void): this;
+        on(event: 'drain', listener: () => void): this;
+        on(event: 'error', listener: (err: Error) => void): this;
+        on(event: 'finish', listener: () => void): this;
+        on(event: 'pipe', listener: (src: stream.Readable) => void): this;
+        on(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: 'abort', listener: () => void): this;
+        once(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        once(event: 'continue', listener: () => void): this;
+        once(event: 'information', listener: (info: InformationEvent) => void): this;
+        once(event: 'response', listener: (response: IncomingMessage) => void): this;
+        once(event: 'socket', listener: (socket: Socket) => void): this;
+        once(event: 'timeout', listener: () => void): this;
+        once(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        once(event: 'close', listener: () => void): this;
+        once(event: 'drain', listener: () => void): this;
+        once(event: 'error', listener: (err: Error) => void): this;
+        once(event: 'finish', listener: () => void): this;
+        once(event: 'pipe', listener: (src: stream.Readable) => void): this;
+        once(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: 'abort', listener: () => void): this;
+        prependListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        prependListener(event: 'continue', listener: () => void): this;
+        prependListener(event: 'information', listener: (info: InformationEvent) => void): this;
+        prependListener(event: 'response', listener: (response: IncomingMessage) => void): this;
+        prependListener(event: 'socket', listener: (socket: Socket) => void): this;
+        prependListener(event: 'timeout', listener: () => void): this;
+        prependListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        prependListener(event: 'close', listener: () => void): this;
+        prependListener(event: 'drain', listener: () => void): this;
+        prependListener(event: 'error', listener: (err: Error) => void): this;
+        prependListener(event: 'finish', listener: () => void): this;
+        prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+        prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: 'abort', listener: () => void): this;
+        prependOnceListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        prependOnceListener(event: 'continue', listener: () => void): this;
+        prependOnceListener(event: 'information', listener: (info: InformationEvent) => void): this;
+        prependOnceListener(event: 'response', listener: (response: IncomingMessage) => void): this;
+        prependOnceListener(event: 'socket', listener: (socket: Socket) => void): this;
+        prependOnceListener(event: 'timeout', listener: () => void): this;
+        prependOnceListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
+        prependOnceListener(event: 'close', listener: () => void): this;
+        prependOnceListener(event: 'drain', listener: () => void): this;
+        prependOnceListener(event: 'error', listener: (err: Error) => void): this;
+        prependOnceListener(event: 'finish', listener: () => void): this;
+        prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    class IncomingMessage extends stream.Readable {
+        constructor(socket: Socket);
+
+        httpVersion: string;
+        httpVersionMajor: number;
+        httpVersionMinor: number;
+        complete: boolean;
+        connection: Socket;
+        headers: IncomingHttpHeaders;
+        rawHeaders: string[];
+        trailers: { [key: string]: string | undefined };
+        rawTrailers: string[];
+        setTimeout(msecs: number, callback?: () => void): this;
+        /**
+         * Only valid for request obtained from http.Server.
+         */
+        method?: string;
+        /**
+         * Only valid for request obtained from http.Server.
+         */
+        url?: string;
+        /**
+         * Only valid for response obtained from http.ClientRequest.
+         */
+        statusCode?: number;
+        /**
+         * Only valid for response obtained from http.ClientRequest.
+         */
+        statusMessage?: string;
+        socket: Socket;
+        destroy(error?: Error): void;
+    }
+
+    interface AgentOptions {
+        /**
+         * Keep sockets around in a pool to be used by other requests in the future. Default = false
+         */
+        keepAlive?: boolean;
+        /**
+         * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
+         * Only relevant if keepAlive is set to true.
+         */
+        keepAliveMsecs?: number;
+        /**
+         * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity
+         */
+        maxSockets?: number;
+        /**
+         * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256.
+         */
+        maxFreeSockets?: number;
+        /**
+         * Socket timeout in milliseconds. This will set the timeout after the socket is connected.
+         */
+        timeout?: number;
+    }
+
+    class Agent {
+        maxFreeSockets: number;
+        maxSockets: number;
+        readonly sockets: {
+            readonly [key: string]: Socket[];
+        };
+        readonly requests: {
+            readonly [key: string]: IncomingMessage[];
+        };
+
+        constructor(opts?: AgentOptions);
+
+        /**
+         * Destroy any sockets that are currently in use by the agent.
+         * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled,
+         * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise,
+         * sockets may hang open for quite a long time before the server terminates them.
+         */
+        destroy(): void;
+    }
+
+    const METHODS: string[];
+
+    const STATUS_CODES: {
+        [errorCode: number]: string | undefined;
+        [errorCode: string]: string | undefined;
+    };
+
+    function createServer(requestListener?: RequestListener): Server;
+    function createServer(options: ServerOptions, requestListener?: RequestListener): Server;
+
+    // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly,
+    // create interface RequestOptions would make the naming more clear to developers
+    interface RequestOptions extends ClientRequestArgs { }
+    function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
+    function request(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
+    function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
+    function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
+    let globalAgent: Agent;
+
+    /**
+     * Read-only property specifying the maximum allowed size of HTTP headers in bytes.
+     * Defaults to 8KB. Configurable using the [`--max-http-header-size`][] CLI option.
+     */
+    const maxHeaderSize: number;
+}
diff --git a/setup-maven/node_modules/@types/node/http2.d.ts b/setup-maven/node_modules/@types/node/http2.d.ts
new file mode 100644
index 0000000..8c16e10
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/http2.d.ts
@@ -0,0 +1,947 @@
+declare module "http2" {
+    import * as events from "events";
+    import * as fs from "fs";
+    import * as net from "net";
+    import * as stream from "stream";
+    import * as tls from "tls";
+    import * as url from "url";
+
+    import { IncomingHttpHeaders as Http1IncomingHttpHeaders, OutgoingHttpHeaders, IncomingMessage, ServerResponse } from "http";
+    export { OutgoingHttpHeaders } from "http";
+
+    export interface IncomingHttpStatusHeader {
+        ":status"?: number;
+    }
+
+    export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders {
+        ":path"?: string;
+        ":method"?: string;
+        ":authority"?: string;
+        ":scheme"?: string;
+    }
+
+    // Http2Stream
+
+    export interface StreamPriorityOptions {
+        exclusive?: boolean;
+        parent?: number;
+        weight?: number;
+        silent?: boolean;
+    }
+
+    export interface StreamState {
+        localWindowSize?: number;
+        state?: number;
+        localClose?: number;
+        remoteClose?: number;
+        sumDependencyWeight?: number;
+        weight?: number;
+    }
+
+    export interface ServerStreamResponseOptions {
+        endStream?: boolean;
+        waitForTrailers?: boolean;
+    }
+
+    export interface StatOptions {
+        offset: number;
+        length: number;
+    }
+
+    export interface ServerStreamFileResponseOptions {
+        statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean;
+        waitForTrailers?: boolean;
+        offset?: number;
+        length?: number;
+    }
+
+    export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions {
+        onError?(err: NodeJS.ErrnoException): void;
+    }
+
+    export interface Http2Stream extends stream.Duplex {
+        readonly aborted: boolean;
+        readonly bufferSize: number;
+        readonly closed: boolean;
+        readonly destroyed: boolean;
+        /**
+         * Set the true if the END_STREAM flag was set in the request or response HEADERS frame received,
+         * indicating that no additional data should be received and the readable side of the Http2Stream will be closed.
+         */
+        readonly endAfterHeaders: boolean;
+        readonly id?: number;
+        readonly pending: boolean;
+        readonly rstCode: number;
+        readonly sentHeaders: OutgoingHttpHeaders;
+        readonly sentInfoHeaders?: OutgoingHttpHeaders[];
+        readonly sentTrailers?: OutgoingHttpHeaders;
+        readonly session: Http2Session;
+        readonly state: StreamState;
+
+        close(code?: number, callback?: () => void): void;
+        priority(options: StreamPriorityOptions): void;
+        setTimeout(msecs: number, callback?: () => void): void;
+        sendTrailers(headers: OutgoingHttpHeaders): void;
+
+        addListener(event: "aborted", listener: () => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+        addListener(event: "drain", listener: () => void): this;
+        addListener(event: "end", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "finish", listener: () => void): this;
+        addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: "streamClosed", listener: (code: number) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        addListener(event: "wantTrailers", listener: () => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "aborted"): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "data", chunk: Buffer | string): boolean;
+        emit(event: "drain"): boolean;
+        emit(event: "end"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "finish"): boolean;
+        emit(event: "frameError", frameType: number, errorCode: number): boolean;
+        emit(event: "pipe", src: stream.Readable): boolean;
+        emit(event: "unpipe", src: stream.Readable): boolean;
+        emit(event: "streamClosed", code: number): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean;
+        emit(event: "wantTrailers"): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "aborted", listener: () => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "data", listener: (chunk: Buffer | string) => void): this;
+        on(event: "drain", listener: () => void): this;
+        on(event: "end", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "finish", listener: () => void): this;
+        on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        on(event: "pipe", listener: (src: stream.Readable) => void): this;
+        on(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        on(event: "streamClosed", listener: (code: number) => void): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        on(event: "wantTrailers", listener: () => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "aborted", listener: () => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "data", listener: (chunk: Buffer | string) => void): this;
+        once(event: "drain", listener: () => void): this;
+        once(event: "end", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "finish", listener: () => void): this;
+        once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        once(event: "pipe", listener: (src: stream.Readable) => void): this;
+        once(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        once(event: "streamClosed", listener: (code: number) => void): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        once(event: "wantTrailers", listener: () => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "aborted", listener: () => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+        prependListener(event: "drain", listener: () => void): this;
+        prependListener(event: "end", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "finish", listener: () => void): this;
+        prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: "streamClosed", listener: (code: number) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        prependListener(event: "wantTrailers", listener: () => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "aborted", listener: () => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+        prependOnceListener(event: "drain", listener: () => void): this;
+        prependOnceListener(event: "end", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "finish", listener: () => void): this;
+        prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: "streamClosed", listener: (code: number) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        prependOnceListener(event: "wantTrailers", listener: () => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    export interface ClientHttp2Stream extends Http2Stream {
+        addListener(event: "continue", listener: () => {}): this;
+        addListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        addListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "continue"): boolean;
+        emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
+        emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean;
+        emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "continue", listener: () => {}): this;
+        on(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        on(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "continue", listener: () => {}): this;
+        once(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        once(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "continue", listener: () => {}): this;
+        prependListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "continue", listener: () => {}): this;
+        prependOnceListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependOnceListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    export interface ServerHttp2Stream extends Http2Stream {
+        readonly headersSent: boolean;
+        readonly pushAllowed: boolean;
+        additionalHeaders(headers: OutgoingHttpHeaders): void;
+        pushStream(headers: OutgoingHttpHeaders, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
+        pushStream(headers: OutgoingHttpHeaders, options?: StreamPriorityOptions, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
+        respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void;
+        respondWithFD(fd: number | fs.promises.FileHandle, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptions): void;
+        respondWithFile(path: string, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptionsWithError): void;
+    }
+
+    // Http2Session
+
+    export interface Settings {
+        headerTableSize?: number;
+        enablePush?: boolean;
+        initialWindowSize?: number;
+        maxFrameSize?: number;
+        maxConcurrentStreams?: number;
+        maxHeaderListSize?: number;
+        enableConnectProtocol?: boolean;
+    }
+
+    export interface ClientSessionRequestOptions {
+        endStream?: boolean;
+        exclusive?: boolean;
+        parent?: number;
+        weight?: number;
+        waitForTrailers?: boolean;
+    }
+
+    export interface SessionState {
+        effectiveLocalWindowSize?: number;
+        effectiveRecvDataLength?: number;
+        nextStreamID?: number;
+        localWindowSize?: number;
+        lastProcStreamID?: number;
+        remoteWindowSize?: number;
+        outboundQueueSize?: number;
+        deflateDynamicTableSize?: number;
+        inflateDynamicTableSize?: number;
+    }
+
+    export interface Http2Session extends events.EventEmitter {
+        readonly alpnProtocol?: string;
+        readonly closed: boolean;
+        readonly connecting: boolean;
+        readonly destroyed: boolean;
+        readonly encrypted?: boolean;
+        readonly localSettings: Settings;
+        readonly originSet?: string[];
+        readonly pendingSettingsAck: boolean;
+        readonly remoteSettings: Settings;
+        readonly socket: net.Socket | tls.TLSSocket;
+        readonly state: SessionState;
+        readonly type: number;
+
+        close(callback?: () => void): void;
+        destroy(error?: Error, code?: number): void;
+        goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void;
+        ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
+        ping(payload: NodeJS.ArrayBufferView, callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
+        ref(): void;
+        setTimeout(msecs: number, callback?: () => void): void;
+        settings(settings: Settings): void;
+        unref(): void;
+
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+        addListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+        addListener(event: "localSettings", listener: (settings: Settings) => void): this;
+        addListener(event: "ping", listener: () => void): this;
+        addListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "close"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean;
+        emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean;
+        emit(event: "localSettings", settings: Settings): boolean;
+        emit(event: "ping"): boolean;
+        emit(event: "remoteSettings", settings: Settings): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "close", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+        on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+        on(event: "localSettings", listener: (settings: Settings) => void): this;
+        on(event: "ping", listener: () => void): this;
+        on(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "close", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+        once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+        once(event: "localSettings", listener: (settings: Settings) => void): this;
+        once(event: "ping", listener: () => void): this;
+        once(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+        prependListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+        prependListener(event: "localSettings", listener: (settings: Settings) => void): this;
+        prependListener(event: "ping", listener: () => void): this;
+        prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+        prependOnceListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+        prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this;
+        prependOnceListener(event: "ping", listener: () => void): this;
+        prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    export interface ClientHttp2Session extends Http2Session {
+        request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream;
+
+        addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        addListener(event: "origin", listener: (origins: string[]) => void): this;
+        addListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        addListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "altsvc", alt: string, origin: string, stream: number): boolean;
+        emit(event: "origin", origins: string[]): boolean;
+        emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
+        emit(event: "stream", stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        on(event: "origin", listener: (origins: string[]) => void): this;
+        on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        on(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        once(event: "origin", listener: (origins: string[]) => void): this;
+        once(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        once(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        prependListener(event: "origin", listener: (origins: string[]) => void): this;
+        prependListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        prependListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        prependOnceListener(event: "origin", listener: (origins: string[]) => void): this;
+        prependOnceListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        prependOnceListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    export interface AlternativeServiceOptions {
+        origin: number | string | url.URL;
+    }
+
+    export interface ServerHttp2Session extends Http2Session {
+        readonly server: Http2Server | Http2SecureServer;
+
+        altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void;
+        origin(...args: Array<string | url.URL | { origin: string }>): void;
+
+        addListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
+        emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    // Http2Server
+
+    export interface SessionOptions {
+        maxDeflateDynamicTableSize?: number;
+        maxSessionMemory?: number;
+        maxHeaderListPairs?: number;
+        maxOutstandingPings?: number;
+        maxSendHeaderBlockLength?: number;
+        paddingStrategy?: number;
+        peerMaxConcurrentStreams?: number;
+        settings?: Settings;
+
+        selectPadding?(frameLen: number, maxFrameLen: number): number;
+        createConnection?(authority: url.URL, option: SessionOptions): stream.Duplex;
+    }
+
+    export interface ClientSessionOptions extends SessionOptions {
+        maxReservedRemoteStreams?: number;
+        createConnection?: (authority: url.URL, option: SessionOptions) => stream.Duplex;
+    }
+
+    export interface ServerSessionOptions extends SessionOptions {
+        Http1IncomingMessage?: typeof IncomingMessage;
+        Http1ServerResponse?: typeof ServerResponse;
+        Http2ServerRequest?: typeof Http2ServerRequest;
+        Http2ServerResponse?: typeof Http2ServerResponse;
+    }
+
+    export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions { }
+    export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions { }
+
+    export interface ServerOptions extends ServerSessionOptions { }
+
+    export interface SecureServerOptions extends SecureServerSessionOptions {
+        allowHTTP1?: boolean;
+        origins?: string[];
+    }
+
+    export interface Http2Server extends net.Server {
+        addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        addListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        addListener(event: "sessionError", listener: (err: Error) => void): this;
+        addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+        emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+        emit(event: "session", session: ServerHttp2Session): boolean;
+        emit(event: "sessionError", err: Error): boolean;
+        emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        on(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        on(event: "sessionError", listener: (err: Error) => void): this;
+        on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        once(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        once(event: "sessionError", listener: (err: Error) => void): this;
+        once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        prependListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        setTimeout(msec?: number, callback?: () => void): this;
+    }
+
+    export interface Http2SecureServer extends tls.Server {
+        addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        addListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        addListener(event: "sessionError", listener: (err: Error) => void): this;
+        addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+        emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+        emit(event: "session", session: ServerHttp2Session): boolean;
+        emit(event: "sessionError", err: Error): boolean;
+        emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        on(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        on(event: "sessionError", listener: (err: Error) => void): this;
+        on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        once(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        once(event: "sessionError", listener: (err: Error) => void): this;
+        once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        prependListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+        prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
+        prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        setTimeout(msec?: number, callback?: () => void): this;
+    }
+
+    export class Http2ServerRequest extends stream.Readable {
+        constructor(stream: ServerHttp2Stream, headers: IncomingHttpHeaders, options: stream.ReadableOptions, rawHeaders: string[]);
+
+        readonly aborted: boolean;
+        readonly authority: string;
+        readonly headers: IncomingHttpHeaders;
+        readonly httpVersion: string;
+        readonly method: string;
+        readonly rawHeaders: string[];
+        readonly rawTrailers: string[];
+        readonly scheme: string;
+        readonly socket: net.Socket | tls.TLSSocket;
+        readonly stream: ServerHttp2Stream;
+        readonly trailers: IncomingHttpHeaders;
+        readonly url: string;
+
+        setTimeout(msecs: number, callback?: () => void): void;
+        read(size?: number): Buffer | string | null;
+
+        addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+        addListener(event: "end", listener: () => void): this;
+        addListener(event: "readable", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "aborted", hadError: boolean, code: number): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "data", chunk: Buffer | string): boolean;
+        emit(event: "end"): boolean;
+        emit(event: "readable"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "data", listener: (chunk: Buffer | string) => void): this;
+        on(event: "end", listener: () => void): this;
+        on(event: "readable", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "data", listener: (chunk: Buffer | string) => void): this;
+        once(event: "end", listener: () => void): this;
+        once(event: "readable", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+        prependListener(event: "end", listener: () => void): this;
+        prependListener(event: "readable", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this;
+        prependOnceListener(event: "end", listener: () => void): this;
+        prependOnceListener(event: "readable", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    export class Http2ServerResponse extends stream.Stream {
+        constructor(stream: ServerHttp2Stream);
+
+        readonly connection: net.Socket | tls.TLSSocket;
+        readonly finished: boolean;
+        readonly headersSent: boolean;
+        readonly socket: net.Socket | tls.TLSSocket;
+        readonly stream: ServerHttp2Stream;
+        sendDate: boolean;
+        statusCode: number;
+        statusMessage: '';
+        addTrailers(trailers: OutgoingHttpHeaders): void;
+        end(callback?: () => void): void;
+        end(data: string | Uint8Array, callback?: () => void): void;
+        end(data: string | Uint8Array, encoding: string, callback?: () => void): void;
+        getHeader(name: string): string;
+        getHeaderNames(): string[];
+        getHeaders(): OutgoingHttpHeaders;
+        hasHeader(name: string): boolean;
+        removeHeader(name: string): void;
+        setHeader(name: string, value: number | string | string[]): void;
+        setTimeout(msecs: number, callback?: () => void): void;
+        write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean;
+        write(chunk: string | Uint8Array, encoding: string, callback?: (err: Error) => void): boolean;
+        writeContinue(): void;
+        writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
+        writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this;
+        createPushResponse(headers: OutgoingHttpHeaders, callback: (err: Error | null, res: Http2ServerResponse) => void): void;
+
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "drain", listener: () => void): this;
+        addListener(event: "error", listener: (error: Error) => void): this;
+        addListener(event: "finish", listener: () => void): this;
+        addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "close"): boolean;
+        emit(event: "drain"): boolean;
+        emit(event: "error", error: Error): boolean;
+        emit(event: "finish"): boolean;
+        emit(event: "pipe", src: stream.Readable): boolean;
+        emit(event: "unpipe", src: stream.Readable): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "close", listener: () => void): this;
+        on(event: "drain", listener: () => void): this;
+        on(event: "error", listener: (error: Error) => void): this;
+        on(event: "finish", listener: () => void): this;
+        on(event: "pipe", listener: (src: stream.Readable) => void): this;
+        on(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "close", listener: () => void): this;
+        once(event: "drain", listener: () => void): this;
+        once(event: "error", listener: (error: Error) => void): this;
+        once(event: "finish", listener: () => void): this;
+        once(event: "pipe", listener: (src: stream.Readable) => void): this;
+        once(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "drain", listener: () => void): this;
+        prependListener(event: "error", listener: (error: Error) => void): this;
+        prependListener(event: "finish", listener: () => void): this;
+        prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "drain", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (error: Error) => void): this;
+        prependOnceListener(event: "finish", listener: () => void): this;
+        prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    // Public API
+
+    export namespace constants {
+        const NGHTTP2_SESSION_SERVER: number;
+        const NGHTTP2_SESSION_CLIENT: number;
+        const NGHTTP2_STREAM_STATE_IDLE: number;
+        const NGHTTP2_STREAM_STATE_OPEN: number;
+        const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number;
+        const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number;
+        const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number;
+        const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number;
+        const NGHTTP2_STREAM_STATE_CLOSED: number;
+        const NGHTTP2_NO_ERROR: number;
+        const NGHTTP2_PROTOCOL_ERROR: number;
+        const NGHTTP2_INTERNAL_ERROR: number;
+        const NGHTTP2_FLOW_CONTROL_ERROR: number;
+        const NGHTTP2_SETTINGS_TIMEOUT: number;
+        const NGHTTP2_STREAM_CLOSED: number;
+        const NGHTTP2_FRAME_SIZE_ERROR: number;
+        const NGHTTP2_REFUSED_STREAM: number;
+        const NGHTTP2_CANCEL: number;
+        const NGHTTP2_COMPRESSION_ERROR: number;
+        const NGHTTP2_CONNECT_ERROR: number;
+        const NGHTTP2_ENHANCE_YOUR_CALM: number;
+        const NGHTTP2_INADEQUATE_SECURITY: number;
+        const NGHTTP2_HTTP_1_1_REQUIRED: number;
+        const NGHTTP2_ERR_FRAME_SIZE_ERROR: number;
+        const NGHTTP2_FLAG_NONE: number;
+        const NGHTTP2_FLAG_END_STREAM: number;
+        const NGHTTP2_FLAG_END_HEADERS: number;
+        const NGHTTP2_FLAG_ACK: number;
+        const NGHTTP2_FLAG_PADDED: number;
+        const NGHTTP2_FLAG_PRIORITY: number;
+        const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;
+        const DEFAULT_SETTINGS_ENABLE_PUSH: number;
+        const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number;
+        const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number;
+        const MAX_MAX_FRAME_SIZE: number;
+        const MIN_MAX_FRAME_SIZE: number;
+        const MAX_INITIAL_WINDOW_SIZE: number;
+        const NGHTTP2_DEFAULT_WEIGHT: number;
+        const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number;
+        const NGHTTP2_SETTINGS_ENABLE_PUSH: number;
+        const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number;
+        const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number;
+        const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number;
+        const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number;
+        const PADDING_STRATEGY_NONE: number;
+        const PADDING_STRATEGY_MAX: number;
+        const PADDING_STRATEGY_CALLBACK: number;
+        const HTTP2_HEADER_STATUS: string;
+        const HTTP2_HEADER_METHOD: string;
+        const HTTP2_HEADER_AUTHORITY: string;
+        const HTTP2_HEADER_SCHEME: string;
+        const HTTP2_HEADER_PATH: string;
+        const HTTP2_HEADER_ACCEPT_CHARSET: string;
+        const HTTP2_HEADER_ACCEPT_ENCODING: string;
+        const HTTP2_HEADER_ACCEPT_LANGUAGE: string;
+        const HTTP2_HEADER_ACCEPT_RANGES: string;
+        const HTTP2_HEADER_ACCEPT: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string;
+        const HTTP2_HEADER_AGE: string;
+        const HTTP2_HEADER_ALLOW: string;
+        const HTTP2_HEADER_AUTHORIZATION: string;
+        const HTTP2_HEADER_CACHE_CONTROL: string;
+        const HTTP2_HEADER_CONNECTION: string;
+        const HTTP2_HEADER_CONTENT_DISPOSITION: string;
+        const HTTP2_HEADER_CONTENT_ENCODING: string;
+        const HTTP2_HEADER_CONTENT_LANGUAGE: string;
+        const HTTP2_HEADER_CONTENT_LENGTH: string;
+        const HTTP2_HEADER_CONTENT_LOCATION: string;
+        const HTTP2_HEADER_CONTENT_MD5: string;
+        const HTTP2_HEADER_CONTENT_RANGE: string;
+        const HTTP2_HEADER_CONTENT_TYPE: string;
+        const HTTP2_HEADER_COOKIE: string;
+        const HTTP2_HEADER_DATE: string;
+        const HTTP2_HEADER_ETAG: string;
+        const HTTP2_HEADER_EXPECT: string;
+        const HTTP2_HEADER_EXPIRES: string;
+        const HTTP2_HEADER_FROM: string;
+        const HTTP2_HEADER_HOST: string;
+        const HTTP2_HEADER_IF_MATCH: string;
+        const HTTP2_HEADER_IF_MODIFIED_SINCE: string;
+        const HTTP2_HEADER_IF_NONE_MATCH: string;
+        const HTTP2_HEADER_IF_RANGE: string;
+        const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string;
+        const HTTP2_HEADER_LAST_MODIFIED: string;
+        const HTTP2_HEADER_LINK: string;
+        const HTTP2_HEADER_LOCATION: string;
+        const HTTP2_HEADER_MAX_FORWARDS: string;
+        const HTTP2_HEADER_PREFER: string;
+        const HTTP2_HEADER_PROXY_AUTHENTICATE: string;
+        const HTTP2_HEADER_PROXY_AUTHORIZATION: string;
+        const HTTP2_HEADER_RANGE: string;
+        const HTTP2_HEADER_REFERER: string;
+        const HTTP2_HEADER_REFRESH: string;
+        const HTTP2_HEADER_RETRY_AFTER: string;
+        const HTTP2_HEADER_SERVER: string;
+        const HTTP2_HEADER_SET_COOKIE: string;
+        const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string;
+        const HTTP2_HEADER_TRANSFER_ENCODING: string;
+        const HTTP2_HEADER_TE: string;
+        const HTTP2_HEADER_UPGRADE: string;
+        const HTTP2_HEADER_USER_AGENT: string;
+        const HTTP2_HEADER_VARY: string;
+        const HTTP2_HEADER_VIA: string;
+        const HTTP2_HEADER_WWW_AUTHENTICATE: string;
+        const HTTP2_HEADER_HTTP2_SETTINGS: string;
+        const HTTP2_HEADER_KEEP_ALIVE: string;
+        const HTTP2_HEADER_PROXY_CONNECTION: string;
+        const HTTP2_METHOD_ACL: string;
+        const HTTP2_METHOD_BASELINE_CONTROL: string;
+        const HTTP2_METHOD_BIND: string;
+        const HTTP2_METHOD_CHECKIN: string;
+        const HTTP2_METHOD_CHECKOUT: string;
+        const HTTP2_METHOD_CONNECT: string;
+        const HTTP2_METHOD_COPY: string;
+        const HTTP2_METHOD_DELETE: string;
+        const HTTP2_METHOD_GET: string;
+        const HTTP2_METHOD_HEAD: string;
+        const HTTP2_METHOD_LABEL: string;
+        const HTTP2_METHOD_LINK: string;
+        const HTTP2_METHOD_LOCK: string;
+        const HTTP2_METHOD_MERGE: string;
+        const HTTP2_METHOD_MKACTIVITY: string;
+        const HTTP2_METHOD_MKCALENDAR: string;
+        const HTTP2_METHOD_MKCOL: string;
+        const HTTP2_METHOD_MKREDIRECTREF: string;
+        const HTTP2_METHOD_MKWORKSPACE: string;
+        const HTTP2_METHOD_MOVE: string;
+        const HTTP2_METHOD_OPTIONS: string;
+        const HTTP2_METHOD_ORDERPATCH: string;
+        const HTTP2_METHOD_PATCH: string;
+        const HTTP2_METHOD_POST: string;
+        const HTTP2_METHOD_PRI: string;
+        const HTTP2_METHOD_PROPFIND: string;
+        const HTTP2_METHOD_PROPPATCH: string;
+        const HTTP2_METHOD_PUT: string;
+        const HTTP2_METHOD_REBIND: string;
+        const HTTP2_METHOD_REPORT: string;
+        const HTTP2_METHOD_SEARCH: string;
+        const HTTP2_METHOD_TRACE: string;
+        const HTTP2_METHOD_UNBIND: string;
+        const HTTP2_METHOD_UNCHECKOUT: string;
+        const HTTP2_METHOD_UNLINK: string;
+        const HTTP2_METHOD_UNLOCK: string;
+        const HTTP2_METHOD_UPDATE: string;
+        const HTTP2_METHOD_UPDATEREDIRECTREF: string;
+        const HTTP2_METHOD_VERSION_CONTROL: string;
+        const HTTP_STATUS_CONTINUE: number;
+        const HTTP_STATUS_SWITCHING_PROTOCOLS: number;
+        const HTTP_STATUS_PROCESSING: number;
+        const HTTP_STATUS_OK: number;
+        const HTTP_STATUS_CREATED: number;
+        const HTTP_STATUS_ACCEPTED: number;
+        const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number;
+        const HTTP_STATUS_NO_CONTENT: number;
+        const HTTP_STATUS_RESET_CONTENT: number;
+        const HTTP_STATUS_PARTIAL_CONTENT: number;
+        const HTTP_STATUS_MULTI_STATUS: number;
+        const HTTP_STATUS_ALREADY_REPORTED: number;
+        const HTTP_STATUS_IM_USED: number;
+        const HTTP_STATUS_MULTIPLE_CHOICES: number;
+        const HTTP_STATUS_MOVED_PERMANENTLY: number;
+        const HTTP_STATUS_FOUND: number;
+        const HTTP_STATUS_SEE_OTHER: number;
+        const HTTP_STATUS_NOT_MODIFIED: number;
+        const HTTP_STATUS_USE_PROXY: number;
+        const HTTP_STATUS_TEMPORARY_REDIRECT: number;
+        const HTTP_STATUS_PERMANENT_REDIRECT: number;
+        const HTTP_STATUS_BAD_REQUEST: number;
+        const HTTP_STATUS_UNAUTHORIZED: number;
+        const HTTP_STATUS_PAYMENT_REQUIRED: number;
+        const HTTP_STATUS_FORBIDDEN: number;
+        const HTTP_STATUS_NOT_FOUND: number;
+        const HTTP_STATUS_METHOD_NOT_ALLOWED: number;
+        const HTTP_STATUS_NOT_ACCEPTABLE: number;
+        const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number;
+        const HTTP_STATUS_REQUEST_TIMEOUT: number;
+        const HTTP_STATUS_CONFLICT: number;
+        const HTTP_STATUS_GONE: number;
+        const HTTP_STATUS_LENGTH_REQUIRED: number;
+        const HTTP_STATUS_PRECONDITION_FAILED: number;
+        const HTTP_STATUS_PAYLOAD_TOO_LARGE: number;
+        const HTTP_STATUS_URI_TOO_LONG: number;
+        const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number;
+        const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number;
+        const HTTP_STATUS_EXPECTATION_FAILED: number;
+        const HTTP_STATUS_TEAPOT: number;
+        const HTTP_STATUS_MISDIRECTED_REQUEST: number;
+        const HTTP_STATUS_UNPROCESSABLE_ENTITY: number;
+        const HTTP_STATUS_LOCKED: number;
+        const HTTP_STATUS_FAILED_DEPENDENCY: number;
+        const HTTP_STATUS_UNORDERED_COLLECTION: number;
+        const HTTP_STATUS_UPGRADE_REQUIRED: number;
+        const HTTP_STATUS_PRECONDITION_REQUIRED: number;
+        const HTTP_STATUS_TOO_MANY_REQUESTS: number;
+        const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number;
+        const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number;
+        const HTTP_STATUS_INTERNAL_SERVER_ERROR: number;
+        const HTTP_STATUS_NOT_IMPLEMENTED: number;
+        const HTTP_STATUS_BAD_GATEWAY: number;
+        const HTTP_STATUS_SERVICE_UNAVAILABLE: number;
+        const HTTP_STATUS_GATEWAY_TIMEOUT: number;
+        const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number;
+        const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number;
+        const HTTP_STATUS_INSUFFICIENT_STORAGE: number;
+        const HTTP_STATUS_LOOP_DETECTED: number;
+        const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number;
+        const HTTP_STATUS_NOT_EXTENDED: number;
+        const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number;
+    }
+
+    export function getDefaultSettings(): Settings;
+    export function getPackedSettings(settings: Settings): Buffer;
+    export function getUnpackedSettings(buf: Uint8Array): Settings;
+
+    export function createServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
+    export function createServer(options: ServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
+
+    export function createSecureServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
+    export function createSecureServer(options: SecureServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
+
+    export function connect(authority: string | url.URL, listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): ClientHttp2Session;
+    export function connect(
+        authority: string | url.URL,
+        options?: ClientSessionOptions | SecureClientSessionOptions,
+        listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void
+    ): ClientHttp2Session;
+}
diff --git a/setup-maven/node_modules/@types/node/https.d.ts b/setup-maven/node_modules/@types/node/https.d.ts
new file mode 100644
index 0000000..6f33dbd
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/https.d.ts
@@ -0,0 +1,53 @@
+declare module "https" {
+    import * as tls from "tls";
+    import * as events from "events";
+    import * as http from "http";
+    import { URL } from "url";
+
+    type ServerOptions = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions;
+
+    type RequestOptions = http.RequestOptions & tls.SecureContextOptions & {
+        rejectUnauthorized?: boolean; // Defaults to true
+        servername?: string; // SNI TLS Extension
+    };
+
+    interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions {
+        rejectUnauthorized?: boolean;
+        maxCachedSessions?: number;
+    }
+
+    class Agent extends http.Agent {
+        constructor(options?: AgentOptions);
+        options: AgentOptions;
+    }
+
+    class Server extends tls.Server {
+        constructor(requestListener?: http.RequestListener);
+        constructor(options: ServerOptions, requestListener?: http.RequestListener);
+
+        setTimeout(callback: () => void): this;
+        setTimeout(msecs?: number, callback?: () => void): this;
+        /**
+         * Limits maximum incoming headers count. If set to 0, no limit will be applied.
+         * @default 2000
+         * {@link https://nodejs.org/api/http.html#http_server_maxheaderscount}
+         */
+        maxHeadersCount: number | null;
+        timeout: number;
+        /**
+         * Limit the amount of time the parser will wait to receive the complete HTTP headers.
+         * @default 40000
+         * {@link https://nodejs.org/api/http.html#http_server_headerstimeout}
+         */
+        headersTimeout: number;
+        keepAliveTimeout: number;
+    }
+
+    function createServer(requestListener?: http.RequestListener): Server;
+    function createServer(options: ServerOptions, requestListener?: http.RequestListener): Server;
+    function request(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
+    function request(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
+    function get(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
+    function get(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
+    let globalAgent: Agent;
+}
diff --git a/setup-maven/node_modules/@types/node/index.d.ts b/setup-maven/node_modules/@types/node/index.d.ts
new file mode 100644
index 0000000..60f72c9
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/index.d.ts
@@ -0,0 +1,104 @@
+// Type definitions for non-npm package Node.js 12.12
+// Project: http://nodejs.org/
+// Definitions by: Microsoft TypeScript <https://github.com/Microsoft>
+//                 DefinitelyTyped <https://github.com/DefinitelyTyped>
+//                 Alberto Schiabel <https://github.com/jkomyno>
+//                 Alexander T. <https://github.com/a-tarasyuk>
+//                 Alvis HT Tang <https://github.com/alvis>
+//                 Andrew Makarov <https://github.com/r3nya>
+//                 Benjamin Toueg <https://github.com/btoueg>
+//                 Bruno Scheufler <https://github.com/brunoscheufler>
+//                 Chigozirim C. <https://github.com/smac89>
+//                 Christian Vaagland Tellnes <https://github.com/tellnes>
+//                 David Junger <https://github.com/touffy>
+//                 Deividas Bakanas <https://github.com/DeividasBakanas>
+//                 Eugene Y. Q. Shen <https://github.com/eyqs>
+//                 Flarna <https://github.com/Flarna>
+//                 Hannes Magnusson <https://github.com/Hannes-Magnusson-CK>
+//                 Hoàng Văn Khải <https://github.com/KSXGitHub>
+//                 Huw <https://github.com/hoo29>
+//                 Kelvin Jin <https://github.com/kjin>
+//                 Klaus Meinhardt <https://github.com/ajafff>
+//                 Lishude <https://github.com/islishude>
+//                 Mariusz Wiktorczyk <https://github.com/mwiktorczyk>
+//                 Mohsen Azimi <https://github.com/mohsen1>
+//                 Nicolas Even <https://github.com/n-e>
+//                 Nicolas Voigt <https://github.com/octo-sniffle>
+//                 Nikita Galkin <https://github.com/galkin>
+//                 Parambir Singh <https://github.com/parambirs>
+//                 Sebastian Silbermann <https://github.com/eps1lon>
+//                 Simon Schick <https://github.com/SimonSchick>
+//                 Thomas den Hollander <https://github.com/ThomasdenH>
+//                 Wilco Bakker <https://github.com/WilcoBakker>
+//                 wwwy3y3 <https://github.com/wwwy3y3>
+//                 Zane Hannan AU <https://github.com/ZaneHannanAU>
+//                 Samuel Ainsworth <https://github.com/samuela>
+//                 Kyle Uehlein <https://github.com/kuehlein>
+//                 Jordi Oliveras Rovira <https://github.com/j-oliveras>
+//                 Thanik Bhongbhibhat <https://github.com/bhongy>
+//                 Marcin Kopacz <https://github.com/chyzwar>
+//                 Trivikram Kamat <https://github.com/trivikr>
+//                 Minh Son Nguyen <https://github.com/nguymin4>
+//                 Junxiao Shi <https://github.com/yoursunny>
+//                 Ilia Baryshnikov <https://github.com/qwelias>
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+// NOTE: These definitions support NodeJS and TypeScript 3.2.
+
+// NOTE: TypeScript version-specific augmentations can be found in the following paths:
+//          - ~/base.d.ts         - Shared definitions common to all TypeScript versions
+//          - ~/index.d.ts        - Definitions specific to TypeScript 2.1
+//          - ~/ts3.2/index.d.ts  - Definitions specific to TypeScript 3.2
+
+// NOTE: Augmentations for TypeScript 3.2 and later should use individual files for overrides
+//       within the respective ~/ts3.2 (or later) folder. However, this is disallowed for versions
+//       prior to TypeScript 3.2, so the older definitions will be found here.
+
+// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
+/// <reference path="base.d.ts" />
+
+// TypeScript 2.1-specific augmentations:
+
+// Forward-declarations for needed types from es2015 and later (in case users are using `--lib es5`)
+// Empty interfaces are used here which merge fine with the real declarations in the lib XXX files
+// just to ensure the names are known and node typings can be sued without importing these libs.
+// if someone really needs these types the libs need to be added via --lib or in tsconfig.json
+interface MapConstructor { }
+interface WeakMapConstructor { }
+interface SetConstructor { }
+interface WeakSetConstructor { }
+interface Set<T> {}
+interface Map<K, V> {}
+interface ReadonlySet<T> {}
+interface Iterable<T> { }
+interface IteratorResult<T> { }
+interface AsyncIterable<T> { }
+interface Iterator<T> {
+    next(value?: any): IteratorResult<T>;
+}
+interface IterableIterator<T> { }
+interface AsyncIterableIterator<T> {}
+interface SymbolConstructor {
+    readonly iterator: symbol;
+    readonly asyncIterator: symbol;
+}
+declare var Symbol: SymbolConstructor;
+// even this is just a forward declaration some properties are added otherwise
+// it would be allowed to pass anything to e.g. Buffer.from()
+interface SharedArrayBuffer {
+    readonly byteLength: number;
+    slice(begin?: number, end?: number): SharedArrayBuffer;
+}
+
+declare module "util" {
+    namespace inspect {
+        const custom: symbol;
+    }
+    namespace promisify {
+        const custom: symbol;
+    }
+    namespace types {
+        function isBigInt64Array(value: any): boolean;
+        function isBigUint64Array(value: any): boolean;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/inspector.d.ts b/setup-maven/node_modules/@types/node/inspector.d.ts
new file mode 100644
index 0000000..b14aed2
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/inspector.d.ts
@@ -0,0 +1,3034 @@
+// tslint:disable-next-line:dt-header
+// Type definitions for inspector
+
+// These definitions are auto-generated.
+// Please see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19330
+// for more information.
+
+// tslint:disable:max-line-length
+
+/**
+ * The inspector module provides an API for interacting with the V8 inspector.
+ */
+declare module "inspector" {
+    import { EventEmitter } from 'events';
+
+    interface InspectorNotification<T> {
+        method: string;
+        params: T;
+    }
+
+    namespace Schema {
+        /**
+         * Description of the protocol domain.
+         */
+        interface Domain {
+            /**
+             * Domain name.
+             */
+            name: string;
+            /**
+             * Domain version.
+             */
+            version: string;
+        }
+
+        interface GetDomainsReturnType {
+            /**
+             * List of supported domains.
+             */
+            domains: Domain[];
+        }
+    }
+
+    namespace Runtime {
+        /**
+         * Unique script identifier.
+         */
+        type ScriptId = string;
+
+        /**
+         * Unique object identifier.
+         */
+        type RemoteObjectId = string;
+
+        /**
+         * Primitive value which cannot be JSON-stringified.
+         */
+        type UnserializableValue = string;
+
+        /**
+         * Mirror object referencing original JavaScript object.
+         */
+        interface RemoteObject {
+            /**
+             * Object type.
+             */
+            type: string;
+            /**
+             * Object subtype hint. Specified for <code>object</code> type values only.
+             */
+            subtype?: string;
+            /**
+             * Object class (constructor) name. Specified for <code>object</code> type values only.
+             */
+            className?: string;
+            /**
+             * Remote object value in case of primitive values or JSON values (if it was requested).
+             */
+            value?: any;
+            /**
+             * Primitive value which can not be JSON-stringified does not have <code>value</code>, but gets this property.
+             */
+            unserializableValue?: UnserializableValue;
+            /**
+             * String representation of the object.
+             */
+            description?: string;
+            /**
+             * Unique object identifier (for non-primitive values).
+             */
+            objectId?: RemoteObjectId;
+            /**
+             * Preview containing abbreviated property values. Specified for <code>object</code> type values only.
+             * @experimental
+             */
+            preview?: ObjectPreview;
+            /**
+             * @experimental
+             */
+            customPreview?: CustomPreview;
+        }
+
+        /**
+         * @experimental
+         */
+        interface CustomPreview {
+            header: string;
+            hasBody: boolean;
+            formatterObjectId: RemoteObjectId;
+            bindRemoteObjectFunctionId: RemoteObjectId;
+            configObjectId?: RemoteObjectId;
+        }
+
+        /**
+         * Object containing abbreviated remote object value.
+         * @experimental
+         */
+        interface ObjectPreview {
+            /**
+             * Object type.
+             */
+            type: string;
+            /**
+             * Object subtype hint. Specified for <code>object</code> type values only.
+             */
+            subtype?: string;
+            /**
+             * String representation of the object.
+             */
+            description?: string;
+            /**
+             * True iff some of the properties or entries of the original object did not fit.
+             */
+            overflow: boolean;
+            /**
+             * List of the properties.
+             */
+            properties: PropertyPreview[];
+            /**
+             * List of the entries. Specified for <code>map</code> and <code>set</code> subtype values only.
+             */
+            entries?: EntryPreview[];
+        }
+
+        /**
+         * @experimental
+         */
+        interface PropertyPreview {
+            /**
+             * Property name.
+             */
+            name: string;
+            /**
+             * Object type. Accessor means that the property itself is an accessor property.
+             */
+            type: string;
+            /**
+             * User-friendly property value string.
+             */
+            value?: string;
+            /**
+             * Nested value preview.
+             */
+            valuePreview?: ObjectPreview;
+            /**
+             * Object subtype hint. Specified for <code>object</code> type values only.
+             */
+            subtype?: string;
+        }
+
+        /**
+         * @experimental
+         */
+        interface EntryPreview {
+            /**
+             * Preview of the key. Specified for map-like collection entries.
+             */
+            key?: ObjectPreview;
+            /**
+             * Preview of the value.
+             */
+            value: ObjectPreview;
+        }
+
+        /**
+         * Object property descriptor.
+         */
+        interface PropertyDescriptor {
+            /**
+             * Property name or symbol description.
+             */
+            name: string;
+            /**
+             * The value associated with the property.
+             */
+            value?: RemoteObject;
+            /**
+             * True if the value associated with the property may be changed (data descriptors only).
+             */
+            writable?: boolean;
+            /**
+             * A function which serves as a getter for the property, or <code>undefined</code> if there is no getter (accessor descriptors only).
+             */
+            get?: RemoteObject;
+            /**
+             * A function which serves as a setter for the property, or <code>undefined</code> if there is no setter (accessor descriptors only).
+             */
+            set?: RemoteObject;
+            /**
+             * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object.
+             */
+            configurable: boolean;
+            /**
+             * True if this property shows up during enumeration of the properties on the corresponding object.
+             */
+            enumerable: boolean;
+            /**
+             * True if the result was thrown during the evaluation.
+             */
+            wasThrown?: boolean;
+            /**
+             * True if the property is owned for the object.
+             */
+            isOwn?: boolean;
+            /**
+             * Property symbol object, if the property is of the <code>symbol</code> type.
+             */
+            symbol?: RemoteObject;
+        }
+
+        /**
+         * Object internal property descriptor. This property isn't normally visible in JavaScript code.
+         */
+        interface InternalPropertyDescriptor {
+            /**
+             * Conventional property name.
+             */
+            name: string;
+            /**
+             * The value associated with the property.
+             */
+            value?: RemoteObject;
+        }
+
+        /**
+         * Represents function call argument. Either remote object id <code>objectId</code>, primitive <code>value</code>, unserializable primitive value or neither of (for undefined) them should be specified.
+         */
+        interface CallArgument {
+            /**
+             * Primitive value or serializable javascript object.
+             */
+            value?: any;
+            /**
+             * Primitive value which can not be JSON-stringified.
+             */
+            unserializableValue?: UnserializableValue;
+            /**
+             * Remote object handle.
+             */
+            objectId?: RemoteObjectId;
+        }
+
+        /**
+         * Id of an execution context.
+         */
+        type ExecutionContextId = number;
+
+        /**
+         * Description of an isolated world.
+         */
+        interface ExecutionContextDescription {
+            /**
+             * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed.
+             */
+            id: ExecutionContextId;
+            /**
+             * Execution context origin.
+             */
+            origin: string;
+            /**
+             * Human readable name describing given context.
+             */
+            name: string;
+            /**
+             * Embedder-specific auxiliary data.
+             */
+            auxData?: {};
+        }
+
+        /**
+         * Detailed information about exception (or error) that was thrown during script compilation or execution.
+         */
+        interface ExceptionDetails {
+            /**
+             * Exception id.
+             */
+            exceptionId: number;
+            /**
+             * Exception text, which should be used together with exception object when available.
+             */
+            text: string;
+            /**
+             * Line number of the exception location (0-based).
+             */
+            lineNumber: number;
+            /**
+             * Column number of the exception location (0-based).
+             */
+            columnNumber: number;
+            /**
+             * Script ID of the exception location.
+             */
+            scriptId?: ScriptId;
+            /**
+             * URL of the exception location, to be used when the script was not reported.
+             */
+            url?: string;
+            /**
+             * JavaScript stack trace if available.
+             */
+            stackTrace?: StackTrace;
+            /**
+             * Exception object if available.
+             */
+            exception?: RemoteObject;
+            /**
+             * Identifier of the context where exception happened.
+             */
+            executionContextId?: ExecutionContextId;
+        }
+
+        /**
+         * Number of milliseconds since epoch.
+         */
+        type Timestamp = number;
+
+        /**
+         * Stack entry for runtime errors and assertions.
+         */
+        interface CallFrame {
+            /**
+             * JavaScript function name.
+             */
+            functionName: string;
+            /**
+             * JavaScript script id.
+             */
+            scriptId: ScriptId;
+            /**
+             * JavaScript script name or url.
+             */
+            url: string;
+            /**
+             * JavaScript script line number (0-based).
+             */
+            lineNumber: number;
+            /**
+             * JavaScript script column number (0-based).
+             */
+            columnNumber: number;
+        }
+
+        /**
+         * Call frames for assertions or error messages.
+         */
+        interface StackTrace {
+            /**
+             * String label of this stack trace. For async traces this may be a name of the function that initiated the async call.
+             */
+            description?: string;
+            /**
+             * JavaScript function name.
+             */
+            callFrames: CallFrame[];
+            /**
+             * Asynchronous JavaScript stack trace that preceded this stack, if available.
+             */
+            parent?: StackTrace;
+            /**
+             * Asynchronous JavaScript stack trace that preceded this stack, if available.
+             * @experimental
+             */
+            parentId?: StackTraceId;
+        }
+
+        /**
+         * Unique identifier of current debugger.
+         * @experimental
+         */
+        type UniqueDebuggerId = string;
+
+        /**
+         * If <code>debuggerId</code> is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See <code>Runtime.StackTrace</code> and <code>Debugger.paused</code> for usages.
+         * @experimental
+         */
+        interface StackTraceId {
+            id: string;
+            debuggerId?: UniqueDebuggerId;
+        }
+
+        interface EvaluateParameterType {
+            /**
+             * Expression to evaluate.
+             */
+            expression: string;
+            /**
+             * Symbolic group name that can be used to release multiple objects.
+             */
+            objectGroup?: string;
+            /**
+             * Determines whether Command Line API should be available during the evaluation.
+             */
+            includeCommandLineAPI?: boolean;
+            /**
+             * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides <code>setPauseOnException</code> state.
+             */
+            silent?: boolean;
+            /**
+             * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page.
+             */
+            contextId?: ExecutionContextId;
+            /**
+             * Whether the result is expected to be a JSON object that should be sent by value.
+             */
+            returnByValue?: boolean;
+            /**
+             * Whether preview should be generated for the result.
+             * @experimental
+             */
+            generatePreview?: boolean;
+            /**
+             * Whether execution should be treated as initiated by user in the UI.
+             */
+            userGesture?: boolean;
+            /**
+             * Whether execution should <code>await</code> for resulting value and return once awaited promise is resolved.
+             */
+            awaitPromise?: boolean;
+        }
+
+        interface AwaitPromiseParameterType {
+            /**
+             * Identifier of the promise.
+             */
+            promiseObjectId: RemoteObjectId;
+            /**
+             * Whether the result is expected to be a JSON object that should be sent by value.
+             */
+            returnByValue?: boolean;
+            /**
+             * Whether preview should be generated for the result.
+             */
+            generatePreview?: boolean;
+        }
+
+        interface CallFunctionOnParameterType {
+            /**
+             * Declaration of the function to call.
+             */
+            functionDeclaration: string;
+            /**
+             * Identifier of the object to call function on. Either objectId or executionContextId should be specified.
+             */
+            objectId?: RemoteObjectId;
+            /**
+             * Call arguments. All call arguments must belong to the same JavaScript world as the target object.
+             */
+            arguments?: CallArgument[];
+            /**
+             * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides <code>setPauseOnException</code> state.
+             */
+            silent?: boolean;
+            /**
+             * Whether the result is expected to be a JSON object which should be sent by value.
+             */
+            returnByValue?: boolean;
+            /**
+             * Whether preview should be generated for the result.
+             * @experimental
+             */
+            generatePreview?: boolean;
+            /**
+             * Whether execution should be treated as initiated by user in the UI.
+             */
+            userGesture?: boolean;
+            /**
+             * Whether execution should <code>await</code> for resulting value and return once awaited promise is resolved.
+             */
+            awaitPromise?: boolean;
+            /**
+             * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified.
+             */
+            executionContextId?: ExecutionContextId;
+            /**
+             * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object.
+             */
+            objectGroup?: string;
+        }
+
+        interface GetPropertiesParameterType {
+            /**
+             * Identifier of the object to return properties for.
+             */
+            objectId: RemoteObjectId;
+            /**
+             * If true, returns properties belonging only to the element itself, not to its prototype chain.
+             */
+            ownProperties?: boolean;
+            /**
+             * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either.
+             * @experimental
+             */
+            accessorPropertiesOnly?: boolean;
+            /**
+             * Whether preview should be generated for the results.
+             * @experimental
+             */
+            generatePreview?: boolean;
+        }
+
+        interface ReleaseObjectParameterType {
+            /**
+             * Identifier of the object to release.
+             */
+            objectId: RemoteObjectId;
+        }
+
+        interface ReleaseObjectGroupParameterType {
+            /**
+             * Symbolic object group name.
+             */
+            objectGroup: string;
+        }
+
+        interface SetCustomObjectFormatterEnabledParameterType {
+            enabled: boolean;
+        }
+
+        interface CompileScriptParameterType {
+            /**
+             * Expression to compile.
+             */
+            expression: string;
+            /**
+             * Source url to be set for the script.
+             */
+            sourceURL: string;
+            /**
+             * Specifies whether the compiled script should be persisted.
+             */
+            persistScript: boolean;
+            /**
+             * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page.
+             */
+            executionContextId?: ExecutionContextId;
+        }
+
+        interface RunScriptParameterType {
+            /**
+             * Id of the script to run.
+             */
+            scriptId: ScriptId;
+            /**
+             * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page.
+             */
+            executionContextId?: ExecutionContextId;
+            /**
+             * Symbolic group name that can be used to release multiple objects.
+             */
+            objectGroup?: string;
+            /**
+             * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides <code>setPauseOnException</code> state.
+             */
+            silent?: boolean;
+            /**
+             * Determines whether Command Line API should be available during the evaluation.
+             */
+            includeCommandLineAPI?: boolean;
+            /**
+             * Whether the result is expected to be a JSON object which should be sent by value.
+             */
+            returnByValue?: boolean;
+            /**
+             * Whether preview should be generated for the result.
+             */
+            generatePreview?: boolean;
+            /**
+             * Whether execution should <code>await</code> for resulting value and return once awaited promise is resolved.
+             */
+            awaitPromise?: boolean;
+        }
+
+        interface QueryObjectsParameterType {
+            /**
+             * Identifier of the prototype to return objects for.
+             */
+            prototypeObjectId: RemoteObjectId;
+        }
+
+        interface GlobalLexicalScopeNamesParameterType {
+            /**
+             * Specifies in which execution context to lookup global scope variables.
+             */
+            executionContextId?: ExecutionContextId;
+        }
+
+        interface EvaluateReturnType {
+            /**
+             * Evaluation result.
+             */
+            result: RemoteObject;
+            /**
+             * Exception details.
+             */
+            exceptionDetails?: ExceptionDetails;
+        }
+
+        interface AwaitPromiseReturnType {
+            /**
+             * Promise result. Will contain rejected value if promise was rejected.
+             */
+            result: RemoteObject;
+            /**
+             * Exception details if stack strace is available.
+             */
+            exceptionDetails?: ExceptionDetails;
+        }
+
+        interface CallFunctionOnReturnType {
+            /**
+             * Call result.
+             */
+            result: RemoteObject;
+            /**
+             * Exception details.
+             */
+            exceptionDetails?: ExceptionDetails;
+        }
+
+        interface GetPropertiesReturnType {
+            /**
+             * Object properties.
+             */
+            result: PropertyDescriptor[];
+            /**
+             * Internal object properties (only of the element itself).
+             */
+            internalProperties?: InternalPropertyDescriptor[];
+            /**
+             * Exception details.
+             */
+            exceptionDetails?: ExceptionDetails;
+        }
+
+        interface CompileScriptReturnType {
+            /**
+             * Id of the script.
+             */
+            scriptId?: ScriptId;
+            /**
+             * Exception details.
+             */
+            exceptionDetails?: ExceptionDetails;
+        }
+
+        interface RunScriptReturnType {
+            /**
+             * Run result.
+             */
+            result: RemoteObject;
+            /**
+             * Exception details.
+             */
+            exceptionDetails?: ExceptionDetails;
+        }
+
+        interface QueryObjectsReturnType {
+            /**
+             * Array with objects.
+             */
+            objects: RemoteObject;
+        }
+
+        interface GlobalLexicalScopeNamesReturnType {
+            names: string[];
+        }
+
+        interface ExecutionContextCreatedEventDataType {
+            /**
+             * A newly created execution context.
+             */
+            context: ExecutionContextDescription;
+        }
+
+        interface ExecutionContextDestroyedEventDataType {
+            /**
+             * Id of the destroyed context
+             */
+            executionContextId: ExecutionContextId;
+        }
+
+        interface ExceptionThrownEventDataType {
+            /**
+             * Timestamp of the exception.
+             */
+            timestamp: Timestamp;
+            exceptionDetails: ExceptionDetails;
+        }
+
+        interface ExceptionRevokedEventDataType {
+            /**
+             * Reason describing why exception was revoked.
+             */
+            reason: string;
+            /**
+             * The id of revoked exception, as reported in <code>exceptionThrown</code>.
+             */
+            exceptionId: number;
+        }
+
+        interface ConsoleAPICalledEventDataType {
+            /**
+             * Type of the call.
+             */
+            type: string;
+            /**
+             * Call arguments.
+             */
+            args: RemoteObject[];
+            /**
+             * Identifier of the context where the call was made.
+             */
+            executionContextId: ExecutionContextId;
+            /**
+             * Call timestamp.
+             */
+            timestamp: Timestamp;
+            /**
+             * Stack trace captured when the call was made.
+             */
+            stackTrace?: StackTrace;
+            /**
+             * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context.
+             * @experimental
+             */
+            context?: string;
+        }
+
+        interface InspectRequestedEventDataType {
+            object: RemoteObject;
+            hints: {};
+        }
+    }
+
+    namespace Debugger {
+        /**
+         * Breakpoint identifier.
+         */
+        type BreakpointId = string;
+
+        /**
+         * Call frame identifier.
+         */
+        type CallFrameId = string;
+
+        /**
+         * Location in the source code.
+         */
+        interface Location {
+            /**
+             * Script identifier as reported in the <code>Debugger.scriptParsed</code>.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * Line number in the script (0-based).
+             */
+            lineNumber: number;
+            /**
+             * Column number in the script (0-based).
+             */
+            columnNumber?: number;
+        }
+
+        /**
+         * Location in the source code.
+         * @experimental
+         */
+        interface ScriptPosition {
+            lineNumber: number;
+            columnNumber: number;
+        }
+
+        /**
+         * JavaScript call frame. Array of call frames form the call stack.
+         */
+        interface CallFrame {
+            /**
+             * Call frame identifier. This identifier is only valid while the virtual machine is paused.
+             */
+            callFrameId: CallFrameId;
+            /**
+             * Name of the JavaScript function called on this call frame.
+             */
+            functionName: string;
+            /**
+             * Location in the source code.
+             */
+            functionLocation?: Location;
+            /**
+             * Location in the source code.
+             */
+            location: Location;
+            /**
+             * JavaScript script name or url.
+             */
+            url: string;
+            /**
+             * Scope chain for this call frame.
+             */
+            scopeChain: Scope[];
+            /**
+             * <code>this</code> object for this call frame.
+             */
+            this: Runtime.RemoteObject;
+            /**
+             * The value being returned, if the function is at return point.
+             */
+            returnValue?: Runtime.RemoteObject;
+        }
+
+        /**
+         * Scope description.
+         */
+        interface Scope {
+            /**
+             * Scope type.
+             */
+            type: string;
+            /**
+             * Object representing the scope. For <code>global</code> and <code>with</code> scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties.
+             */
+            object: Runtime.RemoteObject;
+            name?: string;
+            /**
+             * Location in the source code where scope starts
+             */
+            startLocation?: Location;
+            /**
+             * Location in the source code where scope ends
+             */
+            endLocation?: Location;
+        }
+
+        /**
+         * Search match for resource.
+         */
+        interface SearchMatch {
+            /**
+             * Line number in resource content.
+             */
+            lineNumber: number;
+            /**
+             * Line with match content.
+             */
+            lineContent: string;
+        }
+
+        interface BreakLocation {
+            /**
+             * Script identifier as reported in the <code>Debugger.scriptParsed</code>.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * Line number in the script (0-based).
+             */
+            lineNumber: number;
+            /**
+             * Column number in the script (0-based).
+             */
+            columnNumber?: number;
+            type?: string;
+        }
+
+        interface SetBreakpointsActiveParameterType {
+            /**
+             * New value for breakpoints active state.
+             */
+            active: boolean;
+        }
+
+        interface SetSkipAllPausesParameterType {
+            /**
+             * New value for skip pauses state.
+             */
+            skip: boolean;
+        }
+
+        interface SetBreakpointByUrlParameterType {
+            /**
+             * Line number to set breakpoint at.
+             */
+            lineNumber: number;
+            /**
+             * URL of the resources to set breakpoint on.
+             */
+            url?: string;
+            /**
+             * Regex pattern for the URLs of the resources to set breakpoints on. Either <code>url</code> or <code>urlRegex</code> must be specified.
+             */
+            urlRegex?: string;
+            /**
+             * Script hash of the resources to set breakpoint on.
+             */
+            scriptHash?: string;
+            /**
+             * Offset in the line to set breakpoint at.
+             */
+            columnNumber?: number;
+            /**
+             * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
+             */
+            condition?: string;
+        }
+
+        interface SetBreakpointParameterType {
+            /**
+             * Location to set breakpoint in.
+             */
+            location: Location;
+            /**
+             * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
+             */
+            condition?: string;
+        }
+
+        interface RemoveBreakpointParameterType {
+            breakpointId: BreakpointId;
+        }
+
+        interface GetPossibleBreakpointsParameterType {
+            /**
+             * Start of range to search possible breakpoint locations in.
+             */
+            start: Location;
+            /**
+             * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range.
+             */
+            end?: Location;
+            /**
+             * Only consider locations which are in the same (non-nested) function as start.
+             */
+            restrictToFunction?: boolean;
+        }
+
+        interface ContinueToLocationParameterType {
+            /**
+             * Location to continue to.
+             */
+            location: Location;
+            targetCallFrames?: string;
+        }
+
+        interface PauseOnAsyncCallParameterType {
+            /**
+             * Debugger will pause when async call with given stack trace is started.
+             */
+            parentStackTraceId: Runtime.StackTraceId;
+        }
+
+        interface StepIntoParameterType {
+            /**
+             * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause.
+             * @experimental
+             */
+            breakOnAsyncCall?: boolean;
+        }
+
+        interface GetStackTraceParameterType {
+            stackTraceId: Runtime.StackTraceId;
+        }
+
+        interface SearchInContentParameterType {
+            /**
+             * Id of the script to search in.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * String to search for.
+             */
+            query: string;
+            /**
+             * If true, search is case sensitive.
+             */
+            caseSensitive?: boolean;
+            /**
+             * If true, treats string parameter as regex.
+             */
+            isRegex?: boolean;
+        }
+
+        interface SetScriptSourceParameterType {
+            /**
+             * Id of the script to edit.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * New content of the script.
+             */
+            scriptSource: string;
+            /**
+             *  If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code.
+             */
+            dryRun?: boolean;
+        }
+
+        interface RestartFrameParameterType {
+            /**
+             * Call frame identifier to evaluate on.
+             */
+            callFrameId: CallFrameId;
+        }
+
+        interface GetScriptSourceParameterType {
+            /**
+             * Id of the script to get source for.
+             */
+            scriptId: Runtime.ScriptId;
+        }
+
+        interface SetPauseOnExceptionsParameterType {
+            /**
+             * Pause on exceptions mode.
+             */
+            state: string;
+        }
+
+        interface EvaluateOnCallFrameParameterType {
+            /**
+             * Call frame identifier to evaluate on.
+             */
+            callFrameId: CallFrameId;
+            /**
+             * Expression to evaluate.
+             */
+            expression: string;
+            /**
+             * String object group name to put result into (allows rapid releasing resulting object handles using <code>releaseObjectGroup</code>).
+             */
+            objectGroup?: string;
+            /**
+             * Specifies whether command line API should be available to the evaluated expression, defaults to false.
+             */
+            includeCommandLineAPI?: boolean;
+            /**
+             * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides <code>setPauseOnException</code> state.
+             */
+            silent?: boolean;
+            /**
+             * Whether the result is expected to be a JSON object that should be sent by value.
+             */
+            returnByValue?: boolean;
+            /**
+             * Whether preview should be generated for the result.
+             * @experimental
+             */
+            generatePreview?: boolean;
+            /**
+             * Whether to throw an exception if side effect cannot be ruled out during evaluation.
+             */
+            throwOnSideEffect?: boolean;
+        }
+
+        interface SetVariableValueParameterType {
+            /**
+             * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually.
+             */
+            scopeNumber: number;
+            /**
+             * Variable name.
+             */
+            variableName: string;
+            /**
+             * New variable value.
+             */
+            newValue: Runtime.CallArgument;
+            /**
+             * Id of callframe that holds variable.
+             */
+            callFrameId: CallFrameId;
+        }
+
+        interface SetReturnValueParameterType {
+            /**
+             * New return value.
+             */
+            newValue: Runtime.CallArgument;
+        }
+
+        interface SetAsyncCallStackDepthParameterType {
+            /**
+             * Maximum depth of async call stacks. Setting to <code>0</code> will effectively disable collecting async call stacks (default).
+             */
+            maxDepth: number;
+        }
+
+        interface SetBlackboxPatternsParameterType {
+            /**
+             * Array of regexps that will be used to check script url for blackbox state.
+             */
+            patterns: string[];
+        }
+
+        interface SetBlackboxedRangesParameterType {
+            /**
+             * Id of the script.
+             */
+            scriptId: Runtime.ScriptId;
+            positions: ScriptPosition[];
+        }
+
+        interface EnableReturnType {
+            /**
+             * Unique identifier of the debugger.
+             * @experimental
+             */
+            debuggerId: Runtime.UniqueDebuggerId;
+        }
+
+        interface SetBreakpointByUrlReturnType {
+            /**
+             * Id of the created breakpoint for further reference.
+             */
+            breakpointId: BreakpointId;
+            /**
+             * List of the locations this breakpoint resolved into upon addition.
+             */
+            locations: Location[];
+        }
+
+        interface SetBreakpointReturnType {
+            /**
+             * Id of the created breakpoint for further reference.
+             */
+            breakpointId: BreakpointId;
+            /**
+             * Location this breakpoint resolved into.
+             */
+            actualLocation: Location;
+        }
+
+        interface GetPossibleBreakpointsReturnType {
+            /**
+             * List of the possible breakpoint locations.
+             */
+            locations: BreakLocation[];
+        }
+
+        interface GetStackTraceReturnType {
+            stackTrace: Runtime.StackTrace;
+        }
+
+        interface SearchInContentReturnType {
+            /**
+             * List of search matches.
+             */
+            result: SearchMatch[];
+        }
+
+        interface SetScriptSourceReturnType {
+            /**
+             * New stack trace in case editing has happened while VM was stopped.
+             */
+            callFrames?: CallFrame[];
+            /**
+             * Whether current call stack  was modified after applying the changes.
+             */
+            stackChanged?: boolean;
+            /**
+             * Async stack trace, if any.
+             */
+            asyncStackTrace?: Runtime.StackTrace;
+            /**
+             * Async stack trace, if any.
+             * @experimental
+             */
+            asyncStackTraceId?: Runtime.StackTraceId;
+            /**
+             * Exception details if any.
+             */
+            exceptionDetails?: Runtime.ExceptionDetails;
+        }
+
+        interface RestartFrameReturnType {
+            /**
+             * New stack trace.
+             */
+            callFrames: CallFrame[];
+            /**
+             * Async stack trace, if any.
+             */
+            asyncStackTrace?: Runtime.StackTrace;
+            /**
+             * Async stack trace, if any.
+             * @experimental
+             */
+            asyncStackTraceId?: Runtime.StackTraceId;
+        }
+
+        interface GetScriptSourceReturnType {
+            /**
+             * Script source.
+             */
+            scriptSource: string;
+        }
+
+        interface EvaluateOnCallFrameReturnType {
+            /**
+             * Object wrapper for the evaluation result.
+             */
+            result: Runtime.RemoteObject;
+            /**
+             * Exception details.
+             */
+            exceptionDetails?: Runtime.ExceptionDetails;
+        }
+
+        interface ScriptParsedEventDataType {
+            /**
+             * Identifier of the script parsed.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * URL or name of the script parsed (if any).
+             */
+            url: string;
+            /**
+             * Line offset of the script within the resource with given URL (for script tags).
+             */
+            startLine: number;
+            /**
+             * Column offset of the script within the resource with given URL.
+             */
+            startColumn: number;
+            /**
+             * Last line of the script.
+             */
+            endLine: number;
+            /**
+             * Length of the last line of the script.
+             */
+            endColumn: number;
+            /**
+             * Specifies script creation context.
+             */
+            executionContextId: Runtime.ExecutionContextId;
+            /**
+             * Content hash of the script.
+             */
+            hash: string;
+            /**
+             * Embedder-specific auxiliary data.
+             */
+            executionContextAuxData?: {};
+            /**
+             * True, if this script is generated as a result of the live edit operation.
+             * @experimental
+             */
+            isLiveEdit?: boolean;
+            /**
+             * URL of source map associated with script (if any).
+             */
+            sourceMapURL?: string;
+            /**
+             * True, if this script has sourceURL.
+             */
+            hasSourceURL?: boolean;
+            /**
+             * True, if this script is ES6 module.
+             */
+            isModule?: boolean;
+            /**
+             * This script length.
+             */
+            length?: number;
+            /**
+             * JavaScript top stack frame of where the script parsed event was triggered if available.
+             * @experimental
+             */
+            stackTrace?: Runtime.StackTrace;
+        }
+
+        interface ScriptFailedToParseEventDataType {
+            /**
+             * Identifier of the script parsed.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * URL or name of the script parsed (if any).
+             */
+            url: string;
+            /**
+             * Line offset of the script within the resource with given URL (for script tags).
+             */
+            startLine: number;
+            /**
+             * Column offset of the script within the resource with given URL.
+             */
+            startColumn: number;
+            /**
+             * Last line of the script.
+             */
+            endLine: number;
+            /**
+             * Length of the last line of the script.
+             */
+            endColumn: number;
+            /**
+             * Specifies script creation context.
+             */
+            executionContextId: Runtime.ExecutionContextId;
+            /**
+             * Content hash of the script.
+             */
+            hash: string;
+            /**
+             * Embedder-specific auxiliary data.
+             */
+            executionContextAuxData?: {};
+            /**
+             * URL of source map associated with script (if any).
+             */
+            sourceMapURL?: string;
+            /**
+             * True, if this script has sourceURL.
+             */
+            hasSourceURL?: boolean;
+            /**
+             * True, if this script is ES6 module.
+             */
+            isModule?: boolean;
+            /**
+             * This script length.
+             */
+            length?: number;
+            /**
+             * JavaScript top stack frame of where the script parsed event was triggered if available.
+             * @experimental
+             */
+            stackTrace?: Runtime.StackTrace;
+        }
+
+        interface BreakpointResolvedEventDataType {
+            /**
+             * Breakpoint unique identifier.
+             */
+            breakpointId: BreakpointId;
+            /**
+             * Actual breakpoint location.
+             */
+            location: Location;
+        }
+
+        interface PausedEventDataType {
+            /**
+             * Call stack the virtual machine stopped on.
+             */
+            callFrames: CallFrame[];
+            /**
+             * Pause reason.
+             */
+            reason: string;
+            /**
+             * Object containing break-specific auxiliary properties.
+             */
+            data?: {};
+            /**
+             * Hit breakpoints IDs
+             */
+            hitBreakpoints?: string[];
+            /**
+             * Async stack trace, if any.
+             */
+            asyncStackTrace?: Runtime.StackTrace;
+            /**
+             * Async stack trace, if any.
+             * @experimental
+             */
+            asyncStackTraceId?: Runtime.StackTraceId;
+            /**
+             * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after <code>Debugger.stepInto</code> call with <code>breakOnAsynCall</code> flag.
+             * @experimental
+             */
+            asyncCallStackTraceId?: Runtime.StackTraceId;
+        }
+    }
+
+    namespace Console {
+        /**
+         * Console message.
+         */
+        interface ConsoleMessage {
+            /**
+             * Message source.
+             */
+            source: string;
+            /**
+             * Message severity.
+             */
+            level: string;
+            /**
+             * Message text.
+             */
+            text: string;
+            /**
+             * URL of the message origin.
+             */
+            url?: string;
+            /**
+             * Line number in the resource that generated this message (1-based).
+             */
+            line?: number;
+            /**
+             * Column number in the resource that generated this message (1-based).
+             */
+            column?: number;
+        }
+
+        interface MessageAddedEventDataType {
+            /**
+             * Console message that has been added.
+             */
+            message: ConsoleMessage;
+        }
+    }
+
+    namespace Profiler {
+        /**
+         * Profile node. Holds callsite information, execution statistics and child nodes.
+         */
+        interface ProfileNode {
+            /**
+             * Unique id of the node.
+             */
+            id: number;
+            /**
+             * Function location.
+             */
+            callFrame: Runtime.CallFrame;
+            /**
+             * Number of samples where this node was on top of the call stack.
+             */
+            hitCount?: number;
+            /**
+             * Child node ids.
+             */
+            children?: number[];
+            /**
+             * The reason of being not optimized. The function may be deoptimized or marked as don't optimize.
+             */
+            deoptReason?: string;
+            /**
+             * An array of source position ticks.
+             */
+            positionTicks?: PositionTickInfo[];
+        }
+
+        /**
+         * Profile.
+         */
+        interface Profile {
+            /**
+             * The list of profile nodes. First item is the root node.
+             */
+            nodes: ProfileNode[];
+            /**
+             * Profiling start timestamp in microseconds.
+             */
+            startTime: number;
+            /**
+             * Profiling end timestamp in microseconds.
+             */
+            endTime: number;
+            /**
+             * Ids of samples top nodes.
+             */
+            samples?: number[];
+            /**
+             * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime.
+             */
+            timeDeltas?: number[];
+        }
+
+        /**
+         * Specifies a number of samples attributed to a certain source position.
+         */
+        interface PositionTickInfo {
+            /**
+             * Source line number (1-based).
+             */
+            line: number;
+            /**
+             * Number of samples attributed to the source line.
+             */
+            ticks: number;
+        }
+
+        /**
+         * Coverage data for a source range.
+         */
+        interface CoverageRange {
+            /**
+             * JavaScript script source offset for the range start.
+             */
+            startOffset: number;
+            /**
+             * JavaScript script source offset for the range end.
+             */
+            endOffset: number;
+            /**
+             * Collected execution count of the source range.
+             */
+            count: number;
+        }
+
+        /**
+         * Coverage data for a JavaScript function.
+         */
+        interface FunctionCoverage {
+            /**
+             * JavaScript function name.
+             */
+            functionName: string;
+            /**
+             * Source ranges inside the function with coverage data.
+             */
+            ranges: CoverageRange[];
+            /**
+             * Whether coverage data for this function has block granularity.
+             */
+            isBlockCoverage: boolean;
+        }
+
+        /**
+         * Coverage data for a JavaScript script.
+         */
+        interface ScriptCoverage {
+            /**
+             * JavaScript script id.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * JavaScript script name or url.
+             */
+            url: string;
+            /**
+             * Functions contained in the script that has coverage data.
+             */
+            functions: FunctionCoverage[];
+        }
+
+        /**
+         * Describes a type collected during runtime.
+         * @experimental
+         */
+        interface TypeObject {
+            /**
+             * Name of a type collected with type profiling.
+             */
+            name: string;
+        }
+
+        /**
+         * Source offset and types for a parameter or return value.
+         * @experimental
+         */
+        interface TypeProfileEntry {
+            /**
+             * Source offset of the parameter or end of function for return values.
+             */
+            offset: number;
+            /**
+             * The types for this parameter or return value.
+             */
+            types: TypeObject[];
+        }
+
+        /**
+         * Type profile data collected during runtime for a JavaScript script.
+         * @experimental
+         */
+        interface ScriptTypeProfile {
+            /**
+             * JavaScript script id.
+             */
+            scriptId: Runtime.ScriptId;
+            /**
+             * JavaScript script name or url.
+             */
+            url: string;
+            /**
+             * Type profile entries for parameters and return values of the functions in the script.
+             */
+            entries: TypeProfileEntry[];
+        }
+
+        interface SetSamplingIntervalParameterType {
+            /**
+             * New sampling interval in microseconds.
+             */
+            interval: number;
+        }
+
+        interface StartPreciseCoverageParameterType {
+            /**
+             * Collect accurate call counts beyond simple 'covered' or 'not covered'.
+             */
+            callCount?: boolean;
+            /**
+             * Collect block-based coverage.
+             */
+            detailed?: boolean;
+        }
+
+        interface StopReturnType {
+            /**
+             * Recorded profile.
+             */
+            profile: Profile;
+        }
+
+        interface TakePreciseCoverageReturnType {
+            /**
+             * Coverage data for the current isolate.
+             */
+            result: ScriptCoverage[];
+        }
+
+        interface GetBestEffortCoverageReturnType {
+            /**
+             * Coverage data for the current isolate.
+             */
+            result: ScriptCoverage[];
+        }
+
+        interface TakeTypeProfileReturnType {
+            /**
+             * Type profile for all scripts since startTypeProfile() was turned on.
+             */
+            result: ScriptTypeProfile[];
+        }
+
+        interface ConsoleProfileStartedEventDataType {
+            id: string;
+            /**
+             * Location of console.profile().
+             */
+            location: Debugger.Location;
+            /**
+             * Profile title passed as an argument to console.profile().
+             */
+            title?: string;
+        }
+
+        interface ConsoleProfileFinishedEventDataType {
+            id: string;
+            /**
+             * Location of console.profileEnd().
+             */
+            location: Debugger.Location;
+            profile: Profile;
+            /**
+             * Profile title passed as an argument to console.profile().
+             */
+            title?: string;
+        }
+    }
+
+    namespace HeapProfiler {
+        /**
+         * Heap snapshot object id.
+         */
+        type HeapSnapshotObjectId = string;
+
+        /**
+         * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes.
+         */
+        interface SamplingHeapProfileNode {
+            /**
+             * Function location.
+             */
+            callFrame: Runtime.CallFrame;
+            /**
+             * Allocations size in bytes for the node excluding children.
+             */
+            selfSize: number;
+            /**
+             * Child nodes.
+             */
+            children: SamplingHeapProfileNode[];
+        }
+
+        /**
+         * Profile.
+         */
+        interface SamplingHeapProfile {
+            head: SamplingHeapProfileNode;
+        }
+
+        interface StartTrackingHeapObjectsParameterType {
+            trackAllocations?: boolean;
+        }
+
+        interface StopTrackingHeapObjectsParameterType {
+            /**
+             * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped.
+             */
+            reportProgress?: boolean;
+        }
+
+        interface TakeHeapSnapshotParameterType {
+            /**
+             * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken.
+             */
+            reportProgress?: boolean;
+        }
+
+        interface GetObjectByHeapObjectIdParameterType {
+            objectId: HeapSnapshotObjectId;
+            /**
+             * Symbolic group name that can be used to release multiple objects.
+             */
+            objectGroup?: string;
+        }
+
+        interface AddInspectedHeapObjectParameterType {
+            /**
+             * Heap snapshot object id to be accessible by means of $x command line API.
+             */
+            heapObjectId: HeapSnapshotObjectId;
+        }
+
+        interface GetHeapObjectIdParameterType {
+            /**
+             * Identifier of the object to get heap object id for.
+             */
+            objectId: Runtime.RemoteObjectId;
+        }
+
+        interface StartSamplingParameterType {
+            /**
+             * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes.
+             */
+            samplingInterval?: number;
+        }
+
+        interface GetObjectByHeapObjectIdReturnType {
+            /**
+             * Evaluation result.
+             */
+            result: Runtime.RemoteObject;
+        }
+
+        interface GetHeapObjectIdReturnType {
+            /**
+             * Id of the heap snapshot object corresponding to the passed remote object id.
+             */
+            heapSnapshotObjectId: HeapSnapshotObjectId;
+        }
+
+        interface StopSamplingReturnType {
+            /**
+             * Recorded sampling heap profile.
+             */
+            profile: SamplingHeapProfile;
+        }
+
+        interface GetSamplingProfileReturnType {
+            /**
+             * Return the sampling profile being collected.
+             */
+            profile: SamplingHeapProfile;
+        }
+
+        interface AddHeapSnapshotChunkEventDataType {
+            chunk: string;
+        }
+
+        interface ReportHeapSnapshotProgressEventDataType {
+            done: number;
+            total: number;
+            finished?: boolean;
+        }
+
+        interface LastSeenObjectIdEventDataType {
+            lastSeenObjectId: number;
+            timestamp: number;
+        }
+
+        interface HeapStatsUpdateEventDataType {
+            /**
+             * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment.
+             */
+            statsUpdate: number[];
+        }
+    }
+
+    namespace NodeTracing {
+        interface TraceConfig {
+            /**
+             * Controls how the trace buffer stores data.
+             */
+            recordMode?: string;
+            /**
+             * Included category filters.
+             */
+            includedCategories: string[];
+        }
+
+        interface StartParameterType {
+            traceConfig: TraceConfig;
+        }
+
+        interface GetCategoriesReturnType {
+            /**
+             * A list of supported tracing categories.
+             */
+            categories: string[];
+        }
+
+        interface DataCollectedEventDataType {
+            value: Array<{}>;
+        }
+    }
+
+    namespace NodeWorker {
+        type WorkerID = string;
+
+        /**
+         * Unique identifier of attached debugging session.
+         */
+        type SessionID = string;
+
+        interface WorkerInfo {
+            workerId: WorkerID;
+            type: string;
+            title: string;
+            url: string;
+        }
+
+        interface SendMessageToWorkerParameterType {
+            message: string;
+            /**
+             * Identifier of the session.
+             */
+            sessionId: SessionID;
+        }
+
+        interface EnableParameterType {
+            /**
+             * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger`
+             * message to run them.
+             */
+            waitForDebuggerOnStart: boolean;
+        }
+
+        interface DetachParameterType {
+            sessionId: SessionID;
+        }
+
+        interface AttachedToWorkerEventDataType {
+            /**
+             * Identifier assigned to the session used to send/receive messages.
+             */
+            sessionId: SessionID;
+            workerInfo: WorkerInfo;
+            waitingForDebugger: boolean;
+        }
+
+        interface DetachedFromWorkerEventDataType {
+            /**
+             * Detached session identifier.
+             */
+            sessionId: SessionID;
+        }
+
+        interface ReceivedMessageFromWorkerEventDataType {
+            /**
+             * Identifier of a session which sends a message.
+             */
+            sessionId: SessionID;
+            message: string;
+        }
+    }
+
+    namespace NodeRuntime {
+        interface NotifyWhenWaitingForDisconnectParameterType {
+            enabled: boolean;
+        }
+    }
+
+    /**
+     * The inspector.Session is used for dispatching messages to the V8 inspector back-end and receiving message responses and notifications.
+     */
+    class Session extends EventEmitter {
+        /**
+         * Create a new instance of the inspector.Session class.
+         * The inspector session needs to be connected through session.connect() before the messages can be dispatched to the inspector backend.
+         */
+        constructor();
+
+        /**
+         * Connects a session to the inspector back-end.
+         * An exception will be thrown if there is already a connected session established either
+         * through the API or by a front-end connected to the Inspector WebSocket port.
+         */
+        connect(): void;
+
+        /**
+         * Immediately close the session. All pending message callbacks will be called with an error.
+         * session.connect() will need to be called to be able to send messages again.
+         * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints.
+         */
+        disconnect(): void;
+
+        /**
+         * Posts a message to the inspector back-end. callback will be notified when a response is received.
+         * callback is a function that accepts two optional arguments - error and message-specific result.
+         */
+        post(method: string, params?: {}, callback?: (err: Error | null, params?: {}) => void): void;
+        post(method: string, callback?: (err: Error | null, params?: {}) => void): void;
+
+        /**
+         * Returns supported domains.
+         */
+        post(method: "Schema.getDomains", callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void;
+
+        /**
+         * Evaluates expression on global object.
+         */
+        post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void;
+        post(method: "Runtime.evaluate", callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void;
+
+        /**
+         * Add handler to promise with given promise object id.
+         */
+        post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void;
+        post(method: "Runtime.awaitPromise", callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void;
+
+        /**
+         * Calls function with given declaration on the given object. Object group of the result is inherited from the target object.
+         */
+        post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void;
+        post(method: "Runtime.callFunctionOn", callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void;
+
+        /**
+         * Returns properties of a given object. Object group of the result is inherited from the target object.
+         */
+        post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void;
+        post(method: "Runtime.getProperties", callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void;
+
+        /**
+         * Releases remote object with given id.
+         */
+        post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Runtime.releaseObject", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Releases all remote objects that belong to a given group.
+         */
+        post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Runtime.releaseObjectGroup", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Tells inspected instance to run if it was waiting for debugger to attach.
+         */
+        post(method: "Runtime.runIfWaitingForDebugger", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Enables reporting of execution contexts creation by means of <code>executionContextCreated</code> event. When the reporting gets enabled the event will be sent immediately for each existing execution context.
+         */
+        post(method: "Runtime.enable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Disables reporting of execution contexts creation.
+         */
+        post(method: "Runtime.disable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Discards collected exceptions and console API calls.
+         */
+        post(method: "Runtime.discardConsoleEntries", callback?: (err: Error | null) => void): void;
+
+        /**
+         * @experimental
+         */
+        post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Runtime.setCustomObjectFormatterEnabled", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Compiles expression.
+         */
+        post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void;
+        post(method: "Runtime.compileScript", callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void;
+
+        /**
+         * Runs script with given id in a given context.
+         */
+        post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void;
+        post(method: "Runtime.runScript", callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void;
+
+        post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void;
+        post(method: "Runtime.queryObjects", callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void;
+
+        /**
+         * Returns all let, const and class variables from global scope.
+         */
+        post(
+            method: "Runtime.globalLexicalScopeNames",
+            params?: Runtime.GlobalLexicalScopeNamesParameterType,
+            callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void
+        ): void;
+        post(method: "Runtime.globalLexicalScopeNames", callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void;
+
+        /**
+         * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received.
+         */
+        post(method: "Debugger.enable", callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void;
+
+        /**
+         * Disables debugger for given page.
+         */
+        post(method: "Debugger.disable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Activates / deactivates all breakpoints on the page.
+         */
+        post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setBreakpointsActive", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc).
+         */
+        post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setSkipAllPauses", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in <code>locations</code> property. Further matching script parsing will result in subsequent <code>breakpointResolved</code> events issued. This logical breakpoint will survive page reloads.
+         */
+        post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void;
+        post(method: "Debugger.setBreakpointByUrl", callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void;
+
+        /**
+         * Sets JavaScript breakpoint at a given location.
+         */
+        post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void;
+        post(method: "Debugger.setBreakpoint", callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void;
+
+        /**
+         * Removes JavaScript breakpoint.
+         */
+        post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.removeBreakpoint", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same.
+         */
+        post(
+            method: "Debugger.getPossibleBreakpoints",
+            params?: Debugger.GetPossibleBreakpointsParameterType,
+            callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void
+        ): void;
+        post(method: "Debugger.getPossibleBreakpoints", callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void;
+
+        /**
+         * Continues execution until specific location is reached.
+         */
+        post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.continueToLocation", callback?: (err: Error | null) => void): void;
+
+        /**
+         * @experimental
+         */
+        post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.pauseOnAsyncCall", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Steps over the statement.
+         */
+        post(method: "Debugger.stepOver", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Steps into the function call.
+         */
+        post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.stepInto", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Steps out of the function call.
+         */
+        post(method: "Debugger.stepOut", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Stops on the next JavaScript statement.
+         */
+        post(method: "Debugger.pause", callback?: (err: Error | null) => void): void;
+
+        /**
+         * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called.
+         * @experimental
+         */
+        post(method: "Debugger.scheduleStepIntoAsync", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Resumes JavaScript execution.
+         */
+        post(method: "Debugger.resume", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Returns stack trace with given <code>stackTraceId</code>.
+         * @experimental
+         */
+        post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void;
+        post(method: "Debugger.getStackTrace", callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void;
+
+        /**
+         * Searches for given string in script content.
+         */
+        post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void;
+        post(method: "Debugger.searchInContent", callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void;
+
+        /**
+         * Edits JavaScript source live.
+         */
+        post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void;
+        post(method: "Debugger.setScriptSource", callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void;
+
+        /**
+         * Restarts particular call frame from the beginning.
+         */
+        post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void;
+        post(method: "Debugger.restartFrame", callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void;
+
+        /**
+         * Returns source for the script with given id.
+         */
+        post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void;
+        post(method: "Debugger.getScriptSource", callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void;
+
+        /**
+         * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is <code>none</code>.
+         */
+        post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setPauseOnExceptions", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Evaluates expression on a given call frame.
+         */
+        post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void;
+        post(method: "Debugger.evaluateOnCallFrame", callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void;
+
+        /**
+         * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually.
+         */
+        post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setVariableValue", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Changes return value in top frame. Available only at return break position.
+         * @experimental
+         */
+        post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setReturnValue", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Enables or disables async call stacks tracking.
+         */
+        post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setAsyncCallStackDepth", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful.
+         * @experimental
+         */
+        post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setBlackboxPatterns", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted.
+         * @experimental
+         */
+        post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Debugger.setBlackboxedRanges", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Enables console domain, sends the messages collected so far to the client by means of the <code>messageAdded</code> notification.
+         */
+        post(method: "Console.enable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Disables console domain, prevents further console messages from being reported to the client.
+         */
+        post(method: "Console.disable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Does nothing.
+         */
+        post(method: "Console.clearMessages", callback?: (err: Error | null) => void): void;
+
+        post(method: "Profiler.enable", callback?: (err: Error | null) => void): void;
+
+        post(method: "Profiler.disable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started.
+         */
+        post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Profiler.setSamplingInterval", callback?: (err: Error | null) => void): void;
+
+        post(method: "Profiler.start", callback?: (err: Error | null) => void): void;
+
+        post(method: "Profiler.stop", callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void;
+
+        /**
+         * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters.
+         */
+        post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "Profiler.startPreciseCoverage", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code.
+         */
+        post(method: "Profiler.stopPreciseCoverage", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started.
+         */
+        post(method: "Profiler.takePreciseCoverage", callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void;
+
+        /**
+         * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection.
+         */
+        post(method: "Profiler.getBestEffortCoverage", callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void;
+
+        /**
+         * Enable type profile.
+         * @experimental
+         */
+        post(method: "Profiler.startTypeProfile", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Disable type profile. Disabling releases type profile data collected so far.
+         * @experimental
+         */
+        post(method: "Profiler.stopTypeProfile", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Collect type profile.
+         * @experimental
+         */
+        post(method: "Profiler.takeTypeProfile", callback?: (err: Error | null, params: Profiler.TakeTypeProfileReturnType) => void): void;
+
+        post(method: "HeapProfiler.enable", callback?: (err: Error | null) => void): void;
+
+        post(method: "HeapProfiler.disable", callback?: (err: Error | null) => void): void;
+
+        post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "HeapProfiler.startTrackingHeapObjects", callback?: (err: Error | null) => void): void;
+
+        post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "HeapProfiler.stopTrackingHeapObjects", callback?: (err: Error | null) => void): void;
+
+        post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "HeapProfiler.takeHeapSnapshot", callback?: (err: Error | null) => void): void;
+
+        post(method: "HeapProfiler.collectGarbage", callback?: (err: Error | null) => void): void;
+
+        post(
+            method: "HeapProfiler.getObjectByHeapObjectId",
+            params?: HeapProfiler.GetObjectByHeapObjectIdParameterType,
+            callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void
+        ): void;
+        post(method: "HeapProfiler.getObjectByHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void;
+
+        /**
+         * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions).
+         */
+        post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "HeapProfiler.addInspectedHeapObject", callback?: (err: Error | null) => void): void;
+
+        post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void;
+        post(method: "HeapProfiler.getHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void;
+
+        post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "HeapProfiler.startSampling", callback?: (err: Error | null) => void): void;
+
+        post(method: "HeapProfiler.stopSampling", callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void;
+
+        post(method: "HeapProfiler.getSamplingProfile", callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void;
+
+        /**
+         * Gets supported tracing categories.
+         */
+        post(method: "NodeTracing.getCategories", callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void;
+
+        /**
+         * Start trace events collection.
+         */
+        post(method: "NodeTracing.start", params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "NodeTracing.start", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Stop trace events collection. Remaining collected events will be sent as a sequence of
+         * dataCollected events followed by tracingComplete event.
+         */
+        post(method: "NodeTracing.stop", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Sends protocol message over session with given id.
+         */
+        post(method: "NodeWorker.sendMessageToWorker", params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "NodeWorker.sendMessageToWorker", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Instructs the inspector to attach to running workers. Will also attach to new workers
+         * as they start
+         */
+        post(method: "NodeWorker.enable", params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "NodeWorker.enable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Detaches from all running workers and disables attaching to new workers as they are started.
+         */
+        post(method: "NodeWorker.disable", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Detached from the worker with given sessionId.
+         */
+        post(method: "NodeWorker.detach", params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "NodeWorker.detach", callback?: (err: Error | null) => void): void;
+
+        /**
+         * Enable the `NodeRuntime.waitingForDisconnect`.
+         */
+        post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void;
+        post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", callback?: (err: Error | null) => void): void;
+
+        // Events
+
+        addListener(event: string, listener: (...args: any[]) => void): this;
+
+        /**
+         * Emitted when any notification from the V8 Inspector is received.
+         */
+        addListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this;
+
+        /**
+         * Issued when new execution context is created.
+         */
+        addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification<Runtime.ExecutionContextCreatedEventDataType>) => void): this;
+
+        /**
+         * Issued when execution context is destroyed.
+         */
+        addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification<Runtime.ExecutionContextDestroyedEventDataType>) => void): this;
+
+        /**
+         * Issued when all executionContexts were cleared in browser
+         */
+        addListener(event: "Runtime.executionContextsCleared", listener: () => void): this;
+
+        /**
+         * Issued when exception was thrown and unhandled.
+         */
+        addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification<Runtime.ExceptionThrownEventDataType>) => void): this;
+
+        /**
+         * Issued when unhandled exception was revoked.
+         */
+        addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification<Runtime.ExceptionRevokedEventDataType>) => void): this;
+
+        /**
+         * Issued when console API was called.
+         */
+        addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification<Runtime.ConsoleAPICalledEventDataType>) => void): this;
+
+        /**
+         * Issued when object should be inspected (for example, as a result of inspect() command line API call).
+         */
+        addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification<Runtime.InspectRequestedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger.
+         */
+        addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification<Debugger.ScriptParsedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine fails to parse the script.
+         */
+        addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification<Debugger.ScriptFailedToParseEventDataType>) => void): this;
+
+        /**
+         * Fired when breakpoint is resolved to an actual script and location.
+         */
+        addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification<Debugger.BreakpointResolvedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.
+         */
+        addListener(event: "Debugger.paused", listener: (message: InspectorNotification<Debugger.PausedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine resumed execution.
+         */
+        addListener(event: "Debugger.resumed", listener: () => void): this;
+
+        /**
+         * Issued when new console message is added.
+         */
+        addListener(event: "Console.messageAdded", listener: (message: InspectorNotification<Console.MessageAddedEventDataType>) => void): this;
+
+        /**
+         * Sent when new profile recording is started using console.profile() call.
+         */
+        addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification<Profiler.ConsoleProfileStartedEventDataType>) => void): this;
+
+        addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification<Profiler.ConsoleProfileFinishedEventDataType>) => void): this;
+        addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification<HeapProfiler.AddHeapSnapshotChunkEventDataType>) => void): this;
+        addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this;
+        addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification<HeapProfiler.ReportHeapSnapshotProgressEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event.
+         */
+        addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification<HeapProfiler.LastSeenObjectIdEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend may send update for one or more fragments
+         */
+        addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification<HeapProfiler.HeapStatsUpdateEventDataType>) => void): this;
+
+        /**
+         * Contains an bucket of collected trace events.
+         */
+        addListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification<NodeTracing.DataCollectedEventDataType>) => void): this;
+
+        /**
+         * Signals that tracing is stopped and there is no trace buffers pending flush, all data were
+         * delivered via dataCollected events.
+         */
+        addListener(event: "NodeTracing.tracingComplete", listener: () => void): this;
+
+        /**
+         * Issued when attached to a worker.
+         */
+        addListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification<NodeWorker.AttachedToWorkerEventDataType>) => void): this;
+
+        /**
+         * Issued when detached from the worker.
+         */
+        addListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification<NodeWorker.DetachedFromWorkerEventDataType>) => void): this;
+
+        /**
+         * Notifies about a new protocol message received from the session
+         * (session ID is provided in attachedToWorker notification).
+         */
+        addListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification<NodeWorker.ReceivedMessageFromWorkerEventDataType>) => void): this;
+
+        /**
+         * This event is fired instead of `Runtime.executionContextDestroyed` when
+         * enabled.
+         * It is fired when the Node process finished all code execution and is
+         * waiting for all frontends to disconnect.
+         */
+        addListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "inspectorNotification", message: InspectorNotification<{}>): boolean;
+        emit(event: "Runtime.executionContextCreated", message: InspectorNotification<Runtime.ExecutionContextCreatedEventDataType>): boolean;
+        emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification<Runtime.ExecutionContextDestroyedEventDataType>): boolean;
+        emit(event: "Runtime.executionContextsCleared"): boolean;
+        emit(event: "Runtime.exceptionThrown", message: InspectorNotification<Runtime.ExceptionThrownEventDataType>): boolean;
+        emit(event: "Runtime.exceptionRevoked", message: InspectorNotification<Runtime.ExceptionRevokedEventDataType>): boolean;
+        emit(event: "Runtime.consoleAPICalled", message: InspectorNotification<Runtime.ConsoleAPICalledEventDataType>): boolean;
+        emit(event: "Runtime.inspectRequested", message: InspectorNotification<Runtime.InspectRequestedEventDataType>): boolean;
+        emit(event: "Debugger.scriptParsed", message: InspectorNotification<Debugger.ScriptParsedEventDataType>): boolean;
+        emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification<Debugger.ScriptFailedToParseEventDataType>): boolean;
+        emit(event: "Debugger.breakpointResolved", message: InspectorNotification<Debugger.BreakpointResolvedEventDataType>): boolean;
+        emit(event: "Debugger.paused", message: InspectorNotification<Debugger.PausedEventDataType>): boolean;
+        emit(event: "Debugger.resumed"): boolean;
+        emit(event: "Console.messageAdded", message: InspectorNotification<Console.MessageAddedEventDataType>): boolean;
+        emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification<Profiler.ConsoleProfileStartedEventDataType>): boolean;
+        emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification<Profiler.ConsoleProfileFinishedEventDataType>): boolean;
+        emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification<HeapProfiler.AddHeapSnapshotChunkEventDataType>): boolean;
+        emit(event: "HeapProfiler.resetProfiles"): boolean;
+        emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification<HeapProfiler.ReportHeapSnapshotProgressEventDataType>): boolean;
+        emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification<HeapProfiler.LastSeenObjectIdEventDataType>): boolean;
+        emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification<HeapProfiler.HeapStatsUpdateEventDataType>): boolean;
+        emit(event: "NodeTracing.dataCollected", message: InspectorNotification<NodeTracing.DataCollectedEventDataType>): boolean;
+        emit(event: "NodeTracing.tracingComplete"): boolean;
+        emit(event: "NodeWorker.attachedToWorker", message: InspectorNotification<NodeWorker.AttachedToWorkerEventDataType>): boolean;
+        emit(event: "NodeWorker.detachedFromWorker", message: InspectorNotification<NodeWorker.DetachedFromWorkerEventDataType>): boolean;
+        emit(event: "NodeWorker.receivedMessageFromWorker", message: InspectorNotification<NodeWorker.ReceivedMessageFromWorkerEventDataType>): boolean;
+        emit(event: "NodeRuntime.waitingForDisconnect"): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+
+        /**
+         * Emitted when any notification from the V8 Inspector is received.
+         */
+        on(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this;
+
+        /**
+         * Issued when new execution context is created.
+         */
+        on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification<Runtime.ExecutionContextCreatedEventDataType>) => void): this;
+
+        /**
+         * Issued when execution context is destroyed.
+         */
+        on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification<Runtime.ExecutionContextDestroyedEventDataType>) => void): this;
+
+        /**
+         * Issued when all executionContexts were cleared in browser
+         */
+        on(event: "Runtime.executionContextsCleared", listener: () => void): this;
+
+        /**
+         * Issued when exception was thrown and unhandled.
+         */
+        on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification<Runtime.ExceptionThrownEventDataType>) => void): this;
+
+        /**
+         * Issued when unhandled exception was revoked.
+         */
+        on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification<Runtime.ExceptionRevokedEventDataType>) => void): this;
+
+        /**
+         * Issued when console API was called.
+         */
+        on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification<Runtime.ConsoleAPICalledEventDataType>) => void): this;
+
+        /**
+         * Issued when object should be inspected (for example, as a result of inspect() command line API call).
+         */
+        on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification<Runtime.InspectRequestedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger.
+         */
+        on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification<Debugger.ScriptParsedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine fails to parse the script.
+         */
+        on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification<Debugger.ScriptFailedToParseEventDataType>) => void): this;
+
+        /**
+         * Fired when breakpoint is resolved to an actual script and location.
+         */
+        on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification<Debugger.BreakpointResolvedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.
+         */
+        on(event: "Debugger.paused", listener: (message: InspectorNotification<Debugger.PausedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine resumed execution.
+         */
+        on(event: "Debugger.resumed", listener: () => void): this;
+
+        /**
+         * Issued when new console message is added.
+         */
+        on(event: "Console.messageAdded", listener: (message: InspectorNotification<Console.MessageAddedEventDataType>) => void): this;
+
+        /**
+         * Sent when new profile recording is started using console.profile() call.
+         */
+        on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification<Profiler.ConsoleProfileStartedEventDataType>) => void): this;
+
+        on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification<Profiler.ConsoleProfileFinishedEventDataType>) => void): this;
+        on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification<HeapProfiler.AddHeapSnapshotChunkEventDataType>) => void): this;
+        on(event: "HeapProfiler.resetProfiles", listener: () => void): this;
+        on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification<HeapProfiler.ReportHeapSnapshotProgressEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event.
+         */
+        on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification<HeapProfiler.LastSeenObjectIdEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend may send update for one or more fragments
+         */
+        on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification<HeapProfiler.HeapStatsUpdateEventDataType>) => void): this;
+
+        /**
+         * Contains an bucket of collected trace events.
+         */
+        on(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification<NodeTracing.DataCollectedEventDataType>) => void): this;
+
+        /**
+         * Signals that tracing is stopped and there is no trace buffers pending flush, all data were
+         * delivered via dataCollected events.
+         */
+        on(event: "NodeTracing.tracingComplete", listener: () => void): this;
+
+        /**
+         * Issued when attached to a worker.
+         */
+        on(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification<NodeWorker.AttachedToWorkerEventDataType>) => void): this;
+
+        /**
+         * Issued when detached from the worker.
+         */
+        on(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification<NodeWorker.DetachedFromWorkerEventDataType>) => void): this;
+
+        /**
+         * Notifies about a new protocol message received from the session
+         * (session ID is provided in attachedToWorker notification).
+         */
+        on(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification<NodeWorker.ReceivedMessageFromWorkerEventDataType>) => void): this;
+
+        /**
+         * This event is fired instead of `Runtime.executionContextDestroyed` when
+         * enabled.
+         * It is fired when the Node process finished all code execution and is
+         * waiting for all frontends to disconnect.
+         */
+        on(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+
+        /**
+         * Emitted when any notification from the V8 Inspector is received.
+         */
+        once(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this;
+
+        /**
+         * Issued when new execution context is created.
+         */
+        once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification<Runtime.ExecutionContextCreatedEventDataType>) => void): this;
+
+        /**
+         * Issued when execution context is destroyed.
+         */
+        once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification<Runtime.ExecutionContextDestroyedEventDataType>) => void): this;
+
+        /**
+         * Issued when all executionContexts were cleared in browser
+         */
+        once(event: "Runtime.executionContextsCleared", listener: () => void): this;
+
+        /**
+         * Issued when exception was thrown and unhandled.
+         */
+        once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification<Runtime.ExceptionThrownEventDataType>) => void): this;
+
+        /**
+         * Issued when unhandled exception was revoked.
+         */
+        once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification<Runtime.ExceptionRevokedEventDataType>) => void): this;
+
+        /**
+         * Issued when console API was called.
+         */
+        once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification<Runtime.ConsoleAPICalledEventDataType>) => void): this;
+
+        /**
+         * Issued when object should be inspected (for example, as a result of inspect() command line API call).
+         */
+        once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification<Runtime.InspectRequestedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger.
+         */
+        once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification<Debugger.ScriptParsedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine fails to parse the script.
+         */
+        once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification<Debugger.ScriptFailedToParseEventDataType>) => void): this;
+
+        /**
+         * Fired when breakpoint is resolved to an actual script and location.
+         */
+        once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification<Debugger.BreakpointResolvedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.
+         */
+        once(event: "Debugger.paused", listener: (message: InspectorNotification<Debugger.PausedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine resumed execution.
+         */
+        once(event: "Debugger.resumed", listener: () => void): this;
+
+        /**
+         * Issued when new console message is added.
+         */
+        once(event: "Console.messageAdded", listener: (message: InspectorNotification<Console.MessageAddedEventDataType>) => void): this;
+
+        /**
+         * Sent when new profile recording is started using console.profile() call.
+         */
+        once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification<Profiler.ConsoleProfileStartedEventDataType>) => void): this;
+
+        once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification<Profiler.ConsoleProfileFinishedEventDataType>) => void): this;
+        once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification<HeapProfiler.AddHeapSnapshotChunkEventDataType>) => void): this;
+        once(event: "HeapProfiler.resetProfiles", listener: () => void): this;
+        once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification<HeapProfiler.ReportHeapSnapshotProgressEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event.
+         */
+        once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification<HeapProfiler.LastSeenObjectIdEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend may send update for one or more fragments
+         */
+        once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification<HeapProfiler.HeapStatsUpdateEventDataType>) => void): this;
+
+        /**
+         * Contains an bucket of collected trace events.
+         */
+        once(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification<NodeTracing.DataCollectedEventDataType>) => void): this;
+
+        /**
+         * Signals that tracing is stopped and there is no trace buffers pending flush, all data were
+         * delivered via dataCollected events.
+         */
+        once(event: "NodeTracing.tracingComplete", listener: () => void): this;
+
+        /**
+         * Issued when attached to a worker.
+         */
+        once(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification<NodeWorker.AttachedToWorkerEventDataType>) => void): this;
+
+        /**
+         * Issued when detached from the worker.
+         */
+        once(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification<NodeWorker.DetachedFromWorkerEventDataType>) => void): this;
+
+        /**
+         * Notifies about a new protocol message received from the session
+         * (session ID is provided in attachedToWorker notification).
+         */
+        once(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification<NodeWorker.ReceivedMessageFromWorkerEventDataType>) => void): this;
+
+        /**
+         * This event is fired instead of `Runtime.executionContextDestroyed` when
+         * enabled.
+         * It is fired when the Node process finished all code execution and is
+         * waiting for all frontends to disconnect.
+         */
+        once(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+
+        /**
+         * Emitted when any notification from the V8 Inspector is received.
+         */
+        prependListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this;
+
+        /**
+         * Issued when new execution context is created.
+         */
+        prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification<Runtime.ExecutionContextCreatedEventDataType>) => void): this;
+
+        /**
+         * Issued when execution context is destroyed.
+         */
+        prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification<Runtime.ExecutionContextDestroyedEventDataType>) => void): this;
+
+        /**
+         * Issued when all executionContexts were cleared in browser
+         */
+        prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this;
+
+        /**
+         * Issued when exception was thrown and unhandled.
+         */
+        prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification<Runtime.ExceptionThrownEventDataType>) => void): this;
+
+        /**
+         * Issued when unhandled exception was revoked.
+         */
+        prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification<Runtime.ExceptionRevokedEventDataType>) => void): this;
+
+        /**
+         * Issued when console API was called.
+         */
+        prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification<Runtime.ConsoleAPICalledEventDataType>) => void): this;
+
+        /**
+         * Issued when object should be inspected (for example, as a result of inspect() command line API call).
+         */
+        prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification<Runtime.InspectRequestedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger.
+         */
+        prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification<Debugger.ScriptParsedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine fails to parse the script.
+         */
+        prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification<Debugger.ScriptFailedToParseEventDataType>) => void): this;
+
+        /**
+         * Fired when breakpoint is resolved to an actual script and location.
+         */
+        prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification<Debugger.BreakpointResolvedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.
+         */
+        prependListener(event: "Debugger.paused", listener: (message: InspectorNotification<Debugger.PausedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine resumed execution.
+         */
+        prependListener(event: "Debugger.resumed", listener: () => void): this;
+
+        /**
+         * Issued when new console message is added.
+         */
+        prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification<Console.MessageAddedEventDataType>) => void): this;
+
+        /**
+         * Sent when new profile recording is started using console.profile() call.
+         */
+        prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification<Profiler.ConsoleProfileStartedEventDataType>) => void): this;
+
+        prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification<Profiler.ConsoleProfileFinishedEventDataType>) => void): this;
+        prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification<HeapProfiler.AddHeapSnapshotChunkEventDataType>) => void): this;
+        prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this;
+        prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification<HeapProfiler.ReportHeapSnapshotProgressEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event.
+         */
+        prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification<HeapProfiler.LastSeenObjectIdEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend may send update for one or more fragments
+         */
+        prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification<HeapProfiler.HeapStatsUpdateEventDataType>) => void): this;
+
+        /**
+         * Contains an bucket of collected trace events.
+         */
+        prependListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification<NodeTracing.DataCollectedEventDataType>) => void): this;
+
+        /**
+         * Signals that tracing is stopped and there is no trace buffers pending flush, all data were
+         * delivered via dataCollected events.
+         */
+        prependListener(event: "NodeTracing.tracingComplete", listener: () => void): this;
+
+        /**
+         * Issued when attached to a worker.
+         */
+        prependListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification<NodeWorker.AttachedToWorkerEventDataType>) => void): this;
+
+        /**
+         * Issued when detached from the worker.
+         */
+        prependListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification<NodeWorker.DetachedFromWorkerEventDataType>) => void): this;
+
+        /**
+         * Notifies about a new protocol message received from the session
+         * (session ID is provided in attachedToWorker notification).
+         */
+        prependListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification<NodeWorker.ReceivedMessageFromWorkerEventDataType>) => void): this;
+
+        /**
+         * This event is fired instead of `Runtime.executionContextDestroyed` when
+         * enabled.
+         * It is fired when the Node process finished all code execution and is
+         * waiting for all frontends to disconnect.
+         */
+        prependListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+
+        /**
+         * Emitted when any notification from the V8 Inspector is received.
+         */
+        prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this;
+
+        /**
+         * Issued when new execution context is created.
+         */
+        prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification<Runtime.ExecutionContextCreatedEventDataType>) => void): this;
+
+        /**
+         * Issued when execution context is destroyed.
+         */
+        prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification<Runtime.ExecutionContextDestroyedEventDataType>) => void): this;
+
+        /**
+         * Issued when all executionContexts were cleared in browser
+         */
+        prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this;
+
+        /**
+         * Issued when exception was thrown and unhandled.
+         */
+        prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification<Runtime.ExceptionThrownEventDataType>) => void): this;
+
+        /**
+         * Issued when unhandled exception was revoked.
+         */
+        prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification<Runtime.ExceptionRevokedEventDataType>) => void): this;
+
+        /**
+         * Issued when console API was called.
+         */
+        prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification<Runtime.ConsoleAPICalledEventDataType>) => void): this;
+
+        /**
+         * Issued when object should be inspected (for example, as a result of inspect() command line API call).
+         */
+        prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification<Runtime.InspectRequestedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger.
+         */
+        prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification<Debugger.ScriptParsedEventDataType>) => void): this;
+
+        /**
+         * Fired when virtual machine fails to parse the script.
+         */
+        prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification<Debugger.ScriptFailedToParseEventDataType>) => void): this;
+
+        /**
+         * Fired when breakpoint is resolved to an actual script and location.
+         */
+        prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification<Debugger.BreakpointResolvedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.
+         */
+        prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification<Debugger.PausedEventDataType>) => void): this;
+
+        /**
+         * Fired when the virtual machine resumed execution.
+         */
+        prependOnceListener(event: "Debugger.resumed", listener: () => void): this;
+
+        /**
+         * Issued when new console message is added.
+         */
+        prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification<Console.MessageAddedEventDataType>) => void): this;
+
+        /**
+         * Sent when new profile recording is started using console.profile() call.
+         */
+        prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification<Profiler.ConsoleProfileStartedEventDataType>) => void): this;
+
+        prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification<Profiler.ConsoleProfileFinishedEventDataType>) => void): this;
+        prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification<HeapProfiler.AddHeapSnapshotChunkEventDataType>) => void): this;
+        prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this;
+        prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification<HeapProfiler.ReportHeapSnapshotProgressEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event.
+         */
+        prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification<HeapProfiler.LastSeenObjectIdEventDataType>) => void): this;
+
+        /**
+         * If heap objects tracking has been started then backend may send update for one or more fragments
+         */
+        prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification<HeapProfiler.HeapStatsUpdateEventDataType>) => void): this;
+
+        /**
+         * Contains an bucket of collected trace events.
+         */
+        prependOnceListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification<NodeTracing.DataCollectedEventDataType>) => void): this;
+
+        /**
+         * Signals that tracing is stopped and there is no trace buffers pending flush, all data were
+         * delivered via dataCollected events.
+         */
+        prependOnceListener(event: "NodeTracing.tracingComplete", listener: () => void): this;
+
+        /**
+         * Issued when attached to a worker.
+         */
+        prependOnceListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification<NodeWorker.AttachedToWorkerEventDataType>) => void): this;
+
+        /**
+         * Issued when detached from the worker.
+         */
+        prependOnceListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification<NodeWorker.DetachedFromWorkerEventDataType>) => void): this;
+
+        /**
+         * Notifies about a new protocol message received from the session
+         * (session ID is provided in attachedToWorker notification).
+         */
+        prependOnceListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification<NodeWorker.ReceivedMessageFromWorkerEventDataType>) => void): this;
+
+        /**
+         * This event is fired instead of `Runtime.executionContextDestroyed` when
+         * enabled.
+         * It is fired when the Node process finished all code execution and is
+         * waiting for all frontends to disconnect.
+         */
+        prependOnceListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this;
+    }
+
+    // Top Level API
+
+    /**
+     * Activate inspector on host and port. Equivalent to node --inspect=[[host:]port], but can be done programatically after node has started.
+     * If wait is true, will block until a client has connected to the inspect port and flow control has been passed to the debugger client.
+     * @param port Port to listen on for inspector connections. Optional, defaults to what was specified on the CLI.
+     * @param host Host to listen on for inspector connections. Optional, defaults to what was specified on the CLI.
+     * @param wait Block until a client has connected. Optional, defaults to false.
+     */
+    function open(port?: number, host?: string, wait?: boolean): void;
+
+    /**
+     * Deactivate the inspector. Blocks until there are no active connections.
+     */
+    function close(): void;
+
+    /**
+     * Return the URL of the active inspector, or `undefined` if there is none.
+     */
+    function url(): string | undefined;
+}
diff --git a/setup-maven/node_modules/@types/node/module.d.ts b/setup-maven/node_modules/@types/node/module.d.ts
new file mode 100644
index 0000000..f512be7
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/module.d.ts
@@ -0,0 +1,3 @@
+declare module "module" {
+    export = NodeJS.Module;
+}
diff --git a/setup-maven/node_modules/@types/node/net.d.ts b/setup-maven/node_modules/@types/node/net.d.ts
new file mode 100644
index 0000000..1e4f971
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/net.d.ts
@@ -0,0 +1,268 @@
+declare module "net" {
+    import * as stream from "stream";
+    import * as events from "events";
+    import * as dns from "dns";
+
+    type LookupFunction = (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void;
+
+    interface AddressInfo {
+        address: string;
+        family: string;
+        port: number;
+    }
+
+    interface SocketConstructorOpts {
+        fd?: number;
+        allowHalfOpen?: boolean;
+        readable?: boolean;
+        writable?: boolean;
+    }
+
+    interface OnReadOpts {
+        buffer: Uint8Array | (() => Uint8Array);
+        /**
+         * This function is called for every chunk of incoming data.
+         * Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer.
+         * Return false from this function to implicitly pause() the socket.
+         */
+        callback(bytesWritten: number, buf: Uint8Array): boolean;
+    }
+
+    interface ConnectOpts {
+        /**
+         * If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket.
+         * Note: this will cause the streaming functionality to not provide any data, however events like 'error', 'end', and 'close' will
+         * still be emitted as normal and methods like pause() and resume() will also behave as expected.
+         */
+        onread?: OnReadOpts;
+    }
+
+    interface TcpSocketConnectOpts extends ConnectOpts {
+        port: number;
+        host?: string;
+        localAddress?: string;
+        localPort?: number;
+        hints?: number;
+        family?: number;
+        lookup?: LookupFunction;
+    }
+
+    interface IpcSocketConnectOpts extends ConnectOpts {
+        path: string;
+    }
+
+    type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts;
+
+    class Socket extends stream.Duplex {
+        constructor(options?: SocketConstructorOpts);
+
+        // Extended base methods
+        write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean;
+        write(str: Uint8Array | string, encoding?: string, cb?: (err?: Error) => void): boolean;
+
+        connect(options: SocketConnectOpts, connectionListener?: () => void): this;
+        connect(port: number, host: string, connectionListener?: () => void): this;
+        connect(port: number, connectionListener?: () => void): this;
+        connect(path: string, connectionListener?: () => void): this;
+
+        setEncoding(encoding?: string): this;
+        pause(): this;
+        resume(): this;
+        setTimeout(timeout: number, callback?: () => void): this;
+        setNoDelay(noDelay?: boolean): this;
+        setKeepAlive(enable?: boolean, initialDelay?: number): this;
+        address(): AddressInfo | string;
+        unref(): void;
+        ref(): void;
+
+        readonly bufferSize: number;
+        readonly bytesRead: number;
+        readonly bytesWritten: number;
+        readonly connecting: boolean;
+        readonly destroyed: boolean;
+        readonly localAddress: string;
+        readonly localPort: number;
+        readonly remoteAddress?: string;
+        readonly remoteFamily?: string;
+        readonly remotePort?: number;
+
+        // Extended base methods
+        end(cb?: () => void): void;
+        end(buffer: Uint8Array | string, cb?: () => void): void;
+        end(str: Uint8Array | string, encoding?: string, cb?: () => void): void;
+
+        /**
+         * events.EventEmitter
+         *   1. close
+         *   2. connect
+         *   3. data
+         *   4. drain
+         *   5. end
+         *   6. error
+         *   7. lookup
+         *   8. timeout
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: (had_error: boolean) => void): this;
+        addListener(event: "connect", listener: () => void): this;
+        addListener(event: "data", listener: (data: Buffer) => void): this;
+        addListener(event: "drain", listener: () => void): this;
+        addListener(event: "end", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close", had_error: boolean): boolean;
+        emit(event: "connect"): boolean;
+        emit(event: "data", data: Buffer): boolean;
+        emit(event: "drain"): boolean;
+        emit(event: "end"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean;
+        emit(event: "timeout"): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: (had_error: boolean) => void): this;
+        on(event: "connect", listener: () => void): this;
+        on(event: "data", listener: (data: Buffer) => void): this;
+        on(event: "drain", listener: () => void): this;
+        on(event: "end", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        on(event: "timeout", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: (had_error: boolean) => void): this;
+        once(event: "connect", listener: () => void): this;
+        once(event: "data", listener: (data: Buffer) => void): this;
+        once(event: "drain", listener: () => void): this;
+        once(event: "end", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        once(event: "timeout", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: (had_error: boolean) => void): this;
+        prependListener(event: "connect", listener: () => void): this;
+        prependListener(event: "data", listener: (data: Buffer) => void): this;
+        prependListener(event: "drain", listener: () => void): this;
+        prependListener(event: "end", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: (had_error: boolean) => void): this;
+        prependOnceListener(event: "connect", listener: () => void): this;
+        prependOnceListener(event: "data", listener: (data: Buffer) => void): this;
+        prependOnceListener(event: "drain", listener: () => void): this;
+        prependOnceListener(event: "end", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+    }
+
+    interface ListenOptions {
+        port?: number;
+        host?: string;
+        backlog?: number;
+        path?: string;
+        exclusive?: boolean;
+        readableAll?: boolean;
+        writableAll?: boolean;
+        /**
+         * @default false
+         */
+        ipv6Only?: boolean;
+    }
+
+    // https://github.com/nodejs/node/blob/master/lib/net.js
+    class Server extends events.EventEmitter {
+        constructor(connectionListener?: (socket: Socket) => void);
+        constructor(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void);
+
+        listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;
+        listen(port?: number, hostname?: string, listeningListener?: () => void): this;
+        listen(port?: number, backlog?: number, listeningListener?: () => void): this;
+        listen(port?: number, listeningListener?: () => void): this;
+        listen(path: string, backlog?: number, listeningListener?: () => void): this;
+        listen(path: string, listeningListener?: () => void): this;
+        listen(options: ListenOptions, listeningListener?: () => void): this;
+        listen(handle: any, backlog?: number, listeningListener?: () => void): this;
+        listen(handle: any, listeningListener?: () => void): this;
+        close(callback?: (err?: Error) => void): this;
+        address(): AddressInfo | string | null;
+        getConnections(cb: (error: Error | null, count: number) => void): void;
+        ref(): this;
+        unref(): this;
+        maxConnections: number;
+        connections: number;
+        listening: boolean;
+
+        /**
+         * events.EventEmitter
+         *   1. close
+         *   2. connection
+         *   3. error
+         *   4. listening
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "connection", listener: (socket: Socket) => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "listening", listener: () => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "connection", socket: Socket): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "listening"): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "connection", listener: (socket: Socket) => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "listening", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "connection", listener: (socket: Socket) => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "listening", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "connection", listener: (socket: Socket) => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "listening", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "connection", listener: (socket: Socket) => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "listening", listener: () => void): this;
+    }
+
+    interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts {
+        timeout?: number;
+    }
+
+    interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts {
+        timeout?: number;
+    }
+
+    type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts;
+
+    function createServer(connectionListener?: (socket: Socket) => void): Server;
+    function createServer(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void): Server;
+    function connect(options: NetConnectOpts, connectionListener?: () => void): Socket;
+    function connect(port: number, host?: string, connectionListener?: () => void): Socket;
+    function connect(path: string, connectionListener?: () => void): Socket;
+    function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket;
+    function createConnection(port: number, host?: string, connectionListener?: () => void): Socket;
+    function createConnection(path: string, connectionListener?: () => void): Socket;
+    function isIP(input: string): number;
+    function isIPv4(input: string): boolean;
+    function isIPv6(input: string): boolean;
+}
diff --git a/setup-maven/node_modules/@types/node/os.d.ts b/setup-maven/node_modules/@types/node/os.d.ts
new file mode 100644
index 0000000..37c45a9
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/os.d.ts
@@ -0,0 +1,263 @@
+declare module "os" {
+    interface CpuInfo {
+        model: string;
+        speed: number;
+        times: {
+            user: number;
+            nice: number;
+            sys: number;
+            idle: number;
+            irq: number;
+        };
+    }
+
+    interface NetworkInterfaceBase {
+        address: string;
+        netmask: string;
+        mac: string;
+        internal: boolean;
+        cidr: string | null;
+    }
+
+    interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase {
+        family: "IPv4";
+    }
+
+    interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase {
+        family: "IPv6";
+        scopeid: number;
+    }
+
+    interface UserInfo<T> {
+        username: T;
+        uid: number;
+        gid: number;
+        shell: T;
+        homedir: T;
+    }
+
+    type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6;
+
+    function hostname(): string;
+    function loadavg(): number[];
+    function uptime(): number;
+    function freemem(): number;
+    function totalmem(): number;
+    function cpus(): CpuInfo[];
+    function type(): string;
+    function release(): string;
+    function networkInterfaces(): { [index: string]: NetworkInterfaceInfo[] };
+    function homedir(): string;
+    function userInfo(options: { encoding: 'buffer' }): UserInfo<Buffer>;
+    function userInfo(options?: { encoding: string }): UserInfo<string>;
+    const constants: {
+        UV_UDP_REUSEADDR: number;
+        // signals: { [key in NodeJS.Signals]: number; }; @todo: change after migration to typescript 2.1
+        signals: {
+            SIGHUP: number;
+            SIGINT: number;
+            SIGQUIT: number;
+            SIGILL: number;
+            SIGTRAP: number;
+            SIGABRT: number;
+            SIGIOT: number;
+            SIGBUS: number;
+            SIGFPE: number;
+            SIGKILL: number;
+            SIGUSR1: number;
+            SIGSEGV: number;
+            SIGUSR2: number;
+            SIGPIPE: number;
+            SIGALRM: number;
+            SIGTERM: number;
+            SIGCHLD: number;
+            SIGSTKFLT: number;
+            SIGCONT: number;
+            SIGSTOP: number;
+            SIGTSTP: number;
+            SIGBREAK: number;
+            SIGTTIN: number;
+            SIGTTOU: number;
+            SIGURG: number;
+            SIGXCPU: number;
+            SIGXFSZ: number;
+            SIGVTALRM: number;
+            SIGPROF: number;
+            SIGWINCH: number;
+            SIGIO: number;
+            SIGPOLL: number;
+            SIGLOST: number;
+            SIGPWR: number;
+            SIGINFO: number;
+            SIGSYS: number;
+            SIGUNUSED: number;
+        };
+        errno: {
+            E2BIG: number;
+            EACCES: number;
+            EADDRINUSE: number;
+            EADDRNOTAVAIL: number;
+            EAFNOSUPPORT: number;
+            EAGAIN: number;
+            EALREADY: number;
+            EBADF: number;
+            EBADMSG: number;
+            EBUSY: number;
+            ECANCELED: number;
+            ECHILD: number;
+            ECONNABORTED: number;
+            ECONNREFUSED: number;
+            ECONNRESET: number;
+            EDEADLK: number;
+            EDESTADDRREQ: number;
+            EDOM: number;
+            EDQUOT: number;
+            EEXIST: number;
+            EFAULT: number;
+            EFBIG: number;
+            EHOSTUNREACH: number;
+            EIDRM: number;
+            EILSEQ: number;
+            EINPROGRESS: number;
+            EINTR: number;
+            EINVAL: number;
+            EIO: number;
+            EISCONN: number;
+            EISDIR: number;
+            ELOOP: number;
+            EMFILE: number;
+            EMLINK: number;
+            EMSGSIZE: number;
+            EMULTIHOP: number;
+            ENAMETOOLONG: number;
+            ENETDOWN: number;
+            ENETRESET: number;
+            ENETUNREACH: number;
+            ENFILE: number;
+            ENOBUFS: number;
+            ENODATA: number;
+            ENODEV: number;
+            ENOENT: number;
+            ENOEXEC: number;
+            ENOLCK: number;
+            ENOLINK: number;
+            ENOMEM: number;
+            ENOMSG: number;
+            ENOPROTOOPT: number;
+            ENOSPC: number;
+            ENOSR: number;
+            ENOSTR: number;
+            ENOSYS: number;
+            ENOTCONN: number;
+            ENOTDIR: number;
+            ENOTEMPTY: number;
+            ENOTSOCK: number;
+            ENOTSUP: number;
+            ENOTTY: number;
+            ENXIO: number;
+            EOPNOTSUPP: number;
+            EOVERFLOW: number;
+            EPERM: number;
+            EPIPE: number;
+            EPROTO: number;
+            EPROTONOSUPPORT: number;
+            EPROTOTYPE: number;
+            ERANGE: number;
+            EROFS: number;
+            ESPIPE: number;
+            ESRCH: number;
+            ESTALE: number;
+            ETIME: number;
+            ETIMEDOUT: number;
+            ETXTBSY: number;
+            EWOULDBLOCK: number;
+            EXDEV: number;
+            WSAEINTR: number;
+            WSAEBADF: number;
+            WSAEACCES: number;
+            WSAEFAULT: number;
+            WSAEINVAL: number;
+            WSAEMFILE: number;
+            WSAEWOULDBLOCK: number;
+            WSAEINPROGRESS: number;
+            WSAEALREADY: number;
+            WSAENOTSOCK: number;
+            WSAEDESTADDRREQ: number;
+            WSAEMSGSIZE: number;
+            WSAEPROTOTYPE: number;
+            WSAENOPROTOOPT: number;
+            WSAEPROTONOSUPPORT: number;
+            WSAESOCKTNOSUPPORT: number;
+            WSAEOPNOTSUPP: number;
+            WSAEPFNOSUPPORT: number;
+            WSAEAFNOSUPPORT: number;
+            WSAEADDRINUSE: number;
+            WSAEADDRNOTAVAIL: number;
+            WSAENETDOWN: number;
+            WSAENETUNREACH: number;
+            WSAENETRESET: number;
+            WSAECONNABORTED: number;
+            WSAECONNRESET: number;
+            WSAENOBUFS: number;
+            WSAEISCONN: number;
+            WSAENOTCONN: number;
+            WSAESHUTDOWN: number;
+            WSAETOOMANYREFS: number;
+            WSAETIMEDOUT: number;
+            WSAECONNREFUSED: number;
+            WSAELOOP: number;
+            WSAENAMETOOLONG: number;
+            WSAEHOSTDOWN: number;
+            WSAEHOSTUNREACH: number;
+            WSAENOTEMPTY: number;
+            WSAEPROCLIM: number;
+            WSAEUSERS: number;
+            WSAEDQUOT: number;
+            WSAESTALE: number;
+            WSAEREMOTE: number;
+            WSASYSNOTREADY: number;
+            WSAVERNOTSUPPORTED: number;
+            WSANOTINITIALISED: number;
+            WSAEDISCON: number;
+            WSAENOMORE: number;
+            WSAECANCELLED: number;
+            WSAEINVALIDPROCTABLE: number;
+            WSAEINVALIDPROVIDER: number;
+            WSAEPROVIDERFAILEDINIT: number;
+            WSASYSCALLFAILURE: number;
+            WSASERVICE_NOT_FOUND: number;
+            WSATYPE_NOT_FOUND: number;
+            WSA_E_NO_MORE: number;
+            WSA_E_CANCELLED: number;
+            WSAEREFUSED: number;
+        };
+        priority: {
+            PRIORITY_LOW: number;
+            PRIORITY_BELOW_NORMAL: number;
+            PRIORITY_NORMAL: number;
+            PRIORITY_ABOVE_NORMAL: number;
+            PRIORITY_HIGH: number;
+            PRIORITY_HIGHEST: number;
+        }
+    };
+    function arch(): string;
+    function platform(): NodeJS.Platform;
+    function tmpdir(): string;
+    const EOL: string;
+    function endianness(): "BE" | "LE";
+    /**
+     * Gets the priority of a process.
+     * Defaults to current process.
+     */
+    function getPriority(pid?: number): number;
+    /**
+     * Sets the priority of the current process.
+     * @param priority Must be in range of -20 to 19
+     */
+    function setPriority(priority: number): void;
+    /**
+     * Sets the priority of the process specified process.
+     * @param priority Must be in range of -20 to 19
+     */
+    function setPriority(pid: number, priority: number): void;
+}
diff --git a/setup-maven/node_modules/@types/node/package.json b/setup-maven/node_modules/@types/node/package.json
new file mode 100644
index 0000000..f66ed9f
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/package.json
@@ -0,0 +1,221 @@
+{
+  "_from": "@types/node@>= 8",
+  "_id": "@types/node@12.12.14",
+  "_inBundle": false,
+  "_integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==",
+  "_location": "/@types/node",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@types/node@>= 8",
+    "name": "@types/node",
+    "escapedName": "@types%2fnode",
+    "scope": "@types",
+    "rawSpec": ">= 8",
+    "saveSpec": null,
+    "fetchSpec": ">= 8"
+  },
+  "_requiredBy": [
+    "#DEV:/",
+    "/@octokit/types"
+  ],
+  "_resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz",
+  "_shasum": "1c1d6e3c75dba466e0326948d56e8bd72a1903d2",
+  "_spec": "@types/node@>= 8",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/types",
+  "bugs": {
+    "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Microsoft TypeScript",
+      "url": "https://github.com/Microsoft"
+    },
+    {
+      "name": "DefinitelyTyped",
+      "url": "https://github.com/DefinitelyTyped"
+    },
+    {
+      "name": "Alberto Schiabel",
+      "url": "https://github.com/jkomyno"
+    },
+    {
+      "name": "Alexander T.",
+      "url": "https://github.com/a-tarasyuk"
+    },
+    {
+      "name": "Alvis HT Tang",
+      "url": "https://github.com/alvis"
+    },
+    {
+      "name": "Andrew Makarov",
+      "url": "https://github.com/r3nya"
+    },
+    {
+      "name": "Benjamin Toueg",
+      "url": "https://github.com/btoueg"
+    },
+    {
+      "name": "Bruno Scheufler",
+      "url": "https://github.com/brunoscheufler"
+    },
+    {
+      "name": "Chigozirim C.",
+      "url": "https://github.com/smac89"
+    },
+    {
+      "name": "Christian Vaagland Tellnes",
+      "url": "https://github.com/tellnes"
+    },
+    {
+      "name": "David Junger",
+      "url": "https://github.com/touffy"
+    },
+    {
+      "name": "Deividas Bakanas",
+      "url": "https://github.com/DeividasBakanas"
+    },
+    {
+      "name": "Eugene Y. Q. Shen",
+      "url": "https://github.com/eyqs"
+    },
+    {
+      "name": "Flarna",
+      "url": "https://github.com/Flarna"
+    },
+    {
+      "name": "Hannes Magnusson",
+      "url": "https://github.com/Hannes-Magnusson-CK"
+    },
+    {
+      "name": "Hoàng Văn Khải",
+      "url": "https://github.com/KSXGitHub"
+    },
+    {
+      "name": "Huw",
+      "url": "https://github.com/hoo29"
+    },
+    {
+      "name": "Kelvin Jin",
+      "url": "https://github.com/kjin"
+    },
+    {
+      "name": "Klaus Meinhardt",
+      "url": "https://github.com/ajafff"
+    },
+    {
+      "name": "Lishude",
+      "url": "https://github.com/islishude"
+    },
+    {
+      "name": "Mariusz Wiktorczyk",
+      "url": "https://github.com/mwiktorczyk"
+    },
+    {
+      "name": "Mohsen Azimi",
+      "url": "https://github.com/mohsen1"
+    },
+    {
+      "name": "Nicolas Even",
+      "url": "https://github.com/n-e"
+    },
+    {
+      "name": "Nicolas Voigt",
+      "url": "https://github.com/octo-sniffle"
+    },
+    {
+      "name": "Nikita Galkin",
+      "url": "https://github.com/galkin"
+    },
+    {
+      "name": "Parambir Singh",
+      "url": "https://github.com/parambirs"
+    },
+    {
+      "name": "Sebastian Silbermann",
+      "url": "https://github.com/eps1lon"
+    },
+    {
+      "name": "Simon Schick",
+      "url": "https://github.com/SimonSchick"
+    },
+    {
+      "name": "Thomas den Hollander",
+      "url": "https://github.com/ThomasdenH"
+    },
+    {
+      "name": "Wilco Bakker",
+      "url": "https://github.com/WilcoBakker"
+    },
+    {
+      "name": "wwwy3y3",
+      "url": "https://github.com/wwwy3y3"
+    },
+    {
+      "name": "Zane Hannan AU",
+      "url": "https://github.com/ZaneHannanAU"
+    },
+    {
+      "name": "Samuel Ainsworth",
+      "url": "https://github.com/samuela"
+    },
+    {
+      "name": "Kyle Uehlein",
+      "url": "https://github.com/kuehlein"
+    },
+    {
+      "name": "Jordi Oliveras Rovira",
+      "url": "https://github.com/j-oliveras"
+    },
+    {
+      "name": "Thanik Bhongbhibhat",
+      "url": "https://github.com/bhongy"
+    },
+    {
+      "name": "Marcin Kopacz",
+      "url": "https://github.com/chyzwar"
+    },
+    {
+      "name": "Trivikram Kamat",
+      "url": "https://github.com/trivikr"
+    },
+    {
+      "name": "Minh Son Nguyen",
+      "url": "https://github.com/nguymin4"
+    },
+    {
+      "name": "Junxiao Shi",
+      "url": "https://github.com/yoursunny"
+    },
+    {
+      "name": "Ilia Baryshnikov",
+      "url": "https://github.com/qwelias"
+    }
+  ],
+  "dependencies": {},
+  "deprecated": false,
+  "description": "TypeScript definitions for Node.js",
+  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme",
+  "license": "MIT",
+  "main": "",
+  "name": "@types/node",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+    "directory": "types/node"
+  },
+  "scripts": {},
+  "typeScriptVersion": "2.8",
+  "types": "index.d.ts",
+  "typesPublisherContentHash": "305a8ff81632f0e70287898475e87d6aedbd683a5e37cb775f9ea845625cfa06",
+  "typesVersions": {
+    ">=3.2.0-0": {
+      "*": [
+        "ts3.2/*"
+      ]
+    }
+  },
+  "version": "12.12.14"
+}
diff --git a/setup-maven/node_modules/@types/node/path.d.ts b/setup-maven/node_modules/@types/node/path.d.ts
new file mode 100644
index 0000000..2f4a549
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/path.d.ts
@@ -0,0 +1,159 @@
+declare module "path" {
+    /**
+     * A parsed path object generated by path.parse() or consumed by path.format().
+     */
+    interface ParsedPath {
+        /**
+         * The root of the path such as '/' or 'c:\'
+         */
+        root: string;
+        /**
+         * The full directory path such as '/home/user/dir' or 'c:\path\dir'
+         */
+        dir: string;
+        /**
+         * The file name including extension (if any) such as 'index.html'
+         */
+        base: string;
+        /**
+         * The file extension (if any) such as '.html'
+         */
+        ext: string;
+        /**
+         * The file name without extension (if any) such as 'index'
+         */
+        name: string;
+    }
+    interface FormatInputPathObject {
+        /**
+         * The root of the path such as '/' or 'c:\'
+         */
+        root?: string;
+        /**
+         * The full directory path such as '/home/user/dir' or 'c:\path\dir'
+         */
+        dir?: string;
+        /**
+         * The file name including extension (if any) such as 'index.html'
+         */
+        base?: string;
+        /**
+         * The file extension (if any) such as '.html'
+         */
+        ext?: string;
+        /**
+         * The file name without extension (if any) such as 'index'
+         */
+        name?: string;
+    }
+
+    /**
+     * Normalize a string path, reducing '..' and '.' parts.
+     * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.
+     *
+     * @param p string path to normalize.
+     */
+    function normalize(p: string): string;
+    /**
+     * Join all arguments together and normalize the resulting path.
+     * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.
+     *
+     * @param paths paths to join.
+     */
+    function join(...paths: string[]): string;
+    /**
+     * The right-most parameter is considered {to}.  Other parameters are considered an array of {from}.
+     *
+     * Starting from leftmost {from} parameter, resolves {to} to an absolute path.
+     *
+     * If {to} isn't already absolute, {from} arguments are prepended in right to left order,
+     * until an absolute path is found. If after using all {from} paths still no absolute path is found,
+     * the current working directory is used as well. The resulting path is normalized,
+     * and trailing slashes are removed unless the path gets resolved to the root directory.
+     *
+     * @param pathSegments string paths to join.  Non-string arguments are ignored.
+     */
+    function resolve(...pathSegments: string[]): string;
+    /**
+     * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory.
+     *
+     * @param path path to test.
+     */
+    function isAbsolute(path: string): boolean;
+    /**
+     * Solve the relative path from {from} to {to}.
+     * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve.
+     */
+    function relative(from: string, to: string): string;
+    /**
+     * Return the directory name of a path. Similar to the Unix dirname command.
+     *
+     * @param p the path to evaluate.
+     */
+    function dirname(p: string): string;
+    /**
+     * Return the last portion of a path. Similar to the Unix basename command.
+     * Often used to extract the file name from a fully qualified path.
+     *
+     * @param p the path to evaluate.
+     * @param ext optionally, an extension to remove from the result.
+     */
+    function basename(p: string, ext?: string): string;
+    /**
+     * Return the extension of the path, from the last '.' to end of string in the last portion of the path.
+     * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string
+     *
+     * @param p the path to evaluate.
+     */
+    function extname(p: string): string;
+    /**
+     * The platform-specific file separator. '\\' or '/'.
+     */
+    const sep: '\\' | '/';
+    /**
+     * The platform-specific file delimiter. ';' or ':'.
+     */
+    const delimiter: ';' | ':';
+    /**
+     * Returns an object from a path string - the opposite of format().
+     *
+     * @param pathString path to evaluate.
+     */
+    function parse(pathString: string): ParsedPath;
+    /**
+     * Returns a path string from an object - the opposite of parse().
+     *
+     * @param pathString path to evaluate.
+     */
+    function format(pathObject: FormatInputPathObject): string;
+
+    namespace posix {
+        function normalize(p: string): string;
+        function join(...paths: string[]): string;
+        function resolve(...pathSegments: string[]): string;
+        function isAbsolute(p: string): boolean;
+        function relative(from: string, to: string): string;
+        function dirname(p: string): string;
+        function basename(p: string, ext?: string): string;
+        function extname(p: string): string;
+        const sep: string;
+        const delimiter: string;
+        function parse(p: string): ParsedPath;
+        function format(pP: FormatInputPathObject): string;
+    }
+
+    namespace win32 {
+        function normalize(p: string): string;
+        function join(...paths: string[]): string;
+        function resolve(...pathSegments: string[]): string;
+        function isAbsolute(p: string): boolean;
+        function relative(from: string, to: string): string;
+        function dirname(p: string): string;
+        function basename(p: string, ext?: string): string;
+        function extname(p: string): string;
+        const sep: string;
+        const delimiter: string;
+        function parse(p: string): ParsedPath;
+        function format(pP: FormatInputPathObject): string;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/perf_hooks.d.ts b/setup-maven/node_modules/@types/node/perf_hooks.d.ts
new file mode 100644
index 0000000..bf44d44
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/perf_hooks.d.ts
@@ -0,0 +1,304 @@
+declare module "perf_hooks" {
+    import { AsyncResource } from "async_hooks";
+
+    interface PerformanceEntry {
+        /**
+         * The total number of milliseconds elapsed for this entry.
+         * This value will not be meaningful for all Performance Entry types.
+         */
+        readonly duration: number;
+
+        /**
+         * The name of the performance entry.
+         */
+        readonly name: string;
+
+        /**
+         * The high resolution millisecond timestamp marking the starting time of the Performance Entry.
+         */
+        readonly startTime: number;
+
+        /**
+         * The type of the performance entry.
+         * Currently it may be one of: 'node', 'mark', 'measure', 'gc', or 'function'.
+         */
+        readonly entryType: string;
+
+        /**
+         * When performanceEntry.entryType is equal to 'gc', the performance.kind property identifies
+         * the type of garbage collection operation that occurred.
+         * The value may be one of perf_hooks.constants.
+         */
+        readonly kind?: number;
+    }
+
+    interface PerformanceNodeTiming extends PerformanceEntry {
+        /**
+         * The high resolution millisecond timestamp at which the Node.js process completed bootstrap.
+         */
+        readonly bootstrapComplete: number;
+
+        /**
+         * The high resolution millisecond timestamp at which cluster processing ended.
+         */
+        readonly clusterSetupEnd: number;
+
+        /**
+         * The high resolution millisecond timestamp at which cluster processing started.
+         */
+        readonly clusterSetupStart: number;
+
+        /**
+         * The high resolution millisecond timestamp at which the Node.js event loop exited.
+         */
+        readonly loopExit: number;
+
+        /**
+         * The high resolution millisecond timestamp at which the Node.js event loop started.
+         */
+        readonly loopStart: number;
+
+        /**
+         * The high resolution millisecond timestamp at which main module load ended.
+         */
+        readonly moduleLoadEnd: number;
+
+        /**
+         * The high resolution millisecond timestamp at which main module load started.
+         */
+        readonly moduleLoadStart: number;
+
+        /**
+         * The high resolution millisecond timestamp at which the Node.js process was initialized.
+         */
+        readonly nodeStart: number;
+
+        /**
+         * The high resolution millisecond timestamp at which preload module load ended.
+         */
+        readonly preloadModuleLoadEnd: number;
+
+        /**
+         * The high resolution millisecond timestamp at which preload module load started.
+         */
+        readonly preloadModuleLoadStart: number;
+
+        /**
+         * The high resolution millisecond timestamp at which third_party_main processing ended.
+         */
+        readonly thirdPartyMainEnd: number;
+
+        /**
+         * The high resolution millisecond timestamp at which third_party_main processing started.
+         */
+        readonly thirdPartyMainStart: number;
+
+        /**
+         * The high resolution millisecond timestamp at which the V8 platform was initialized.
+         */
+        readonly v8Start: number;
+    }
+
+    interface Performance {
+        /**
+         * If name is not provided, removes all PerformanceFunction objects from the Performance Timeline.
+         * If name is provided, removes entries with name.
+         * @param name
+         */
+        clearFunctions(name?: string): void;
+
+        /**
+         * If name is not provided, removes all PerformanceMark objects from the Performance Timeline.
+         * If name is provided, removes only the named mark.
+         * @param name
+         */
+        clearMarks(name?: string): void;
+
+        /**
+         * If name is not provided, removes all PerformanceMeasure objects from the Performance Timeline.
+         * If name is provided, removes only objects whose performanceEntry.name matches name.
+         */
+        clearMeasures(name?: string): void;
+
+        /**
+         * Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime.
+         * @return list of all PerformanceEntry objects
+         */
+        getEntries(): PerformanceEntry[];
+
+        /**
+         * Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
+         * whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type.
+         * @param name
+         * @param type
+         * @return list of all PerformanceEntry objects
+         */
+        getEntriesByName(name: string, type?: string): PerformanceEntry[];
+
+        /**
+         * Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
+         * whose performanceEntry.entryType is equal to type.
+         * @param type
+         * @return list of all PerformanceEntry objects
+         */
+        getEntriesByType(type: string): PerformanceEntry[];
+
+        /**
+         * Creates a new PerformanceMark entry in the Performance Timeline.
+         * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark',
+         * and whose performanceEntry.duration is always 0.
+         * Performance marks are used to mark specific significant moments in the Performance Timeline.
+         * @param name
+         */
+        mark(name?: string): void;
+
+        /**
+         * Creates a new PerformanceMeasure entry in the Performance Timeline.
+         * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure',
+         * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark.
+         *
+         * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify
+         * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist,
+         * then startMark is set to timeOrigin by default.
+         *
+         * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp
+         * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown.
+         * @param name
+         * @param startMark
+         * @param endMark
+         */
+        measure(name: string, startMark: string, endMark: string): void;
+
+        /**
+         * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones.
+         */
+        readonly nodeTiming: PerformanceNodeTiming;
+
+        /**
+         * @return the current high resolution millisecond timestamp
+         */
+        now(): number;
+
+        /**
+         * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured.
+         */
+        readonly timeOrigin: number;
+
+        /**
+         * Wraps a function within a new function that measures the running time of the wrapped function.
+         * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed.
+         * @param fn
+         */
+        timerify<T extends (...optionalParams: any[]) => any>(fn: T): T;
+    }
+
+    interface PerformanceObserverEntryList {
+        /**
+         * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime.
+         */
+        getEntries(): PerformanceEntry[];
+
+        /**
+         * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
+         * whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type.
+         */
+        getEntriesByName(name: string, type?: string): PerformanceEntry[];
+
+        /**
+         * @return Returns a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
+         * whose performanceEntry.entryType is equal to type.
+         */
+        getEntriesByType(type: string): PerformanceEntry[];
+    }
+
+    type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void;
+
+    class PerformanceObserver extends AsyncResource {
+        constructor(callback: PerformanceObserverCallback);
+
+        /**
+         * Disconnects the PerformanceObserver instance from all notifications.
+         */
+        disconnect(): void;
+
+        /**
+         * Subscribes the PerformanceObserver instance to notifications of new PerformanceEntry instances identified by options.entryTypes.
+         * When options.buffered is false, the callback will be invoked once for every PerformanceEntry instance.
+         * Property buffered defaults to false.
+         * @param options
+         */
+        observe(options: { entryTypes: string[], buffered?: boolean }): void;
+    }
+
+    namespace constants {
+        const NODE_PERFORMANCE_GC_MAJOR: number;
+        const NODE_PERFORMANCE_GC_MINOR: number;
+        const NODE_PERFORMANCE_GC_INCREMENTAL: number;
+        const NODE_PERFORMANCE_GC_WEAKCB: number;
+    }
+
+    const performance: Performance;
+
+    interface EventLoopMonitorOptions {
+        /**
+         * The sampling rate in milliseconds.
+         * Must be greater than zero.
+         * @default 10
+         */
+        resolution?: number;
+    }
+
+    interface EventLoopDelayMonitor {
+        /**
+         * Enables the event loop delay sample timer. Returns `true` if the timer was started, `false` if it was already started.
+         */
+        enable(): boolean;
+        /**
+         * Disables the event loop delay sample timer. Returns `true` if the timer was stopped, `false` if it was already stopped.
+         */
+        disable(): boolean;
+
+        /**
+         * Resets the collected histogram data.
+         */
+        reset(): void;
+
+        /**
+         * Returns the value at the given percentile.
+         * @param percentile A percentile value between 1 and 100.
+         */
+        percentile(percentile: number): number;
+
+        /**
+         * A `Map` object detailing the accumulated percentile distribution.
+         */
+        readonly percentiles: Map<number, number>;
+
+        /**
+         * The number of times the event loop delay exceeded the maximum 1 hour eventloop delay threshold.
+         */
+        readonly exceeds: number;
+
+        /**
+         * The minimum recorded event loop delay.
+         */
+        readonly min: number;
+
+        /**
+         * The maximum recorded event loop delay.
+         */
+        readonly max: number;
+
+        /**
+         * The mean of the recorded event loop delays.
+         */
+        readonly mean: number;
+
+        /**
+         * The standard deviation of the recorded event loop delays.
+         */
+        readonly stddev: number;
+    }
+
+    function monitorEventLoopDelay(options?: EventLoopMonitorOptions): EventLoopDelayMonitor;
+}
diff --git a/setup-maven/node_modules/@types/node/process.d.ts b/setup-maven/node_modules/@types/node/process.d.ts
new file mode 100644
index 0000000..d007d4e
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/process.d.ts
@@ -0,0 +1,15 @@
+declare module "process" {
+    import * as tty from "tty";
+
+    global {
+        namespace NodeJS {
+            // this namespace merge is here because these are specifically used
+            // as the type for process.stdin, process.stdout, and process.stderr.
+            // they can't live in tty.d.ts because we need to disambiguate the imported name.
+            interface ReadStream extends tty.ReadStream {}
+            interface WriteStream extends tty.WriteStream {}
+        }
+    }
+
+    export = process;
+}
diff --git a/setup-maven/node_modules/@types/node/punycode.d.ts b/setup-maven/node_modules/@types/node/punycode.d.ts
new file mode 100644
index 0000000..75d2811
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/punycode.d.ts
@@ -0,0 +1,12 @@
+declare module "punycode" {
+    function decode(string: string): string;
+    function encode(string: string): string;
+    function toUnicode(domain: string): string;
+    function toASCII(domain: string): string;
+    const ucs2: ucs2;
+    interface ucs2 {
+        decode(string: string): number[];
+        encode(codePoints: number[]): string;
+    }
+    const version: string;
+}
diff --git a/setup-maven/node_modules/@types/node/querystring.d.ts b/setup-maven/node_modules/@types/node/querystring.d.ts
new file mode 100644
index 0000000..a61269d
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/querystring.d.ts
@@ -0,0 +1,29 @@
+declare module "querystring" {
+    interface StringifyOptions {
+        encodeURIComponent?: (str: string) => string;
+    }
+
+    interface ParseOptions {
+        maxKeys?: number;
+        decodeURIComponent?: (str: string) => string;
+    }
+
+    interface ParsedUrlQuery { [key: string]: string | string[]; }
+
+    interface ParsedUrlQueryInput {
+        [key: string]: NodeJS.PoorMansUnknown;
+    }
+
+    function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string;
+    function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery;
+    /**
+     * The querystring.encode() function is an alias for querystring.stringify().
+     */
+    const encode: typeof stringify;
+    /**
+     * The querystring.decode() function is an alias for querystring.parse().
+     */
+    const decode: typeof parse;
+    function escape(str: string): string;
+    function unescape(str: string): string;
+}
diff --git a/setup-maven/node_modules/@types/node/readline.d.ts b/setup-maven/node_modules/@types/node/readline.d.ts
new file mode 100644
index 0000000..6cb572e
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/readline.d.ts
@@ -0,0 +1,150 @@
+declare module "readline" {
+    import * as events from "events";
+    import * as stream from "stream";
+
+    interface Key {
+        sequence?: string;
+        name?: string;
+        ctrl?: boolean;
+        meta?: boolean;
+        shift?: boolean;
+    }
+
+    class Interface extends events.EventEmitter {
+        readonly terminal: boolean;
+
+        /**
+         * NOTE: According to the documentation:
+         *
+         * > Instances of the `readline.Interface` class are constructed using the
+         * > `readline.createInterface()` method.
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface
+         */
+        protected constructor(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean);
+        /**
+         * NOTE: According to the documentation:
+         *
+         * > Instances of the `readline.Interface` class are constructed using the
+         * > `readline.createInterface()` method.
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface
+         */
+        protected constructor(options: ReadLineOptions);
+
+        setPrompt(prompt: string): void;
+        prompt(preserveCursor?: boolean): void;
+        question(query: string, callback: (answer: string) => void): void;
+        pause(): this;
+        resume(): this;
+        close(): void;
+        write(data: string | Buffer, key?: Key): void;
+
+        /**
+         * events.EventEmitter
+         * 1. close
+         * 2. line
+         * 3. pause
+         * 4. resume
+         * 5. SIGCONT
+         * 6. SIGINT
+         * 7. SIGTSTP
+         */
+
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "line", listener: (input: string) => void): this;
+        addListener(event: "pause", listener: () => void): this;
+        addListener(event: "resume", listener: () => void): this;
+        addListener(event: "SIGCONT", listener: () => void): this;
+        addListener(event: "SIGINT", listener: () => void): this;
+        addListener(event: "SIGTSTP", listener: () => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "line", input: string): boolean;
+        emit(event: "pause"): boolean;
+        emit(event: "resume"): boolean;
+        emit(event: "SIGCONT"): boolean;
+        emit(event: "SIGINT"): boolean;
+        emit(event: "SIGTSTP"): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "line", listener: (input: string) => void): this;
+        on(event: "pause", listener: () => void): this;
+        on(event: "resume", listener: () => void): this;
+        on(event: "SIGCONT", listener: () => void): this;
+        on(event: "SIGINT", listener: () => void): this;
+        on(event: "SIGTSTP", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "line", listener: (input: string) => void): this;
+        once(event: "pause", listener: () => void): this;
+        once(event: "resume", listener: () => void): this;
+        once(event: "SIGCONT", listener: () => void): this;
+        once(event: "SIGINT", listener: () => void): this;
+        once(event: "SIGTSTP", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "line", listener: (input: string) => void): this;
+        prependListener(event: "pause", listener: () => void): this;
+        prependListener(event: "resume", listener: () => void): this;
+        prependListener(event: "SIGCONT", listener: () => void): this;
+        prependListener(event: "SIGINT", listener: () => void): this;
+        prependListener(event: "SIGTSTP", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "line", listener: (input: string) => void): this;
+        prependOnceListener(event: "pause", listener: () => void): this;
+        prependOnceListener(event: "resume", listener: () => void): this;
+        prependOnceListener(event: "SIGCONT", listener: () => void): this;
+        prependOnceListener(event: "SIGINT", listener: () => void): this;
+        prependOnceListener(event: "SIGTSTP", listener: () => void): this;
+        [Symbol.asyncIterator](): AsyncIterableIterator<string>;
+    }
+
+    type ReadLine = Interface; // type forwarded for backwards compatiblity
+
+    type Completer = (line: string) => CompleterResult;
+    type AsyncCompleter = (line: string, callback: (err?: null | Error, result?: CompleterResult) => void) => any;
+
+    type CompleterResult = [string[], string];
+
+    interface ReadLineOptions {
+        input: NodeJS.ReadableStream;
+        output?: NodeJS.WritableStream;
+        completer?: Completer | AsyncCompleter;
+        terminal?: boolean;
+        historySize?: number;
+        prompt?: string;
+        crlfDelay?: number;
+        removeHistoryDuplicates?: boolean;
+    }
+
+    function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean): Interface;
+    function createInterface(options: ReadLineOptions): Interface;
+    function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void;
+
+    type Direction = -1 | 0 | 1;
+
+    /**
+     * Clears the current line of this WriteStream in a direction identified by `dir`.
+     */
+    function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean;
+    /**
+     * Clears this `WriteStream` from the current cursor down.
+     */
+    function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean;
+    /**
+     * Moves this WriteStream's cursor to the specified position.
+     */
+    function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean;
+    /**
+     * Moves this WriteStream's cursor relative to its current position.
+     */
+    function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean;
+}
diff --git a/setup-maven/node_modules/@types/node/repl.d.ts b/setup-maven/node_modules/@types/node/repl.d.ts
new file mode 100644
index 0000000..9496fcd
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/repl.d.ts
@@ -0,0 +1,382 @@
+declare module "repl" {
+    import { Interface, Completer, AsyncCompleter } from "readline";
+    import { Context } from "vm";
+    import { InspectOptions } from "util";
+
+    interface ReplOptions {
+        /**
+         * The input prompt to display.
+         * Default: `"> "`
+         */
+        prompt?: string;
+        /**
+         * The `Readable` stream from which REPL input will be read.
+         * Default: `process.stdin`
+         */
+        input?: NodeJS.ReadableStream;
+        /**
+         * The `Writable` stream to which REPL output will be written.
+         * Default: `process.stdout`
+         */
+        output?: NodeJS.WritableStream;
+        /**
+         * If `true`, specifies that the output should be treated as a TTY terminal, and have
+         * ANSI/VT100 escape codes written to it.
+         * Default: checking the value of the `isTTY` property on the output stream upon
+         * instantiation.
+         */
+        terminal?: boolean;
+        /**
+         * The function to be used when evaluating each given line of input.
+         * Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can
+         * error with `repl.Recoverable` to indicate the input was incomplete and prompt for
+         * additional lines.
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_default_evaluation
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_custom_evaluation_functions
+         */
+        eval?: REPLEval;
+        /**
+         * If `true`, specifies that the default `writer` function should include ANSI color
+         * styling to REPL output. If a custom `writer` function is provided then this has no
+         * effect.
+         * Default: the REPL instance's `terminal` value.
+         */
+        useColors?: boolean;
+        /**
+         * If `true`, specifies that the default evaluation function will use the JavaScript
+         * `global` as the context as opposed to creating a new separate context for the REPL
+         * instance. The node CLI REPL sets this value to `true`.
+         * Default: `false`.
+         */
+        useGlobal?: boolean;
+        /**
+         * If `true`, specifies that the default writer will not output the return value of a
+         * command if it evaluates to `undefined`.
+         * Default: `false`.
+         */
+        ignoreUndefined?: boolean;
+        /**
+         * The function to invoke to format the output of each command before writing to `output`.
+         * Default: a wrapper for `util.inspect`.
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_customizing_repl_output
+         */
+        writer?: REPLWriter;
+        /**
+         * An optional function used for custom Tab auto completion.
+         *
+         * @see https://nodejs.org/dist/latest-v11.x/docs/api/readline.html#readline_use_of_the_completer_function
+         */
+        completer?: Completer | AsyncCompleter;
+        /**
+         * A flag that specifies whether the default evaluator executes all JavaScript commands in
+         * strict mode or default (sloppy) mode.
+         * Accepted values are:
+         * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode.
+         * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to
+         *   prefacing every repl statement with `'use strict'`.
+         */
+        replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT;
+        /**
+         * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is
+         * pressed. This cannot be used together with a custom `eval` function.
+         * Default: `false`.
+         */
+        breakEvalOnSigint?: boolean;
+    }
+
+    type REPLEval = (this: REPLServer, evalCmd: string, context: Context, file: string, cb: (err: Error | null, result: any) => void) => void;
+    type REPLWriter = (this: REPLServer, obj: any) => string;
+
+    /**
+     * This is the default "writer" value, if none is passed in the REPL options,
+     * and it can be overridden by custom print functions.
+     */
+    const writer: REPLWriter & { options: InspectOptions };
+
+    type REPLCommandAction = (this: REPLServer, text: string) => void;
+
+    interface REPLCommand {
+        /**
+         * Help text to be displayed when `.help` is entered.
+         */
+        help?: string;
+        /**
+         * The function to execute, optionally accepting a single string argument.
+         */
+        action: REPLCommandAction;
+    }
+
+    /**
+     * Provides a customizable Read-Eval-Print-Loop (REPL).
+     *
+     * Instances of `repl.REPLServer` will accept individual lines of user input, evaluate those
+     * according to a user-defined evaluation function, then output the result. Input and output
+     * may be from `stdin` and `stdout`, respectively, or may be connected to any Node.js `stream`.
+     *
+     * Instances of `repl.REPLServer` support automatic completion of inputs, simplistic Emacs-style
+     * line editing, multi-line inputs, ANSI-styled output, saving and restoring current REPL session
+     * state, error recovery, and customizable evaluation functions.
+     *
+     * Instances of `repl.REPLServer` are created using the `repl.start()` method and _should not_
+     * be created directly using the JavaScript `new` keyword.
+     *
+     * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_repl
+     */
+    class REPLServer extends Interface {
+        /**
+         * The `vm.Context` provided to the `eval` function to be used for JavaScript
+         * evaluation.
+         */
+        readonly context: Context;
+        /**
+         * The `Readable` stream from which REPL input will be read.
+         */
+        readonly inputStream: NodeJS.ReadableStream;
+        /**
+         * The `Writable` stream to which REPL output will be written.
+         */
+        readonly outputStream: NodeJS.WritableStream;
+        /**
+         * The commands registered via `replServer.defineCommand()`.
+         */
+        readonly commands: { readonly [name: string]: REPLCommand | undefined };
+        /**
+         * A value indicating whether the REPL is currently in "editor mode".
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_commands_and_special_keys
+         */
+        readonly editorMode: boolean;
+        /**
+         * A value indicating whether the `_` variable has been assigned.
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
+         */
+        readonly underscoreAssigned: boolean;
+        /**
+         * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL).
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
+         */
+        readonly last: any;
+        /**
+         * A value indicating whether the `_error` variable has been assigned.
+         *
+         * @since v9.8.0
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
+         */
+        readonly underscoreErrAssigned: boolean;
+        /**
+         * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL).
+         *
+         * @since v9.8.0
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
+         */
+        readonly lastError: any;
+        /**
+         * Specified in the REPL options, this is the function to be used when evaluating each
+         * given line of input. If not specified in the REPL options, this is an async wrapper
+         * for the JavaScript `eval()` function.
+         */
+        readonly eval: REPLEval;
+        /**
+         * Specified in the REPL options, this is a value indicating whether the default
+         * `writer` function should include ANSI color styling to REPL output.
+         */
+        readonly useColors: boolean;
+        /**
+         * Specified in the REPL options, this is a value indicating whether the default `eval`
+         * function will use the JavaScript `global` as the context as opposed to creating a new
+         * separate context for the REPL instance.
+         */
+        readonly useGlobal: boolean;
+        /**
+         * Specified in the REPL options, this is a value indicating whether the default `writer`
+         * function should output the result of a command if it evaluates to `undefined`.
+         */
+        readonly ignoreUndefined: boolean;
+        /**
+         * Specified in the REPL options, this is the function to invoke to format the output of
+         * each command before writing to `outputStream`. If not specified in the REPL options,
+         * this will be a wrapper for `util.inspect`.
+         */
+        readonly writer: REPLWriter;
+        /**
+         * Specified in the REPL options, this is the function to use for custom Tab auto-completion.
+         */
+        readonly completer: Completer | AsyncCompleter;
+        /**
+         * Specified in the REPL options, this is a flag that specifies whether the default `eval`
+         * function should execute all JavaScript commands in strict mode or default (sloppy) mode.
+         * Possible values are:
+         * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode.
+         * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to
+         *    prefacing every repl statement with `'use strict'`.
+         */
+        readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT;
+
+        /**
+         * NOTE: According to the documentation:
+         *
+         * > Instances of `repl.REPLServer` are created using the `repl.start()` method and
+         * > _should not_ be created directly using the JavaScript `new` keyword.
+         *
+         * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS.
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_class_replserver
+         */
+        private constructor();
+
+        /**
+         * Used to add new `.`-prefixed commands to the REPL instance. Such commands are invoked
+         * by typing a `.` followed by the `keyword`.
+         *
+         * @param keyword The command keyword (_without_ a leading `.` character).
+         * @param cmd The function to invoke when the command is processed.
+         *
+         * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_replserver_definecommand_keyword_cmd
+         */
+        defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void;
+        /**
+         * Readies the REPL instance for input from the user, printing the configured `prompt` to a
+         * new line in the `output` and resuming the `input` to accept new input.
+         *
+         * When multi-line input is being entered, an ellipsis is printed rather than the 'prompt'.
+         *
+         * This method is primarily intended to be called from within the action function for
+         * commands registered using the `replServer.defineCommand()` method.
+         *
+         * @param preserveCursor When `true`, the cursor placement will not be reset to `0`.
+         */
+        displayPrompt(preserveCursor?: boolean): void;
+        /**
+         * Clears any command that has been buffered but not yet executed.
+         *
+         * This method is primarily intended to be called from within the action function for
+         * commands registered using the `replServer.defineCommand()` method.
+         *
+         * @since v9.0.0
+         */
+        clearBufferedCommand(): void;
+
+        /**
+         * Initializes a history log file for the REPL instance. When executing the
+         * Node.js binary and using the command line REPL, a history file is initialized
+         * by default. However, this is not the case when creating a REPL
+         * programmatically. Use this method to initialize a history log file when working
+         * with REPL instances programmatically.
+         * @param path The path to the history file
+         */
+        setupHistory(path: string, cb: (err: Error | null, repl: this) => void): void;
+
+        /**
+         * events.EventEmitter
+         * 1. close - inherited from `readline.Interface`
+         * 2. line - inherited from `readline.Interface`
+         * 3. pause - inherited from `readline.Interface`
+         * 4. resume - inherited from `readline.Interface`
+         * 5. SIGCONT - inherited from `readline.Interface`
+         * 6. SIGINT - inherited from `readline.Interface`
+         * 7. SIGTSTP - inherited from `readline.Interface`
+         * 8. exit
+         * 9. reset
+         */
+
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "line", listener: (input: string) => void): this;
+        addListener(event: "pause", listener: () => void): this;
+        addListener(event: "resume", listener: () => void): this;
+        addListener(event: "SIGCONT", listener: () => void): this;
+        addListener(event: "SIGINT", listener: () => void): this;
+        addListener(event: "SIGTSTP", listener: () => void): this;
+        addListener(event: "exit", listener: () => void): this;
+        addListener(event: "reset", listener: (context: Context) => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "line", input: string): boolean;
+        emit(event: "pause"): boolean;
+        emit(event: "resume"): boolean;
+        emit(event: "SIGCONT"): boolean;
+        emit(event: "SIGINT"): boolean;
+        emit(event: "SIGTSTP"): boolean;
+        emit(event: "exit"): boolean;
+        emit(event: "reset", context: Context): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "line", listener: (input: string) => void): this;
+        on(event: "pause", listener: () => void): this;
+        on(event: "resume", listener: () => void): this;
+        on(event: "SIGCONT", listener: () => void): this;
+        on(event: "SIGINT", listener: () => void): this;
+        on(event: "SIGTSTP", listener: () => void): this;
+        on(event: "exit", listener: () => void): this;
+        on(event: "reset", listener: (context: Context) => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "line", listener: (input: string) => void): this;
+        once(event: "pause", listener: () => void): this;
+        once(event: "resume", listener: () => void): this;
+        once(event: "SIGCONT", listener: () => void): this;
+        once(event: "SIGINT", listener: () => void): this;
+        once(event: "SIGTSTP", listener: () => void): this;
+        once(event: "exit", listener: () => void): this;
+        once(event: "reset", listener: (context: Context) => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "line", listener: (input: string) => void): this;
+        prependListener(event: "pause", listener: () => void): this;
+        prependListener(event: "resume", listener: () => void): this;
+        prependListener(event: "SIGCONT", listener: () => void): this;
+        prependListener(event: "SIGINT", listener: () => void): this;
+        prependListener(event: "SIGTSTP", listener: () => void): this;
+        prependListener(event: "exit", listener: () => void): this;
+        prependListener(event: "reset", listener: (context: Context) => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "line", listener: (input: string) => void): this;
+        prependOnceListener(event: "pause", listener: () => void): this;
+        prependOnceListener(event: "resume", listener: () => void): this;
+        prependOnceListener(event: "SIGCONT", listener: () => void): this;
+        prependOnceListener(event: "SIGINT", listener: () => void): this;
+        prependOnceListener(event: "SIGTSTP", listener: () => void): this;
+        prependOnceListener(event: "exit", listener: () => void): this;
+        prependOnceListener(event: "reset", listener: (context: Context) => void): this;
+    }
+
+    /**
+     * A flag passed in the REPL options. Evaluates expressions in sloppy mode.
+     */
+    const REPL_MODE_SLOPPY: symbol; // TODO: unique symbol
+
+    /**
+     * A flag passed in the REPL options. Evaluates expressions in strict mode.
+     * This is equivalent to prefacing every repl statement with `'use strict'`.
+     */
+    const REPL_MODE_STRICT: symbol; // TODO: unique symbol
+
+    /**
+     * Creates and starts a `repl.REPLServer` instance.
+     *
+     * @param options The options for the `REPLServer`. If `options` is a string, then it specifies
+     * the input prompt.
+     */
+    function start(options?: string | ReplOptions): REPLServer;
+
+    /**
+     * Indicates a recoverable error that a `REPLServer` can use to support multi-line input.
+     *
+     * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_recoverable_errors
+     */
+    class Recoverable extends SyntaxError {
+        err: Error;
+
+        constructor(err: Error);
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/stream.d.ts b/setup-maven/node_modules/@types/node/stream.d.ts
new file mode 100644
index 0000000..2a0895b
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/stream.d.ts
@@ -0,0 +1,319 @@
+declare module "stream" {
+    import * as events from "events";
+
+    class internal extends events.EventEmitter {
+        pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T;
+    }
+
+    namespace internal {
+        class Stream extends internal { }
+
+        interface ReadableOptions {
+            highWaterMark?: number;
+            encoding?: string;
+            objectMode?: boolean;
+            read?(this: Readable, size: number): void;
+            destroy?(this: Readable, error: Error | null, callback: (error: Error | null) => void): void;
+            autoDestroy?: boolean;
+        }
+
+        class Readable extends Stream implements NodeJS.ReadableStream {
+            /**
+             * A utility method for creating Readable Streams out of iterators.
+             */
+            static from(iterable: Iterable<any> | AsyncIterable<any>, options?: ReadableOptions): Readable;
+
+            readable: boolean;
+            readonly readableHighWaterMark: number;
+            readonly readableLength: number;
+            readonly readableObjectMode: boolean;
+            destroyed: boolean;
+            constructor(opts?: ReadableOptions);
+            _read(size: number): void;
+            read(size?: number): any;
+            setEncoding(encoding: string): this;
+            pause(): this;
+            resume(): this;
+            isPaused(): boolean;
+            unpipe(destination?: NodeJS.WritableStream): this;
+            unshift(chunk: any, encoding?: BufferEncoding): void;
+            wrap(oldStream: NodeJS.ReadableStream): this;
+            push(chunk: any, encoding?: string): boolean;
+            _destroy(error: Error | null, callback: (error?: Error | null) => void): void;
+            destroy(error?: Error): void;
+
+            /**
+             * Event emitter
+             * The defined events on documents including:
+             * 1. close
+             * 2. data
+             * 3. end
+             * 4. readable
+             * 5. error
+             */
+            addListener(event: "close", listener: () => void): this;
+            addListener(event: "data", listener: (chunk: any) => void): this;
+            addListener(event: "end", listener: () => void): this;
+            addListener(event: "readable", listener: () => void): this;
+            addListener(event: "error", listener: (err: Error) => void): this;
+            addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            emit(event: "close"): boolean;
+            emit(event: "data", chunk: any): boolean;
+            emit(event: "end"): boolean;
+            emit(event: "readable"): boolean;
+            emit(event: "error", err: Error): boolean;
+            emit(event: string | symbol, ...args: any[]): boolean;
+
+            on(event: "close", listener: () => void): this;
+            on(event: "data", listener: (chunk: any) => void): this;
+            on(event: "end", listener: () => void): this;
+            on(event: "readable", listener: () => void): this;
+            on(event: "error", listener: (err: Error) => void): this;
+            on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            once(event: "close", listener: () => void): this;
+            once(event: "data", listener: (chunk: any) => void): this;
+            once(event: "end", listener: () => void): this;
+            once(event: "readable", listener: () => void): this;
+            once(event: "error", listener: (err: Error) => void): this;
+            once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            prependListener(event: "close", listener: () => void): this;
+            prependListener(event: "data", listener: (chunk: any) => void): this;
+            prependListener(event: "end", listener: () => void): this;
+            prependListener(event: "readable", listener: () => void): this;
+            prependListener(event: "error", listener: (err: Error) => void): this;
+            prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            prependOnceListener(event: "close", listener: () => void): this;
+            prependOnceListener(event: "data", listener: (chunk: any) => void): this;
+            prependOnceListener(event: "end", listener: () => void): this;
+            prependOnceListener(event: "readable", listener: () => void): this;
+            prependOnceListener(event: "error", listener: (err: Error) => void): this;
+            prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            removeListener(event: "close", listener: () => void): this;
+            removeListener(event: "data", listener: (chunk: any) => void): this;
+            removeListener(event: "end", listener: () => void): this;
+            removeListener(event: "readable", listener: () => void): this;
+            removeListener(event: "error", listener: (err: Error) => void): this;
+            removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            [Symbol.asyncIterator](): AsyncIterableIterator<any>;
+        }
+
+        interface WritableOptions {
+            highWaterMark?: number;
+            decodeStrings?: boolean;
+            defaultEncoding?: string;
+            objectMode?: boolean;
+            emitClose?: boolean;
+            write?(this: Writable, chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
+            writev?(this: Writable, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
+            destroy?(this: Writable, error: Error | null, callback: (error: Error | null) => void): void;
+            final?(this: Writable, callback: (error?: Error | null) => void): void;
+            autoDestroy?: boolean;
+        }
+
+        class Writable extends Stream implements NodeJS.WritableStream {
+            readonly writable: boolean;
+            readonly writableEnded: boolean;
+            readonly writableFinished: boolean;
+            readonly writableHighWaterMark: number;
+            readonly writableLength: number;
+            readonly writableObjectMode: boolean;
+            destroyed: boolean;
+            constructor(opts?: WritableOptions);
+            _write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
+            _writev?(chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
+            _destroy(error: Error | null, callback: (error?: Error | null) => void): void;
+            _final(callback: (error?: Error | null) => void): void;
+            write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
+            write(chunk: any, encoding: string, cb?: (error: Error | null | undefined) => void): boolean;
+            setDefaultEncoding(encoding: string): this;
+            end(cb?: () => void): void;
+            end(chunk: any, cb?: () => void): void;
+            end(chunk: any, encoding: string, cb?: () => void): void;
+            cork(): void;
+            uncork(): void;
+            destroy(error?: Error): void;
+
+            /**
+             * Event emitter
+             * The defined events on documents including:
+             * 1. close
+             * 2. drain
+             * 3. error
+             * 4. finish
+             * 5. pipe
+             * 6. unpipe
+             */
+            addListener(event: "close", listener: () => void): this;
+            addListener(event: "drain", listener: () => void): this;
+            addListener(event: "error", listener: (err: Error) => void): this;
+            addListener(event: "finish", listener: () => void): this;
+            addListener(event: "pipe", listener: (src: Readable) => void): this;
+            addListener(event: "unpipe", listener: (src: Readable) => void): this;
+            addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            emit(event: "close"): boolean;
+            emit(event: "drain"): boolean;
+            emit(event: "error", err: Error): boolean;
+            emit(event: "finish"): boolean;
+            emit(event: "pipe", src: Readable): boolean;
+            emit(event: "unpipe", src: Readable): boolean;
+            emit(event: string | symbol, ...args: any[]): boolean;
+
+            on(event: "close", listener: () => void): this;
+            on(event: "drain", listener: () => void): this;
+            on(event: "error", listener: (err: Error) => void): this;
+            on(event: "finish", listener: () => void): this;
+            on(event: "pipe", listener: (src: Readable) => void): this;
+            on(event: "unpipe", listener: (src: Readable) => void): this;
+            on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            once(event: "close", listener: () => void): this;
+            once(event: "drain", listener: () => void): this;
+            once(event: "error", listener: (err: Error) => void): this;
+            once(event: "finish", listener: () => void): this;
+            once(event: "pipe", listener: (src: Readable) => void): this;
+            once(event: "unpipe", listener: (src: Readable) => void): this;
+            once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            prependListener(event: "close", listener: () => void): this;
+            prependListener(event: "drain", listener: () => void): this;
+            prependListener(event: "error", listener: (err: Error) => void): this;
+            prependListener(event: "finish", listener: () => void): this;
+            prependListener(event: "pipe", listener: (src: Readable) => void): this;
+            prependListener(event: "unpipe", listener: (src: Readable) => void): this;
+            prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            prependOnceListener(event: "close", listener: () => void): this;
+            prependOnceListener(event: "drain", listener: () => void): this;
+            prependOnceListener(event: "error", listener: (err: Error) => void): this;
+            prependOnceListener(event: "finish", listener: () => void): this;
+            prependOnceListener(event: "pipe", listener: (src: Readable) => void): this;
+            prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this;
+            prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+            removeListener(event: "close", listener: () => void): this;
+            removeListener(event: "drain", listener: () => void): this;
+            removeListener(event: "error", listener: (err: Error) => void): this;
+            removeListener(event: "finish", listener: () => void): this;
+            removeListener(event: "pipe", listener: (src: Readable) => void): this;
+            removeListener(event: "unpipe", listener: (src: Readable) => void): this;
+            removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        }
+
+        interface DuplexOptions extends ReadableOptions, WritableOptions {
+            allowHalfOpen?: boolean;
+            readableObjectMode?: boolean;
+            writableObjectMode?: boolean;
+            read?(this: Duplex, size: number): void;
+            write?(this: Duplex, chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
+            writev?(this: Duplex, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
+            final?(this: Duplex, callback: (error?: Error | null) => void): void;
+            destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void;
+        }
+
+        // Note: Duplex extends both Readable and Writable.
+        class Duplex extends Readable implements Writable {
+            readonly writable: boolean;
+            readonly writableEnded: boolean;
+            readonly writableFinished: boolean;
+            readonly writableHighWaterMark: number;
+            readonly writableLength: number;
+            readonly writableObjectMode: boolean;
+            constructor(opts?: DuplexOptions);
+            _write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
+            _writev?(chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
+            _destroy(error: Error | null, callback: (error: Error | null) => void): void;
+            _final(callback: (error?: Error | null) => void): void;
+            write(chunk: any, encoding?: string, cb?: (error: Error | null | undefined) => void): boolean;
+            write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
+            setDefaultEncoding(encoding: string): this;
+            end(cb?: () => void): void;
+            end(chunk: any, cb?: () => void): void;
+            end(chunk: any, encoding?: string, cb?: () => void): void;
+            cork(): void;
+            uncork(): void;
+        }
+
+        type TransformCallback = (error?: Error | null, data?: any) => void;
+
+        interface TransformOptions extends DuplexOptions {
+            read?(this: Transform, size: number): void;
+            write?(this: Transform, chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
+            writev?(this: Transform, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
+            final?(this: Transform, callback: (error?: Error | null) => void): void;
+            destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void;
+            transform?(this: Transform, chunk: any, encoding: string, callback: TransformCallback): void;
+            flush?(this: Transform, callback: TransformCallback): void;
+        }
+
+        class Transform extends Duplex {
+            constructor(opts?: TransformOptions);
+            _transform(chunk: any, encoding: string, callback: TransformCallback): void;
+            _flush(callback: TransformCallback): void;
+        }
+
+        class PassThrough extends Transform { }
+
+        function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, callback: (err?: NodeJS.ErrnoException | null) => void): () => void;
+        namespace finished {
+            function __promisify__(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream): Promise<void>;
+        }
+
+        function pipeline<T extends NodeJS.WritableStream>(stream1: NodeJS.ReadableStream, stream2: T, callback?: (err: NodeJS.ErrnoException | null) => void): T;
+        function pipeline<T extends NodeJS.WritableStream>(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: T, callback?: (err: NodeJS.ErrnoException | null) => void): T;
+        function pipeline<T extends NodeJS.WritableStream>(
+            stream1: NodeJS.ReadableStream,
+            stream2: NodeJS.ReadWriteStream,
+            stream3: NodeJS.ReadWriteStream,
+            stream4: T,
+            callback?: (err: NodeJS.ErrnoException | null) => void,
+        ): T;
+        function pipeline<T extends NodeJS.WritableStream>(
+            stream1: NodeJS.ReadableStream,
+            stream2: NodeJS.ReadWriteStream,
+            stream3: NodeJS.ReadWriteStream,
+            stream4: NodeJS.ReadWriteStream,
+            stream5: T,
+            callback?: (err: NodeJS.ErrnoException | null) => void,
+        ): T;
+        function pipeline(streams: Array<NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream>, callback?: (err: NodeJS.ErrnoException | null) => void): NodeJS.WritableStream;
+        function pipeline(
+            stream1: NodeJS.ReadableStream,
+            stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream,
+            ...streams: Array<NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void)>,
+        ): NodeJS.WritableStream;
+        namespace pipeline {
+            function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.WritableStream): Promise<void>;
+            function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: NodeJS.WritableStream): Promise<void>;
+            function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: NodeJS.ReadWriteStream, stream4: NodeJS.WritableStream): Promise<void>;
+            function __promisify__(
+                stream1: NodeJS.ReadableStream,
+                stream2: NodeJS.ReadWriteStream,
+                stream3: NodeJS.ReadWriteStream,
+                stream4: NodeJS.ReadWriteStream,
+                stream5: NodeJS.WritableStream,
+            ): Promise<void>;
+            function __promisify__(streams: Array<NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream>): Promise<void>;
+            function __promisify__(
+                stream1: NodeJS.ReadableStream,
+                stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream,
+                ...streams: Array<NodeJS.ReadWriteStream | NodeJS.WritableStream>,
+            ): Promise<void>;
+        }
+
+        interface Pipe {
+            close(): void;
+            hasRef(): boolean;
+            ref(): void;
+            unref(): void;
+        }
+    }
+
+    export = internal;
+}
diff --git a/setup-maven/node_modules/@types/node/string_decoder.d.ts b/setup-maven/node_modules/@types/node/string_decoder.d.ts
new file mode 100644
index 0000000..fe0e0b4
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/string_decoder.d.ts
@@ -0,0 +1,7 @@
+declare module "string_decoder" {
+    class StringDecoder {
+        constructor(encoding?: string);
+        write(buffer: Buffer): string;
+        end(buffer?: Buffer): string;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/timers.d.ts b/setup-maven/node_modules/@types/node/timers.d.ts
new file mode 100644
index 0000000..e64a673
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/timers.d.ts
@@ -0,0 +1,16 @@
+declare module "timers" {
+    function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout;
+    namespace setTimeout {
+        function __promisify__(ms: number): Promise<void>;
+        function __promisify__<T>(ms: number, value: T): Promise<T>;
+    }
+    function clearTimeout(timeoutId: NodeJS.Timeout): void;
+    function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout;
+    function clearInterval(intervalId: NodeJS.Timeout): void;
+    function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate;
+    namespace setImmediate {
+        function __promisify__(): Promise<void>;
+        function __promisify__<T>(value: T): Promise<T>;
+    }
+    function clearImmediate(immediateId: NodeJS.Immediate): void;
+}
diff --git a/setup-maven/node_modules/@types/node/tls.d.ts b/setup-maven/node_modules/@types/node/tls.d.ts
new file mode 100644
index 0000000..2ff817b
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/tls.d.ts
@@ -0,0 +1,418 @@
+declare module "tls" {
+    import * as crypto from "crypto";
+    import * as dns from "dns";
+    import * as net from "net";
+    import * as stream from "stream";
+
+    const CLIENT_RENEG_LIMIT: number;
+    const CLIENT_RENEG_WINDOW: number;
+
+    interface Certificate {
+        /**
+         * Country code.
+         */
+        C: string;
+        /**
+         * Street.
+         */
+        ST: string;
+        /**
+         * Locality.
+         */
+        L: string;
+        /**
+         * Organization.
+         */
+        O: string;
+        /**
+         * Organizational unit.
+         */
+        OU: string;
+        /**
+         * Common name.
+         */
+        CN: string;
+    }
+
+    interface PeerCertificate {
+        subject: Certificate;
+        issuer: Certificate;
+        subjectaltname: string;
+        infoAccess: { [index: string]: string[] | undefined };
+        modulus: string;
+        exponent: string;
+        valid_from: string;
+        valid_to: string;
+        fingerprint: string;
+        ext_key_usage: string[];
+        serialNumber: string;
+        raw: Buffer;
+    }
+
+    interface DetailedPeerCertificate extends PeerCertificate {
+        issuerCertificate: DetailedPeerCertificate;
+    }
+
+    interface CipherNameAndProtocol {
+        /**
+         * The cipher name.
+         */
+        name: string;
+        /**
+         * SSL/TLS protocol version.
+         */
+        version: string;
+    }
+
+    interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions {
+        /**
+         * If true the TLS socket will be instantiated in server-mode.
+         * Defaults to false.
+         */
+        isServer?: boolean;
+        /**
+         * An optional net.Server instance.
+         */
+        server?: net.Server;
+
+        /**
+         * An optional Buffer instance containing a TLS session.
+         */
+        session?: Buffer;
+        /**
+         * If true, specifies that the OCSP status request extension will be
+         * added to the client hello and an 'OCSPResponse' event will be
+         * emitted on the socket before establishing a secure communication
+         */
+        requestOCSP?: boolean;
+    }
+
+    class TLSSocket extends net.Socket {
+        /**
+         * Construct a new tls.TLSSocket object from an existing TCP socket.
+         */
+        constructor(socket: net.Socket, options?: TLSSocketOptions);
+
+        /**
+         * A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false.
+         */
+        authorized: boolean;
+        /**
+         * The reason why the peer's certificate has not been verified.
+         * This property becomes available only when tlsSocket.authorized === false.
+         */
+        authorizationError: Error;
+        /**
+         * Static boolean value, always true.
+         * May be used to distinguish TLS sockets from regular ones.
+         */
+        encrypted: boolean;
+
+        /**
+         * String containing the selected ALPN protocol.
+         * When ALPN has no selected protocol, tlsSocket.alpnProtocol equals false.
+         */
+        alpnProtocol?: string;
+
+        /**
+         * Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection.
+         * @returns Returns an object representing the cipher name
+         * and the SSL/TLS protocol version of the current connection.
+         */
+        getCipher(): CipherNameAndProtocol;
+        /**
+         * Returns an object representing the peer's certificate.
+         * The returned object has some properties corresponding to the field of the certificate.
+         * If detailed argument is true the full chain with issuer property will be returned,
+         * if false only the top certificate without issuer property.
+         * If the peer does not provide a certificate, it returns null or an empty object.
+         * @param detailed - If true; the full chain with issuer property will be returned.
+         * @returns An object representing the peer's certificate.
+         */
+        getPeerCertificate(detailed: true): DetailedPeerCertificate;
+        getPeerCertificate(detailed?: false): PeerCertificate;
+        getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate;
+        /**
+         * Returns a string containing the negotiated SSL/TLS protocol version of the current connection.
+         * The value `'unknown'` will be returned for connected sockets that have not completed the handshaking process.
+         * The value `null` will be returned for server sockets or disconnected client sockets.
+         * See https://www.openssl.org/docs/man1.0.2/ssl/SSL_get_version.html for more information.
+         * @returns negotiated SSL/TLS protocol version of the current connection
+         */
+        getProtocol(): string | null;
+        /**
+         * Could be used to speed up handshake establishment when reconnecting to the server.
+         * @returns ASN.1 encoded TLS session or undefined if none was negotiated.
+         */
+        getSession(): Buffer | undefined;
+        /**
+         * NOTE: Works only with client TLS sockets.
+         * Useful only for debugging, for session reuse provide session option to tls.connect().
+         * @returns TLS session ticket or undefined if none was negotiated.
+         */
+        getTLSTicket(): Buffer | undefined;
+        /**
+         * Initiate TLS renegotiation process.
+         *
+         * NOTE: Can be used to request peer's certificate after the secure connection has been established.
+         * ANOTHER NOTE: When running as the server, socket will be destroyed with an error after handshakeTimeout timeout.
+         * @param options - The options may contain the following fields: rejectUnauthorized,
+         * requestCert (See tls.createServer() for details).
+         * @param callback - callback(err) will be executed with null as err, once the renegotiation
+         * is successfully completed.
+         * @return `undefined` when socket is destroy, `false` if negotiaion can't be initiated.
+         */
+        renegotiate(options: { rejectUnauthorized?: boolean, requestCert?: boolean }, callback: (err: Error | null) => void): undefined | boolean;
+        /**
+         * Set maximum TLS fragment size (default and maximum value is: 16384, minimum is: 512).
+         * Smaller fragment size decreases buffering latency on the client: large fragments are buffered by
+         * the TLS layer until the entire fragment is received and its integrity is verified;
+         * large fragments can span multiple roundtrips, and their processing can be delayed due to packet
+         * loss or reordering. However, smaller fragments add extra TLS framing bytes and CPU overhead,
+         * which may decrease overall server throughput.
+         * @param size - TLS fragment size (default and maximum value is: 16384, minimum is: 512).
+         * @returns Returns true on success, false otherwise.
+         */
+        setMaxSendFragment(size: number): boolean;
+
+        /**
+         * When enabled, TLS packet trace information is written to `stderr`. This can be
+         * used to debug TLS connection problems.
+         *
+         * Note: The format of the output is identical to the output of `openssl s_client
+         * -trace` or `openssl s_server -trace`. While it is produced by OpenSSL's
+         * `SSL_trace()` function, the format is undocumented, can change without notice,
+         * and should not be relied on.
+         */
+        enableTrace(): void;
+
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "OCSPResponse", listener: (response: Buffer) => void): this;
+        addListener(event: "secureConnect", listener: () => void): this;
+        addListener(event: "session", listener: (session: Buffer) => void): this;
+        addListener(event: "keylog", listener: (line: Buffer) => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "OCSPResponse", response: Buffer): boolean;
+        emit(event: "secureConnect"): boolean;
+        emit(event: "session", session: Buffer): boolean;
+        emit(event: "keylog", line: Buffer): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "OCSPResponse", listener: (response: Buffer) => void): this;
+        on(event: "secureConnect", listener: () => void): this;
+        on(event: "session", listener: (session: Buffer) => void): this;
+        on(event: "keylog", listener: (line: Buffer) => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "OCSPResponse", listener: (response: Buffer) => void): this;
+        once(event: "secureConnect", listener: () => void): this;
+        once(event: "session", listener: (session: Buffer) => void): this;
+        once(event: "keylog", listener: (line: Buffer) => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "OCSPResponse", listener: (response: Buffer) => void): this;
+        prependListener(event: "secureConnect", listener: () => void): this;
+        prependListener(event: "session", listener: (session: Buffer) => void): this;
+        prependListener(event: "keylog", listener: (line: Buffer) => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "OCSPResponse", listener: (response: Buffer) => void): this;
+        prependOnceListener(event: "secureConnect", listener: () => void): this;
+        prependOnceListener(event: "session", listener: (session: Buffer) => void): this;
+        prependOnceListener(event: "keylog", listener: (line: Buffer) => void): this;
+    }
+
+    interface CommonConnectionOptions {
+        /**
+         * An optional TLS context object from tls.createSecureContext()
+         */
+        secureContext?: SecureContext;
+
+        /**
+         * When enabled, TLS packet trace information is written to `stderr`. This can be
+         * used to debug TLS connection problems.
+         * @default false
+         */
+        enableTrace?: boolean;
+        /**
+         * If true the server will request a certificate from clients that
+         * connect and attempt to verify that certificate. Defaults to
+         * false.
+         */
+        requestCert?: boolean;
+        /**
+         * An array of strings or a Buffer naming possible ALPN protocols.
+         * (Protocols should be ordered by their priority.)
+         */
+        ALPNProtocols?: string[] | Uint8Array[] | Uint8Array;
+        /**
+         * SNICallback(servername, cb) <Function> A function that will be
+         * called if the client supports SNI TLS extension. Two arguments
+         * will be passed when called: servername and cb. SNICallback should
+         * invoke cb(null, ctx), where ctx is a SecureContext instance.
+         * (tls.createSecureContext(...) can be used to get a proper
+         * SecureContext.) If SNICallback wasn't provided the default callback
+         * with high-level API will be used (see below).
+         */
+        SNICallback?: (servername: string, cb: (err: Error | null, ctx: SecureContext) => void) => void;
+        /**
+         * If true the server will reject any connection which is not
+         * authorized with the list of supplied CAs. This option only has an
+         * effect if requestCert is true.
+         * @default true
+         */
+        rejectUnauthorized?: boolean;
+    }
+
+    interface TlsOptions extends SecureContextOptions, CommonConnectionOptions {
+        handshakeTimeout?: number;
+        sessionTimeout?: number;
+        ticketKeys?: Buffer;
+    }
+
+    interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions {
+        host?: string;
+        port?: number;
+        path?: string; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored.
+        socket?: net.Socket; // Establish secure connection on a given socket rather than creating a new socket
+        checkServerIdentity?: typeof checkServerIdentity;
+        servername?: string; // SNI TLS Extension
+        session?: Buffer;
+        minDHSize?: number;
+        lookup?: net.LookupFunction;
+        timeout?: number;
+    }
+
+    class Server extends net.Server {
+        addContext(hostName: string, credentials: SecureContextOptions): void;
+
+        /**
+         * events.EventEmitter
+         * 1. tlsClientError
+         * 2. newSession
+         * 3. OCSPRequest
+         * 4. resumeSession
+         * 5. secureConnection
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
+        addListener(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        addListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        addListener(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
+        addListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean;
+        emit(event: "newSession", sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void): boolean;
+        emit(event: "OCSPRequest", certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void): boolean;
+        emit(event: "resumeSession", sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean;
+        emit(event: "secureConnection", tlsSocket: TLSSocket): boolean;
+        emit(event: "keylog", line: Buffer, tlsSocket: TLSSocket): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
+        on(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        on(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        on(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
+        on(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
+        once(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        once(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        once(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
+        once(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
+        prependListener(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        prependListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        prependListener(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
+        prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
+        prependOnceListener(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        prependOnceListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        prependOnceListener(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
+        prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
+    }
+
+    interface SecurePair {
+        encrypted: TLSSocket;
+        cleartext: TLSSocket;
+    }
+
+    type SecureVersion = 'TLSv1.3' | 'TLSv1.2' | 'TLSv1.1' | 'TLSv1';
+
+    interface SecureContextOptions {
+        pfx?: string | Buffer | Array<string | Buffer | Object>;
+        key?: string | Buffer | Array<Buffer | Object>;
+        passphrase?: string;
+        cert?: string | Buffer | Array<string | Buffer>;
+        ca?: string | Buffer | Array<string | Buffer>;
+        ciphers?: string;
+        honorCipherOrder?: boolean;
+        ecdhCurve?: string;
+        clientCertEngine?: string;
+        crl?: string | Buffer | Array<string | Buffer>;
+        dhparam?: string | Buffer;
+        secureOptions?: number; // Value is a numeric bitmask of the `SSL_OP_*` options
+        secureProtocol?: string; // SSL Method, e.g. SSLv23_method
+        sessionIdContext?: string;
+        /**
+         * Optionally set the maximum TLS version to allow. One
+         * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the
+         * `secureProtocol` option, use one or the other.
+         * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using
+         * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to
+         * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used.
+         */
+        maxVersion?: SecureVersion;
+        /**
+         * Optionally set the minimum TLS version to allow. One
+         * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the
+         * `secureProtocol` option, use one or the other.  It is not recommended to use
+         * less than TLSv1.2, but it may be required for interoperability.
+         * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using
+         * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to
+         * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to
+         * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used.
+         */
+        minVersion?: SecureVersion;
+    }
+
+    interface SecureContext {
+        context: any;
+    }
+
+    /*
+     * Verifies the certificate `cert` is issued to host `host`.
+     * @host The hostname to verify the certificate against
+     * @cert PeerCertificate representing the peer's certificate
+     *
+     * Returns Error object, populating it with the reason, host and cert on failure.  On success, returns undefined.
+     */
+    function checkServerIdentity(host: string, cert: PeerCertificate): Error | undefined;
+    function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server;
+    function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server;
+    function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket;
+    function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket;
+    function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket;
+    /**
+     * @deprecated
+     */
+    function createSecurePair(credentials?: SecureContext, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair;
+    function createSecureContext(details: SecureContextOptions): SecureContext;
+    function getCiphers(): string[];
+
+    const DEFAULT_ECDH_CURVE: string;
+
+    const rootCertificates: ReadonlyArray<string>;
+}
diff --git a/setup-maven/node_modules/@types/node/trace_events.d.ts b/setup-maven/node_modules/@types/node/trace_events.d.ts
new file mode 100644
index 0000000..1f3a89c
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/trace_events.d.ts
@@ -0,0 +1,61 @@
+declare module "trace_events" {
+    /**
+     * The `Tracing` object is used to enable or disable tracing for sets of
+     * categories. Instances are created using the
+     * `trace_events.createTracing()` method.
+     *
+     * When created, the `Tracing` object is disabled. Calling the
+     * `tracing.enable()` method adds the categories to the set of enabled trace
+     * event categories. Calling `tracing.disable()` will remove the categories
+     * from the set of enabled trace event categories.
+     */
+    interface Tracing {
+        /**
+         * A comma-separated list of the trace event categories covered by this
+         * `Tracing` object.
+         */
+        readonly categories: string;
+
+        /**
+         * Disables this `Tracing` object.
+         *
+         * Only trace event categories _not_ covered by other enabled `Tracing`
+         * objects and _not_ specified by the `--trace-event-categories` flag
+         * will be disabled.
+         */
+        disable(): void;
+
+        /**
+         * Enables this `Tracing` object for the set of categories covered by
+         * the `Tracing` object.
+         */
+        enable(): void;
+
+        /**
+         * `true` only if the `Tracing` object has been enabled.
+         */
+        readonly enabled: boolean;
+    }
+
+    interface CreateTracingOptions {
+        /**
+         * An array of trace category names. Values included in the array are
+         * coerced to a string when possible. An error will be thrown if the
+         * value cannot be coerced.
+         */
+        categories: string[];
+    }
+
+    /**
+     * Creates and returns a Tracing object for the given set of categories.
+     */
+    function createTracing(options: CreateTracingOptions): Tracing;
+
+    /**
+     * Returns a comma-separated list of all currently-enabled trace event
+     * categories. The current set of enabled trace event categories is
+     * determined by the union of all currently-enabled `Tracing` objects and
+     * any categories enabled using the `--trace-event-categories` flag.
+     */
+    function getEnabledCategories(): string | undefined;
+}
diff --git a/setup-maven/node_modules/@types/node/ts3.2/fs.d.ts b/setup-maven/node_modules/@types/node/ts3.2/fs.d.ts
new file mode 100644
index 0000000..0a9eae0
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/ts3.2/fs.d.ts
@@ -0,0 +1,33 @@
+// tslint:disable-next-line:no-bad-reference
+/// <reference path="../fs.d.ts" />
+
+declare module 'fs' {
+    interface BigIntStats extends StatsBase<BigInt> {
+    }
+
+    class BigIntStats {
+        atimeNs: BigInt;
+        mtimeNs: BigInt;
+        ctimeNs: BigInt;
+        birthtimeNs: BigInt;
+    }
+
+    interface BigIntOptions {
+        bigint: true;
+    }
+
+    interface StatOptions {
+        bigint: boolean;
+    }
+
+    function stat(path: PathLike, options: BigIntOptions, callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void): void;
+    function stat(path: PathLike, options: StatOptions, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void;
+
+    namespace stat {
+        function __promisify__(path: PathLike, options: BigIntOptions): Promise<BigIntStats>;
+        function __promisify__(path: PathLike, options: StatOptions): Promise<Stats | BigIntStats>;
+    }
+
+    function statSync(path: PathLike, options: BigIntOptions): BigIntStats;
+    function statSync(path: PathLike, options: StatOptions): Stats | BigIntStats;
+}
diff --git a/setup-maven/node_modules/@types/node/ts3.2/globals.d.ts b/setup-maven/node_modules/@types/node/ts3.2/globals.d.ts
new file mode 100644
index 0000000..70892bc
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/ts3.2/globals.d.ts
@@ -0,0 +1,19 @@
+// tslint:disable-next-line:no-bad-reference
+/// <reference path="../globals.d.ts" />
+
+declare namespace NodeJS {
+    interface HRTime {
+        bigint(): bigint;
+    }
+}
+
+interface Buffer extends Uint8Array {
+    readBigUInt64BE(offset?: number): bigint;
+    readBigUInt64LE(offset?: number): bigint;
+    readBigInt64BE(offset?: number): bigint;
+    readBigInt64LE(offset?: number): bigint;
+    writeBigInt64BE(value: bigint, offset?: number): number;
+    writeBigInt64LE(value: bigint, offset?: number): number;
+    writeBigUInt64BE(value: bigint, offset?: number): number;
+    writeBigUInt64LE(value: bigint, offset?: number): number;
+}
diff --git a/setup-maven/node_modules/@types/node/ts3.2/index.d.ts b/setup-maven/node_modules/@types/node/ts3.2/index.d.ts
new file mode 100644
index 0000000..ee07693
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/ts3.2/index.d.ts
@@ -0,0 +1,21 @@
+// NOTE: These definitions support NodeJS and TypeScript 3.2.
+
+// NOTE: TypeScript version-specific augmentations can be found in the following paths:
+//          - ~/base.d.ts         - Shared definitions common to all TypeScript versions
+//          - ~/index.d.ts        - Definitions specific to TypeScript 2.1
+//          - ~/ts3.2/index.d.ts  - Definitions specific to TypeScript 3.2
+
+// Reference required types from the default lib:
+/// <reference lib="es2018" />
+/// <reference lib="esnext.asynciterable" />
+/// <reference lib="esnext.intl" />
+/// <reference lib="esnext.bigint" />
+
+// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
+// tslint:disable-next-line:no-bad-reference
+/// <reference path="../base.d.ts" />
+
+// TypeScript 3.2-specific augmentations:
+/// <reference path="fs.d.ts" />
+/// <reference path="util.d.ts" />
+/// <reference path="globals.d.ts" />
diff --git a/setup-maven/node_modules/@types/node/ts3.2/util.d.ts b/setup-maven/node_modules/@types/node/ts3.2/util.d.ts
new file mode 100644
index 0000000..a8b2487
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/ts3.2/util.d.ts
@@ -0,0 +1,15 @@
+// tslint:disable-next-line:no-bad-reference
+/// <reference path="../util.d.ts" />
+
+declare module "util" {
+    namespace inspect {
+        const custom: unique symbol;
+    }
+    namespace promisify {
+        const custom: unique symbol;
+    }
+    namespace types {
+        function isBigInt64Array(value: any): value is BigInt64Array;
+        function isBigUint64Array(value: any): value is BigUint64Array;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/tty.d.ts b/setup-maven/node_modules/@types/node/tty.d.ts
new file mode 100644
index 0000000..22bce21
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/tty.d.ts
@@ -0,0 +1,66 @@
+declare module "tty" {
+    import * as net from "net";
+
+    function isatty(fd: number): boolean;
+    class ReadStream extends net.Socket {
+        constructor(fd: number, options?: net.SocketConstructorOpts);
+        isRaw: boolean;
+        setRawMode(mode: boolean): void;
+        isTTY: boolean;
+    }
+    /**
+     * -1 - to the left from cursor
+     *  0 - the entire line
+     *  1 - to the right from cursor
+     */
+    type Direction = -1 | 0 | 1;
+    class WriteStream extends net.Socket {
+        constructor(fd: number);
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "resize", listener: () => void): this;
+
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "resize"): boolean;
+
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "resize", listener: () => void): this;
+
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "resize", listener: () => void): this;
+
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "resize", listener: () => void): this;
+
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "resize", listener: () => void): this;
+
+        /**
+         * Clears the current line of this WriteStream in a direction identified by `dir`.
+         */
+        clearLine(dir: Direction, callback?: () => void): boolean;
+        /**
+         * Clears this `WriteStream` from the current cursor down.
+         */
+        clearScreenDown(callback?: () => void): boolean;
+        /**
+         * Moves this WriteStream's cursor to the specified position.
+         */
+        cursorTo(x: number, y?: number, callback?: () => void): boolean;
+        cursorTo(x: number, callback: () => void): boolean;
+        /**
+         * Moves this WriteStream's cursor relative to its current position.
+         */
+        moveCursor(dx: number, dy: number, callback?: () => void): boolean;
+        /**
+         * @default `process.env`
+         */
+        getColorDepth(env?: {}): number;
+        hasColors(depth?: number): boolean;
+        hasColors(env?: {}): boolean;
+        hasColors(depth: number, env?: {}): boolean;
+        getWindowSize(): [number, number];
+        columns: number;
+        rows: number;
+        isTTY: boolean;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/url.d.ts b/setup-maven/node_modules/@types/node/url.d.ts
new file mode 100644
index 0000000..e5b7e28
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/url.d.ts
@@ -0,0 +1,111 @@
+declare module "url" {
+    import { ParsedUrlQuery, ParsedUrlQueryInput } from 'querystring';
+
+    // Input to `url.format`
+    interface UrlObject {
+        auth?: string | null;
+        hash?: string | null;
+        host?: string | null;
+        hostname?: string | null;
+        href?: string | null;
+        path?: string | null;
+        pathname?: string | null;
+        protocol?: string | null;
+        search?: string | null;
+        slashes?: boolean | null;
+        port?: string | number | null;
+        query?: string | null | ParsedUrlQueryInput;
+    }
+
+    // Output of `url.parse`
+    interface Url {
+        auth: string | null;
+        hash: string | null;
+        host: string | null;
+        hostname: string | null;
+        href: string;
+        path: string | null;
+        pathname: string | null;
+        protocol: string | null;
+        search: string | null;
+        slashes: boolean | null;
+        port: string | null;
+        query: string | null | ParsedUrlQuery;
+    }
+
+    interface UrlWithParsedQuery extends Url {
+        query: ParsedUrlQuery;
+    }
+
+    interface UrlWithStringQuery extends Url {
+        query: string | null;
+    }
+
+    function parse(urlStr: string): UrlWithStringQuery;
+    function parse(urlStr: string, parseQueryString: false | undefined, slashesDenoteHost?: boolean): UrlWithStringQuery;
+    function parse(urlStr: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery;
+    function parse(urlStr: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url;
+
+    function format(URL: URL, options?: URLFormatOptions): string;
+    function format(urlObject: UrlObject | string): string;
+    function resolve(from: string, to: string): string;
+
+    function domainToASCII(domain: string): string;
+    function domainToUnicode(domain: string): string;
+
+    /**
+     * This function ensures the correct decodings of percent-encoded characters as
+     * well as ensuring a cross-platform valid absolute path string.
+     * @param url The file URL string or URL object to convert to a path.
+     */
+    function fileURLToPath(url: string | URL): string;
+
+    /**
+     * This function ensures that path is resolved absolutely, and that the URL
+     * control characters are correctly encoded when converting into a File URL.
+     * @param url The path to convert to a File URL.
+     */
+    function pathToFileURL(url: string): URL;
+
+    interface URLFormatOptions {
+        auth?: boolean;
+        fragment?: boolean;
+        search?: boolean;
+        unicode?: boolean;
+    }
+
+    class URL {
+        constructor(input: string, base?: string | URL);
+        hash: string;
+        host: string;
+        hostname: string;
+        href: string;
+        readonly origin: string;
+        password: string;
+        pathname: string;
+        port: string;
+        protocol: string;
+        search: string;
+        readonly searchParams: URLSearchParams;
+        username: string;
+        toString(): string;
+        toJSON(): string;
+    }
+
+    class URLSearchParams implements Iterable<[string, string]> {
+        constructor(init?: URLSearchParams | string | { [key: string]: string | string[] | undefined } | Iterable<[string, string]> | Array<[string, string]>);
+        append(name: string, value: string): void;
+        delete(name: string): void;
+        entries(): IterableIterator<[string, string]>;
+        forEach(callback: (value: string, name: string, searchParams: this) => void): void;
+        get(name: string): string | null;
+        getAll(name: string): string[];
+        has(name: string): boolean;
+        keys(): IterableIterator<string>;
+        set(name: string, value: string): void;
+        sort(): void;
+        toString(): string;
+        values(): IterableIterator<string>;
+        [Symbol.iterator](): IterableIterator<[string, string]>;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/util.d.ts b/setup-maven/node_modules/@types/node/util.d.ts
new file mode 100644
index 0000000..e0b6c89
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/util.d.ts
@@ -0,0 +1,180 @@
+declare module "util" {
+    interface InspectOptions extends NodeJS.InspectOptions { }
+    function format(format: any, ...param: any[]): string;
+    function formatWithOptions(inspectOptions: InspectOptions, format: string, ...param: any[]): string;
+    /** @deprecated since v0.11.3 - use a third party module instead. */
+    function log(string: string): void;
+    function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string;
+    function inspect(object: any, options: InspectOptions): string;
+    namespace inspect {
+        let colors: {
+            [color: string]: [number, number] | undefined
+        };
+        let styles: {
+            [style: string]: string | undefined
+        };
+        let defaultOptions: InspectOptions;
+        /**
+         * Allows changing inspect settings from the repl.
+         */
+        let replDefaults: InspectOptions;
+    }
+    /** @deprecated since v4.0.0 - use `Array.isArray()` instead. */
+    function isArray(object: any): object is any[];
+    /** @deprecated since v4.0.0 - use `util.types.isRegExp()` instead. */
+    function isRegExp(object: any): object is RegExp;
+    /** @deprecated since v4.0.0 - use `util.types.isDate()` instead. */
+    function isDate(object: any): object is Date;
+    /** @deprecated since v4.0.0 - use `util.types.isNativeError()` instead. */
+    function isError(object: any): object is Error;
+    function inherits(constructor: any, superConstructor: any): void;
+    function debuglog(key: string): (msg: string, ...param: any[]) => void;
+    /** @deprecated since v4.0.0 - use `typeof value === 'boolean'` instead. */
+    function isBoolean(object: any): object is boolean;
+    /** @deprecated since v4.0.0 - use `Buffer.isBuffer()` instead. */
+    function isBuffer(object: any): object is Buffer;
+    /** @deprecated since v4.0.0 - use `typeof value === 'function'` instead. */
+    function isFunction(object: any): boolean;
+    /** @deprecated since v4.0.0 - use `value === null` instead. */
+    function isNull(object: any): object is null;
+    /** @deprecated since v4.0.0 - use `value === null || value === undefined` instead. */
+    function isNullOrUndefined(object: any): object is null | undefined;
+    /** @deprecated since v4.0.0 - use `typeof value === 'number'` instead. */
+    function isNumber(object: any): object is number;
+    /** @deprecated since v4.0.0 - use `value !== null && typeof value === 'object'` instead. */
+    function isObject(object: any): boolean;
+    /** @deprecated since v4.0.0 - use `(typeof value !== 'object' && typeof value !== 'function') || value === null` instead. */
+    function isPrimitive(object: any): boolean;
+    /** @deprecated since v4.0.0 - use `typeof value === 'string'` instead. */
+    function isString(object: any): object is string;
+    /** @deprecated since v4.0.0 - use `typeof value === 'symbol'` instead. */
+    function isSymbol(object: any): object is symbol;
+    /** @deprecated since v4.0.0 - use `value === undefined` instead. */
+    function isUndefined(object: any): object is undefined;
+    function deprecate<T extends Function>(fn: T, message: string, code?: string): T;
+    function isDeepStrictEqual(val1: any, val2: any): boolean;
+
+    interface CustomPromisify<TCustom extends Function> extends Function {
+        __promisify__: TCustom;
+    }
+
+    function callbackify(fn: () => Promise<void>): (callback: (err: NodeJS.ErrnoException) => void) => void;
+    function callbackify<TResult>(fn: () => Promise<TResult>): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
+    function callbackify<T1>(fn: (arg1: T1) => Promise<void>): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void;
+    function callbackify<T1, TResult>(fn: (arg1: T1) => Promise<TResult>): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
+    function callbackify<T1, T2>(fn: (arg1: T1, arg2: T2) => Promise<void>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void;
+    function callbackify<T1, T2, TResult>(fn: (arg1: T1, arg2: T2) => Promise<TResult>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
+    function callbackify<T1, T2, T3>(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void;
+    function callbackify<T1, T2, T3, TResult>(
+        fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
+    function callbackify<T1, T2, T3, T4>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void;
+    function callbackify<T1, T2, T3, T4, TResult>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
+    function callbackify<T1, T2, T3, T4, T5>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void;
+    function callbackify<T1, T2, T3, T4, T5, TResult>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>,
+    ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
+    function callbackify<T1, T2, T3, T4, T5, T6>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<void>,
+    ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException) => void) => void;
+    function callbackify<T1, T2, T3, T4, T5, T6, TResult>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<TResult>
+    ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
+
+    function promisify<TCustom extends Function>(fn: CustomPromisify<TCustom>): TCustom;
+    function promisify<TResult>(fn: (callback: (err: any, result: TResult) => void) => void): () => Promise<TResult>;
+    function promisify(fn: (callback: (err?: any) => void) => void): () => Promise<void>;
+    function promisify<T1, TResult>(fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void): (arg1: T1) => Promise<TResult>;
+    function promisify<T1>(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise<void>;
+    function promisify<T1, T2, TResult>(fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2) => Promise<TResult>;
+    function promisify<T1, T2>(fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2) => Promise<void>;
+    function promisify<T1, T2, T3, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void):
+        (arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>;
+    function promisify<T1, T2, T3>(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise<void>;
+    function promisify<T1, T2, T3, T4, TResult>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void,
+    ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>;
+    function promisify<T1, T2, T3, T4>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void):
+        (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>;
+    function promisify<T1, T2, T3, T4, T5, TResult>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void,
+    ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>;
+    function promisify<T1, T2, T3, T4, T5>(
+        fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void,
+    ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>;
+    function promisify(fn: Function): Function;
+
+    namespace types {
+        function isAnyArrayBuffer(object: any): boolean;
+        function isArgumentsObject(object: any): object is IArguments;
+        function isArrayBuffer(object: any): object is ArrayBuffer;
+        function isAsyncFunction(object: any): boolean;
+        function isBooleanObject(object: any): object is Boolean;
+        function isBoxedPrimitive(object: any): object is (Number | Boolean | String | Symbol /* | Object(BigInt) | Object(Symbol) */);
+        function isDataView(object: any): object is DataView;
+        function isDate(object: any): object is Date;
+        function isExternal(object: any): boolean;
+        function isFloat32Array(object: any): object is Float32Array;
+        function isFloat64Array(object: any): object is Float64Array;
+        function isGeneratorFunction(object: any): boolean;
+        function isGeneratorObject(object: any): boolean;
+        function isInt8Array(object: any): object is Int8Array;
+        function isInt16Array(object: any): object is Int16Array;
+        function isInt32Array(object: any): object is Int32Array;
+        function isMap(object: any): boolean;
+        function isMapIterator(object: any): boolean;
+        function isModuleNamespaceObject(value: any): boolean;
+        function isNativeError(object: any): object is Error;
+        function isNumberObject(object: any): object is Number;
+        function isPromise(object: any): boolean;
+        function isProxy(object: any): boolean;
+        function isRegExp(object: any): object is RegExp;
+        function isSet(object: any): boolean;
+        function isSetIterator(object: any): boolean;
+        function isSharedArrayBuffer(object: any): boolean;
+        function isStringObject(object: any): boolean;
+        function isSymbolObject(object: any): boolean;
+        function isTypedArray(object: any): object is NodeJS.TypedArray;
+        function isUint8Array(object: any): object is Uint8Array;
+        function isUint8ClampedArray(object: any): object is Uint8ClampedArray;
+        function isUint16Array(object: any): object is Uint16Array;
+        function isUint32Array(object: any): object is Uint32Array;
+        function isWeakMap(object: any): boolean;
+        function isWeakSet(object: any): boolean;
+        function isWebAssemblyCompiledModule(object: any): boolean;
+    }
+
+    class TextDecoder {
+        readonly encoding: string;
+        readonly fatal: boolean;
+        readonly ignoreBOM: boolean;
+        constructor(
+          encoding?: string,
+          options?: { fatal?: boolean; ignoreBOM?: boolean }
+        );
+        decode(
+          input?: NodeJS.ArrayBufferView | ArrayBuffer | null,
+          options?: { stream?: boolean }
+        ): string;
+    }
+
+    interface EncodeIntoResult {
+        /**
+         * The read Unicode code units of input.
+         */
+
+        read: number;
+        /**
+         * The written UTF-8 bytes of output.
+         */
+        written: number;
+    }
+
+    class TextEncoder {
+        readonly encoding: string;
+        encode(input?: string): Uint8Array;
+        encodeInto(input: string, output: Uint8Array): EncodeIntoResult;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/v8.d.ts b/setup-maven/node_modules/@types/node/v8.d.ts
new file mode 100644
index 0000000..2e2706e
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/v8.d.ts
@@ -0,0 +1,197 @@
+declare module "v8" {
+    import { Readable } from "stream";
+
+    interface HeapSpaceInfo {
+        space_name: string;
+        space_size: number;
+        space_used_size: number;
+        space_available_size: number;
+        physical_space_size: number;
+    }
+
+    // ** Signifies if the --zap_code_space option is enabled or not.  1 == enabled, 0 == disabled. */
+    type DoesZapCodeSpaceFlag = 0 | 1;
+
+    interface HeapInfo {
+        total_heap_size: number;
+        total_heap_size_executable: number;
+        total_physical_size: number;
+        total_available_size: number;
+        used_heap_size: number;
+        heap_size_limit: number;
+        malloced_memory: number;
+        peak_malloced_memory: number;
+        does_zap_garbage: DoesZapCodeSpaceFlag;
+        number_of_native_contexts: number;
+        number_of_detached_contexts: number;
+    }
+
+    interface HeapCodeStatistics {
+        code_and_metadata_size: number;
+        bytecode_and_metadata_size: number;
+        external_script_source_size: number;
+    }
+
+    /**
+     * Returns an integer representing a "version tag" derived from the V8 version, command line flags and detected CPU features.
+     * This is useful for determining whether a vm.Script cachedData buffer is compatible with this instance of V8.
+     */
+    function cachedDataVersionTag(): number;
+
+    function getHeapStatistics(): HeapInfo;
+    function getHeapSpaceStatistics(): HeapSpaceInfo[];
+    function setFlagsFromString(flags: string): void;
+    /**
+     * Generates a snapshot of the current V8 heap and returns a Readable
+     * Stream that may be used to read the JSON serialized representation.
+     * This conversation was marked as resolved by joyeecheung
+     * This JSON stream format is intended to be used with tools such as
+     * Chrome DevTools. The JSON schema is undocumented and specific to the
+     * V8 engine, and may change from one version of V8 to the next.
+     */
+    function getHeapSnapshot(): Readable;
+
+    /**
+     *
+     * @param fileName The file path where the V8 heap snapshot is to be
+     * saved. If not specified, a file name with the pattern
+     * `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be
+     * generated, where `{pid}` will be the PID of the Node.js process,
+     * `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from
+     * the main Node.js thread or the id of a worker thread.
+     */
+    function writeHeapSnapshot(fileName?: string): string;
+
+    function getHeapCodeStatistics(): HeapCodeStatistics;
+
+    /**
+     * @experimental
+     */
+    class Serializer {
+        /**
+         * Writes out a header, which includes the serialization format version.
+         */
+        writeHeader(): void;
+
+        /**
+         * Serializes a JavaScript value and adds the serialized representation to the internal buffer.
+         * This throws an error if value cannot be serialized.
+         */
+        writeValue(val: any): boolean;
+
+        /**
+         * Returns the stored internal buffer.
+         * This serializer should not be used once the buffer is released.
+         * Calling this method results in undefined behavior if a previous write has failed.
+         */
+        releaseBuffer(): Buffer;
+
+        /**
+         * Marks an ArrayBuffer as having its contents transferred out of band.\
+         * Pass the corresponding ArrayBuffer in the deserializing context to deserializer.transferArrayBuffer().
+         */
+        transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void;
+
+        /**
+         * Write a raw 32-bit unsigned integer.
+         */
+        writeUint32(value: number): void;
+
+        /**
+         * Write a raw 64-bit unsigned integer, split into high and low 32-bit parts.
+         */
+        writeUint64(hi: number, lo: number): void;
+
+        /**
+         * Write a JS number value.
+         */
+        writeDouble(value: number): void;
+
+        /**
+         * Write raw bytes into the serializer’s internal buffer.
+         * The deserializer will require a way to compute the length of the buffer.
+         */
+        writeRawBytes(buffer: NodeJS.TypedArray): void;
+    }
+
+    /**
+     * A subclass of `Serializer` that serializes `TypedArray` (in particular `Buffer`) and `DataView` objects as host objects,
+     * and only stores the part of their underlying `ArrayBuffers` that they are referring to.
+     * @experimental
+     */
+    class DefaultSerializer extends Serializer {
+    }
+
+    /**
+     * @experimental
+     */
+    class Deserializer {
+        constructor(data: NodeJS.TypedArray);
+        /**
+         * Reads and validates a header (including the format version).
+         * May, for example, reject an invalid or unsupported wire format.
+         * In that case, an Error is thrown.
+         */
+        readHeader(): boolean;
+
+        /**
+         * Deserializes a JavaScript value from the buffer and returns it.
+         */
+        readValue(): any;
+
+        /**
+         * Marks an ArrayBuffer as having its contents transferred out of band.
+         * Pass the corresponding `ArrayBuffer` in the serializing context to serializer.transferArrayBuffer()
+         * (or return the id from serializer._getSharedArrayBufferId() in the case of SharedArrayBuffers).
+         */
+        transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void;
+
+        /**
+         * Reads the underlying wire format version.
+         * Likely mostly to be useful to legacy code reading old wire format versions.
+         * May not be called before .readHeader().
+         */
+        getWireFormatVersion(): number;
+
+        /**
+         * Read a raw 32-bit unsigned integer and return it.
+         */
+        readUint32(): number;
+
+        /**
+         * Read a raw 64-bit unsigned integer and return it as an array [hi, lo] with two 32-bit unsigned integer entries.
+         */
+        readUint64(): [number, number];
+
+        /**
+         * Read a JS number value.
+         */
+        readDouble(): number;
+
+        /**
+         * Read raw bytes from the deserializer’s internal buffer.
+         * The length parameter must correspond to the length of the buffer that was passed to serializer.writeRawBytes().
+         */
+        readRawBytes(length: number): Buffer;
+    }
+
+    /**
+     * A subclass of `Serializer` that serializes `TypedArray` (in particular `Buffer`) and `DataView` objects as host objects,
+     * and only stores the part of their underlying `ArrayBuffers` that they are referring to.
+     * @experimental
+     */
+    class DefaultDeserializer extends Deserializer {
+    }
+
+    /**
+     * Uses a `DefaultSerializer` to serialize value into a buffer.
+     * @experimental
+     */
+    function serialize(value: any): Buffer;
+
+    /**
+     * Uses a `DefaultDeserializer` with default options to read a JS value from a buffer.
+     * @experimental
+     */
+    function deserialize(data: NodeJS.TypedArray): any;
+}
diff --git a/setup-maven/node_modules/@types/node/vm.d.ts b/setup-maven/node_modules/@types/node/vm.d.ts
new file mode 100644
index 0000000..208498c
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/vm.d.ts
@@ -0,0 +1,110 @@
+declare module "vm" {
+    interface Context {
+        [key: string]: any;
+    }
+    interface BaseOptions {
+        /**
+         * Specifies the filename used in stack traces produced by this script.
+         * Default: `''`.
+         */
+        filename?: string;
+        /**
+         * Specifies the line number offset that is displayed in stack traces produced by this script.
+         * Default: `0`.
+         */
+        lineOffset?: number;
+        /**
+         * Specifies the column number offset that is displayed in stack traces produced by this script.
+         * Default: `0`
+         */
+        columnOffset?: number;
+    }
+    interface ScriptOptions extends BaseOptions {
+        displayErrors?: boolean;
+        timeout?: number;
+        cachedData?: Buffer;
+        produceCachedData?: boolean;
+    }
+    interface RunningScriptOptions extends BaseOptions {
+        /**
+         * When `true`, if an `Error` occurs while compiling the `code`, the line of code causing the error is attached to the stack trace.
+         * Default: `true`.
+         */
+        displayErrors?: boolean;
+        /**
+         * Specifies the number of milliseconds to execute code before terminating execution.
+         * If execution is terminated, an `Error` will be thrown. This value must be a strictly positive integer.
+         */
+        timeout?: number;
+        /**
+         * If `true`, the execution will be terminated when `SIGINT` (Ctrl+C) is received.
+         * Existing handlers for the event that have been attached via `process.on('SIGINT')` will be disabled during script execution, but will continue to work after that.
+         * If execution is terminated, an `Error` will be thrown.
+         * Default: `false`.
+         */
+        breakOnSigint?: boolean;
+    }
+    interface CompileFunctionOptions extends BaseOptions {
+        /**
+         * Provides an optional data with V8's code cache data for the supplied source.
+         */
+        cachedData?: Buffer;
+        /**
+         * Specifies whether to produce new cache data.
+         * Default: `false`,
+         */
+        produceCachedData?: boolean;
+        /**
+         * The sandbox/context in which the said function should be compiled in.
+         */
+        parsingContext?: Context;
+
+        /**
+         * An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling
+         */
+        contextExtensions?: Object[];
+    }
+
+    interface CreateContextOptions {
+        /**
+         * Human-readable name of the newly created context.
+         * @default 'VM Context i' Where i is an ascending numerical index of the created context.
+         */
+        name?: string;
+        /**
+         * Corresponds to the newly created context for display purposes.
+         * The origin should be formatted like a `URL`, but with only the scheme, host, and port (if necessary),
+         * like the value of the `url.origin` property of a URL object.
+         * Most notably, this string should omit the trailing slash, as that denotes a path.
+         * @default ''
+         */
+        origin?: string;
+        codeGeneration?: {
+            /**
+             * If set to false any calls to eval or function constructors (Function, GeneratorFunction, etc)
+             * will throw an EvalError.
+             * @default true
+             */
+            strings?: boolean;
+            /**
+             * If set to false any attempt to compile a WebAssembly module will throw a WebAssembly.CompileError.
+             * @default true
+             */
+            wasm?: boolean;
+        };
+    }
+
+    class Script {
+        constructor(code: string, options?: ScriptOptions);
+        runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any;
+        runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any;
+        runInThisContext(options?: RunningScriptOptions): any;
+        createCachedData(): Buffer;
+    }
+    function createContext(sandbox?: Context, options?: CreateContextOptions): Context;
+    function isContext(sandbox: Context): boolean;
+    function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions | string): any;
+    function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions | string): any;
+    function runInThisContext(code: string, options?: RunningScriptOptions | string): any;
+    function compileFunction(code: string, params: string[], options: CompileFunctionOptions): Function;
+}
diff --git a/setup-maven/node_modules/@types/node/worker_threads.d.ts b/setup-maven/node_modules/@types/node/worker_threads.d.ts
new file mode 100644
index 0000000..45ea85e
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/worker_threads.d.ts
@@ -0,0 +1,153 @@
+declare module "worker_threads" {
+    import { Context } from "vm";
+    import { EventEmitter } from "events";
+    import { Readable, Writable } from "stream";
+
+    const isMainThread: boolean;
+    const parentPort: null | MessagePort;
+    const threadId: number;
+    const workerData: any;
+
+    class MessageChannel {
+        readonly port1: MessagePort;
+        readonly port2: MessagePort;
+    }
+
+    class MessagePort extends EventEmitter {
+        close(): void;
+        postMessage(value: any, transferList?: Array<ArrayBuffer | MessagePort>): void;
+        ref(): void;
+        unref(): void;
+        start(): void;
+
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "message", listener: (value: any) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "close"): boolean;
+        emit(event: "message", value: any): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "close", listener: () => void): this;
+        on(event: "message", listener: (value: any) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "close", listener: () => void): this;
+        once(event: "message", listener: (value: any) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "message", listener: (value: any) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "message", listener: (value: any) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        removeListener(event: "close", listener: () => void): this;
+        removeListener(event: "message", listener: (value: any) => void): this;
+        removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        off(event: "close", listener: () => void): this;
+        off(event: "message", listener: (value: any) => void): this;
+        off(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+
+    interface WorkerOptions {
+        eval?: boolean;
+        workerData?: any;
+        stdin?: boolean;
+        stdout?: boolean;
+        stderr?: boolean;
+        execArgv?: string[];
+    }
+
+    class Worker extends EventEmitter {
+        readonly stdin: Writable | null;
+        readonly stdout: Readable;
+        readonly stderr: Readable;
+        readonly threadId: number;
+
+        constructor(filename: string, options?: WorkerOptions);
+
+        postMessage(value: any, transferList?: Array<ArrayBuffer | MessagePort>): void;
+        ref(): void;
+        unref(): void;
+        /**
+         * Stop all JavaScript execution in the worker thread as soon as possible.
+         * Returns a Promise for the exit code that is fulfilled when the `exit` event is emitted.
+         */
+        terminate(): Promise<number>;
+        /**
+         * Transfer a `MessagePort` to a different `vm` Context. The original `port`
+         * object will be rendered unusable, and the returned `MessagePort` instance will
+         * take its place.
+         *
+         * The returned `MessagePort` will be an object in the target context, and will
+         * inherit from its global `Object` class. Objects passed to the
+         * `port.onmessage()` listener will also be created in the target context
+         * and inherit from its global `Object` class.
+         *
+         * However, the created `MessagePort` will no longer inherit from
+         * `EventEmitter`, and only `port.onmessage()` can be used to receive
+         * events using it.
+         */
+        moveMessagePortToContext(port: MessagePort, context: Context): MessagePort;
+
+        /**
+         * Receive a single message from a given `MessagePort`. If no message is available,
+         * `undefined` is returned, otherwise an object with a single `message` property
+         * that contains the message payload, corresponding to the oldest message in the
+         * `MessagePort`’s queue.
+         */
+        receiveMessageOnPort(port: MessagePort): {} | undefined;
+
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "exit", listener: (exitCode: number) => void): this;
+        addListener(event: "message", listener: (value: any) => void): this;
+        addListener(event: "online", listener: () => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        emit(event: "error", err: Error): boolean;
+        emit(event: "exit", exitCode: number): boolean;
+        emit(event: "message", value: any): boolean;
+        emit(event: "online"): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "exit", listener: (exitCode: number) => void): this;
+        on(event: "message", listener: (value: any) => void): this;
+        on(event: "online", listener: () => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "exit", listener: (exitCode: number) => void): this;
+        once(event: "message", listener: (value: any) => void): this;
+        once(event: "online", listener: () => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "exit", listener: (exitCode: number) => void): this;
+        prependListener(event: "message", listener: (value: any) => void): this;
+        prependListener(event: "online", listener: () => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "exit", listener: (exitCode: number) => void): this;
+        prependOnceListener(event: "message", listener: (value: any) => void): this;
+        prependOnceListener(event: "online", listener: () => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        removeListener(event: "error", listener: (err: Error) => void): this;
+        removeListener(event: "exit", listener: (exitCode: number) => void): this;
+        removeListener(event: "message", listener: (value: any) => void): this;
+        removeListener(event: "online", listener: () => void): this;
+        removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
+
+        off(event: "error", listener: (err: Error) => void): this;
+        off(event: "exit", listener: (exitCode: number) => void): this;
+        off(event: "message", listener: (value: any) => void): this;
+        off(event: "online", listener: () => void): this;
+        off(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+}
diff --git a/setup-maven/node_modules/@types/node/zlib.d.ts b/setup-maven/node_modules/@types/node/zlib.d.ts
new file mode 100644
index 0000000..a03e900
--- /dev/null
+++ b/setup-maven/node_modules/@types/node/zlib.d.ts
@@ -0,0 +1,352 @@
+declare module "zlib" {
+    import * as stream from "stream";
+
+    interface ZlibOptions {
+        /**
+         * @default constants.Z_NO_FLUSH
+         */
+        flush?: number;
+        /**
+         * @default constants.Z_FINISH
+         */
+        finishFlush?: number;
+        /**
+         * @default 16*1024
+         */
+        chunkSize?: number;
+        windowBits?: number;
+        level?: number; // compression only
+        memLevel?: number; // compression only
+        strategy?: number; // compression only
+        dictionary?: NodeJS.ArrayBufferView | ArrayBuffer; // deflate/inflate only, empty dictionary by default
+    }
+
+    interface BrotliOptions {
+        /**
+         * @default constants.BROTLI_OPERATION_PROCESS
+         */
+        flush?: number;
+        /**
+         * @default constants.BROTLI_OPERATION_FINISH
+         */
+        finishFlush?: number;
+        /**
+         * @default 16*1024
+         */
+        chunkSize?: number;
+        params?: {
+            /**
+             * Each key is a `constants.BROTLI_*` constant.
+             */
+            [key: number]: boolean | number;
+        };
+    }
+
+    interface Zlib {
+        /** @deprecated Use bytesWritten instead. */
+        readonly bytesRead: number;
+        readonly bytesWritten: number;
+        shell?: boolean | string;
+        close(callback?: () => void): void;
+        flush(kind?: number | (() => void), callback?: () => void): void;
+    }
+
+    interface ZlibParams {
+        params(level: number, strategy: number, callback: () => void): void;
+    }
+
+    interface ZlibReset {
+        reset(): void;
+    }
+
+    interface BrotliCompress extends stream.Transform, Zlib { }
+    interface BrotliDecompress extends stream.Transform, Zlib { }
+    interface Gzip extends stream.Transform, Zlib { }
+    interface Gunzip extends stream.Transform, Zlib { }
+    interface Deflate extends stream.Transform, Zlib, ZlibReset, ZlibParams { }
+    interface Inflate extends stream.Transform, Zlib, ZlibReset { }
+    interface DeflateRaw extends stream.Transform, Zlib, ZlibReset, ZlibParams { }
+    interface InflateRaw extends stream.Transform, Zlib, ZlibReset { }
+    interface Unzip extends stream.Transform, Zlib { }
+
+    function createBrotliCompress(options?: BrotliOptions): BrotliCompress;
+    function createBrotliDecompress(options?: BrotliOptions): BrotliDecompress;
+    function createGzip(options?: ZlibOptions): Gzip;
+    function createGunzip(options?: ZlibOptions): Gunzip;
+    function createDeflate(options?: ZlibOptions): Deflate;
+    function createInflate(options?: ZlibOptions): Inflate;
+    function createDeflateRaw(options?: ZlibOptions): DeflateRaw;
+    function createInflateRaw(options?: ZlibOptions): InflateRaw;
+    function createUnzip(options?: ZlibOptions): Unzip;
+
+    type InputType = string | ArrayBuffer | NodeJS.ArrayBufferView;
+
+    type CompressCallback = (error: Error | null, result: Buffer) => void;
+
+    function brotliCompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void;
+    function brotliCompress(buf: InputType, callback: CompressCallback): void;
+    function brotliCompressSync(buf: InputType, options?: BrotliOptions): Buffer;
+    function brotliDecompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void;
+    function brotliDecompress(buf: InputType, callback: CompressCallback): void;
+    function brotliDecompressSync(buf: InputType, options?: BrotliOptions): Buffer;
+    function deflate(buf: InputType, callback: CompressCallback): void;
+    function deflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void;
+    function deflateSync(buf: InputType, options?: ZlibOptions): Buffer;
+    function deflateRaw(buf: InputType, callback: CompressCallback): void;
+    function deflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void;
+    function deflateRawSync(buf: InputType, options?: ZlibOptions): Buffer;
+    function gzip(buf: InputType, callback: CompressCallback): void;
+    function gzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void;
+    function gzipSync(buf: InputType, options?: ZlibOptions): Buffer;
+    function gunzip(buf: InputType, callback: CompressCallback): void;
+    function gunzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void;
+    function gunzipSync(buf: InputType, options?: ZlibOptions): Buffer;
+    function inflate(buf: InputType, callback: CompressCallback): void;
+    function inflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void;
+    function inflateSync(buf: InputType, options?: ZlibOptions): Buffer;
+    function inflateRaw(buf: InputType, callback: CompressCallback): void;
+    function inflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void;
+    function inflateRawSync(buf: InputType, options?: ZlibOptions): Buffer;
+    function unzip(buf: InputType, callback: CompressCallback): void;
+    function unzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void;
+    function unzipSync(buf: InputType, options?: ZlibOptions): Buffer;
+
+    namespace constants {
+        const BROTLI_DECODE: number;
+        const BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number;
+        const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: number;
+        const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: number;
+        const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: number;
+        const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number;
+        const BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: number;
+        const BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: number;
+        const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: number;
+        const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: number;
+        const BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: number;
+        const BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: number;
+        const BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: number;
+        const BROTLI_DECODER_ERROR_FORMAT_DISTANCE: number;
+        const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: number;
+        const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: number;
+        const BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: number;
+        const BROTLI_DECODER_ERROR_FORMAT_PADDING_1: number;
+        const BROTLI_DECODER_ERROR_FORMAT_PADDING_2: number;
+        const BROTLI_DECODER_ERROR_FORMAT_RESERVED: number;
+        const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: number;
+        const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: number;
+        const BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: number;
+        const BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: number;
+        const BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: number;
+        const BROTLI_DECODER_ERROR_UNREACHABLE: number;
+        const BROTLI_DECODER_NEEDS_MORE_INPUT: number;
+        const BROTLI_DECODER_NEEDS_MORE_OUTPUT: number;
+        const BROTLI_DECODER_NO_ERROR: number;
+        const BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: number;
+        const BROTLI_DECODER_PARAM_LARGE_WINDOW: number;
+        const BROTLI_DECODER_RESULT_ERROR: number;
+        const BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: number;
+        const BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: number;
+        const BROTLI_DECODER_RESULT_SUCCESS: number;
+        const BROTLI_DECODER_SUCCESS: number;
+
+        const BROTLI_DEFAULT_MODE: number;
+        const BROTLI_DEFAULT_QUALITY: number;
+        const BROTLI_DEFAULT_WINDOW: number;
+        const BROTLI_ENCODE: number;
+        const BROTLI_LARGE_MAX_WINDOW_BITS: number;
+        const BROTLI_MAX_INPUT_BLOCK_BITS: number;
+        const BROTLI_MAX_QUALITY: number;
+        const BROTLI_MAX_WINDOW_BITS: number;
+        const BROTLI_MIN_INPUT_BLOCK_BITS: number;
+        const BROTLI_MIN_QUALITY: number;
+        const BROTLI_MIN_WINDOW_BITS: number;
+
+        const BROTLI_MODE_FONT: number;
+        const BROTLI_MODE_GENERIC: number;
+        const BROTLI_MODE_TEXT: number;
+
+        const BROTLI_OPERATION_EMIT_METADATA: number;
+        const BROTLI_OPERATION_FINISH: number;
+        const BROTLI_OPERATION_FLUSH: number;
+        const BROTLI_OPERATION_PROCESS: number;
+
+        const BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: number;
+        const BROTLI_PARAM_LARGE_WINDOW: number;
+        const BROTLI_PARAM_LGBLOCK: number;
+        const BROTLI_PARAM_LGWIN: number;
+        const BROTLI_PARAM_MODE: number;
+        const BROTLI_PARAM_NDIRECT: number;
+        const BROTLI_PARAM_NPOSTFIX: number;
+        const BROTLI_PARAM_QUALITY: number;
+        const BROTLI_PARAM_SIZE_HINT: number;
+
+        const DEFLATE: number;
+        const DEFLATERAW: number;
+        const GUNZIP: number;
+        const GZIP: number;
+        const INFLATE: number;
+        const INFLATERAW: number;
+        const UNZIP: number;
+
+        const Z_BEST_COMPRESSION: number;
+        const Z_BEST_SPEED: number;
+        const Z_BLOCK: number;
+        const Z_BUF_ERROR: number;
+        const Z_DATA_ERROR: number;
+
+        const Z_DEFAULT_CHUNK: number;
+        const Z_DEFAULT_COMPRESSION: number;
+        const Z_DEFAULT_LEVEL: number;
+        const Z_DEFAULT_MEMLEVEL: number;
+        const Z_DEFAULT_STRATEGY: number;
+        const Z_DEFAULT_WINDOWBITS: number;
+
+        const Z_ERRNO: number;
+        const Z_FILTERED: number;
+        const Z_FINISH: number;
+        const Z_FIXED: number;
+        const Z_FULL_FLUSH: number;
+        const Z_HUFFMAN_ONLY: number;
+        const Z_MAX_CHUNK: number;
+        const Z_MAX_LEVEL: number;
+        const Z_MAX_MEMLEVEL: number;
+        const Z_MAX_WINDOWBITS: number;
+        const Z_MEM_ERROR: number;
+        const Z_MIN_CHUNK: number;
+        const Z_MIN_LEVEL: number;
+        const Z_MIN_MEMLEVEL: number;
+        const Z_MIN_WINDOWBITS: number;
+        const Z_NEED_DICT: number;
+        const Z_NO_COMPRESSION: number;
+        const Z_NO_FLUSH: number;
+        const Z_OK: number;
+        const Z_PARTIAL_FLUSH: number;
+        const Z_RLE: number;
+        const Z_STREAM_END: number;
+        const Z_STREAM_ERROR: number;
+        const Z_SYNC_FLUSH: number;
+        const Z_VERSION_ERROR: number;
+        const ZLIB_VERNUM: number;
+    }
+
+    /**
+     * @deprecated
+     */
+    const Z_NO_FLUSH: number;
+    /**
+     * @deprecated
+     */
+    const Z_PARTIAL_FLUSH: number;
+    /**
+     * @deprecated
+     */
+    const Z_SYNC_FLUSH: number;
+    /**
+     * @deprecated
+     */
+    const Z_FULL_FLUSH: number;
+    /**
+     * @deprecated
+     */
+    const Z_FINISH: number;
+    /**
+     * @deprecated
+     */
+    const Z_BLOCK: number;
+    /**
+     * @deprecated
+     */
+    const Z_TREES: number;
+    /**
+     * @deprecated
+     */
+    const Z_OK: number;
+    /**
+     * @deprecated
+     */
+    const Z_STREAM_END: number;
+    /**
+     * @deprecated
+     */
+    const Z_NEED_DICT: number;
+    /**
+     * @deprecated
+     */
+    const Z_ERRNO: number;
+    /**
+     * @deprecated
+     */
+    const Z_STREAM_ERROR: number;
+    /**
+     * @deprecated
+     */
+    const Z_DATA_ERROR: number;
+    /**
+     * @deprecated
+     */
+    const Z_MEM_ERROR: number;
+    /**
+     * @deprecated
+     */
+    const Z_BUF_ERROR: number;
+    /**
+     * @deprecated
+     */
+    const Z_VERSION_ERROR: number;
+    /**
+     * @deprecated
+     */
+    const Z_NO_COMPRESSION: number;
+    /**
+     * @deprecated
+     */
+    const Z_BEST_SPEED: number;
+    /**
+     * @deprecated
+     */
+    const Z_BEST_COMPRESSION: number;
+    /**
+     * @deprecated
+     */
+    const Z_DEFAULT_COMPRESSION: number;
+    /**
+     * @deprecated
+     */
+    const Z_FILTERED: number;
+    /**
+     * @deprecated
+     */
+    const Z_HUFFMAN_ONLY: number;
+    /**
+     * @deprecated
+     */
+    const Z_RLE: number;
+    /**
+     * @deprecated
+     */
+    const Z_FIXED: number;
+    /**
+     * @deprecated
+     */
+    const Z_DEFAULT_STRATEGY: number;
+    /**
+     * @deprecated
+     */
+    const Z_BINARY: number;
+    /**
+     * @deprecated
+     */
+    const Z_TEXT: number;
+    /**
+     * @deprecated
+     */
+    const Z_ASCII: number;
+    /**
+     * @deprecated
+     */
+    const Z_UNKNOWN: number;
+    /**
+     * @deprecated
+     */
+    const Z_DEFLATED: number;
+}
diff --git a/setup-maven/node_modules/atob-lite/.npmignore b/setup-maven/node_modules/atob-lite/.npmignore
new file mode 100644
index 0000000..50c7458
--- /dev/null
+++ b/setup-maven/node_modules/atob-lite/.npmignore
@@ -0,0 +1,6 @@
+node_modules
+*.log
+.DS_Store
+bundle.js
+test
+test.js
diff --git a/setup-maven/node_modules/atob-lite/LICENSE.md b/setup-maven/node_modules/atob-lite/LICENSE.md
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/setup-maven/node_modules/atob-lite/LICENSE.md
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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/setup-maven/node_modules/atob-lite/README.md b/setup-maven/node_modules/atob-lite/README.md
new file mode 100644
index 0000000..99ea05d
--- /dev/null
+++ b/setup-maven/node_modules/atob-lite/README.md
@@ -0,0 +1,37 @@
+# atob-lite
+![](http://img.shields.io/badge/stability-stable-orange.svg?style=flat)
+![](http://img.shields.io/npm/v/atob-lite.svg?style=flat)
+![](http://img.shields.io/npm/dm/atob-lite.svg?style=flat)
+![](http://img.shields.io/npm/l/atob-lite.svg?style=flat)
+
+Smallest/simplest possible means of using atob with both Node and browserify.
+
+In the browser, decoding base64 strings is done using:
+
+``` javascript
+var decoded = atob(encoded)
+```
+
+However in Node, it's done like so:
+
+``` javascript
+var decoded = new Buffer(encoded, 'base64').toString('utf8')
+```
+
+You can easily check if `Buffer` exists and switch between the approaches
+accordingly, but using `Buffer` anywhere in your browser source will pull
+in browserify's `Buffer` shim which is pretty hefty. This package uses
+the `main` and `browser` fields in its `package.json` to perform this
+check at build time and avoid pulling `Buffer` in unnecessarily.
+
+## Usage
+
+[![NPM](https://nodei.co/npm/atob-lite.png)](https://nodei.co/npm/atob-lite/)
+
+### `decoded = atob(encoded)`
+
+Returns the decoded value of a base64-encoded string.
+
+## License
+
+MIT. See [LICENSE.md](http://github.com/hughsk/atob-lite/blob/master/LICENSE.md) for details.
diff --git a/setup-maven/node_modules/atob-lite/atob-browser.js b/setup-maven/node_modules/atob-lite/atob-browser.js
new file mode 100644
index 0000000..cee1a38
--- /dev/null
+++ b/setup-maven/node_modules/atob-lite/atob-browser.js
@@ -0,0 +1,3 @@
+module.exports = function _atob(str) {
+  return atob(str)
+}
diff --git a/setup-maven/node_modules/atob-lite/atob-node.js b/setup-maven/node_modules/atob-lite/atob-node.js
new file mode 100644
index 0000000..7072075
--- /dev/null
+++ b/setup-maven/node_modules/atob-lite/atob-node.js
@@ -0,0 +1,3 @@
+module.exports = function atob(str) {
+  return Buffer.from(str, 'base64').toString('binary')
+}
diff --git a/setup-maven/node_modules/atob-lite/package.json b/setup-maven/node_modules/atob-lite/package.json
new file mode 100644
index 0000000..4330f28
--- /dev/null
+++ b/setup-maven/node_modules/atob-lite/package.json
@@ -0,0 +1,67 @@
+{
+  "_from": "atob-lite@^2.0.0",
+  "_id": "atob-lite@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=",
+  "_location": "/atob-lite",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "atob-lite@^2.0.0",
+    "name": "atob-lite",
+    "escapedName": "atob-lite",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz",
+  "_shasum": "0fef5ad46f1bd7a8502c65727f0367d5ee43d696",
+  "_spec": "atob-lite@^2.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "author": {
+    "name": "Hugh Kennedy",
+    "email": "hughskennedy@gmail.com",
+    "url": "http://hughsk.io/"
+  },
+  "browser": "atob-browser.js",
+  "bugs": {
+    "url": "https://github.com/hughsk/atob-lite/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Smallest/simplest possible means of using atob with both Node and browserify",
+  "devDependencies": {
+    "browserify": "^10.2.4",
+    "smokestack": "^3.3.0",
+    "tap-closer": "^1.0.0",
+    "tap-spec": "^4.0.0",
+    "tape": "^4.0.0"
+  },
+  "homepage": "https://github.com/hughsk/atob-lite",
+  "keywords": [
+    "atob",
+    "base64",
+    "isomorphic",
+    "browser",
+    "node",
+    "shared"
+  ],
+  "license": "MIT",
+  "main": "atob-node.js",
+  "name": "atob-lite",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/hughsk/atob-lite.git"
+  },
+  "scripts": {
+    "test": "npm run test-node && npm run test-browser",
+    "test-browser": "browserify test | smokestack | tap-spec",
+    "test-node": "node test | tap-spec"
+  },
+  "version": "2.0.0"
+}
diff --git a/setup-maven/node_modules/before-after-hook/LICENSE b/setup-maven/node_modules/before-after-hook/LICENSE
new file mode 100644
index 0000000..225063c
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2018 Gregor Martynus and other contributors.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/setup-maven/node_modules/before-after-hook/README.md b/setup-maven/node_modules/before-after-hook/README.md
new file mode 100644
index 0000000..68c927d
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/README.md
@@ -0,0 +1,574 @@
+# before-after-hook
+
+> asynchronous hooks for internal functionality
+
+[![npm downloads](https://img.shields.io/npm/dw/before-after-hook.svg)](https://www.npmjs.com/package/before-after-hook)
+[![Build Status](https://travis-ci.org/gr2m/before-after-hook.svg?branch=master)](https://travis-ci.org/gr2m/before-after-hook)
+[![Coverage Status](https://coveralls.io/repos/gr2m/before-after-hook/badge.svg?branch=master)](https://coveralls.io/r/gr2m/before-after-hook?branch=master)
+[![Greenkeeper badge](https://badges.greenkeeper.io/gr2m/before-after-hook.svg)](https://greenkeeper.io/)
+
+## Usage
+
+### Singular hook
+
+Recommended for [TypeScript](#typescript)
+
+```js
+// instantiate singular hook API
+const hook = new Hook.Singular()
+
+// Create a hook
+function getData (options) {
+  return hook(fetchFromDatabase, options)
+    .then(handleData)
+    .catch(handleGetError)
+}
+
+// register before/error/after hooks.
+// The methods can be async or return a promise
+hook.before(beforeHook)
+hook.error(errorHook)
+hook.after(afterHook)
+
+getData({id: 123})
+```
+
+### Hook collection
+```js
+// instantiate hook collection API
+const hookCollection = new Hook.Collection()
+
+// Create a hook
+function getData (options) {
+  return hookCollection('get', fetchFromDatabase, options)
+    .then(handleData)
+    .catch(handleGetError)
+}
+
+// register before/error/after hooks.
+// The methods can be async or return a promise
+hookCollection.before('get', beforeHook)
+hookCollection.error('get', errorHook)
+hookCollection.after('get', afterHook)
+
+getData({id: 123})
+```
+
+### Hook.Singular vs Hook.Collection
+
+There's no fundamental difference between the `Hook.Singular` and `Hook.Collection` hooks except for the fact that a hook from a collection requires you to pass along the name. Therefore the following explanation applies to both code snippets as described above.
+
+The methods are executed in the following order
+
+1. `beforeHook`
+2. `fetchFromDatabase`
+3. `afterHook`
+4. `getData`
+
+`beforeHook` can mutate `options` before it’s passed to `fetchFromDatabase`.
+
+If an error is thrown in `beforeHook` or `fetchFromDatabase` then `errorHook` is
+called next.
+
+If `afterHook` throws an error then `handleGetError` is called instead
+of `getData`.
+
+If `errorHook` throws an error then `handleGetError` is called next, otherwise
+`afterHook` and `getData`.
+
+You can also use `hook.wrap` to achieve the same thing as shown above (collection example):
+
+```js
+hookCollection.wrap('get', async (getData, options) => {
+  await beforeHook(options)
+
+  try {
+    const result = getData(options)
+  } catch (error) {
+    await errorHook(error, options)
+  }
+
+  await afterHook(result, options)
+})
+```
+
+## Install
+
+```
+npm install before-after-hook
+```
+
+Or download [the latest `before-after-hook.min.js`](https://github.com/gr2m/before-after-hook/releases/latest).
+
+## API
+
+- [Singular Hook Constructor](#singular-hook-api)
+- [Hook Collection Constructor](#hook-collection-api)
+
+## Singular hook API
+
+- [Singular constructor](#singular-constructor)
+- [hook.api](#singular-api)
+- [hook()](#singular-api)
+- [hook.before()](#singular-api)
+- [hook.error()](#singular-api)
+- [hook.after()](#singular-api)
+- [hook.wrap()](#singular-api)
+- [hook.remove()](#singular-api)
+
+### Singular constructor
+
+The `Hook.Singular` constructor has no options and returns a `hook` instance with the
+methods below:
+
+```js
+const hook = new Hook.Singular()
+```
+Using the singular hook is recommended for [TypeScript](#typescript)
+
+### Singular API
+
+The singular hook is a reference to a single hook. This means that there's no need to pass along any identifier (such as a `name` as can be seen in the [Hook.Collection API](#hookcollectionapi)).
+
+The API of a singular hook is exactly the same as a collection hook and we therefore suggest you read the [Hook.Collection API](#hookcollectionapi) and leave out any use of the `name` argument. Just skip it like described in this example:
+```js
+const hook = new Hook.Singular()
+
+// good
+hook.before(beforeHook)
+hook.after(afterHook)
+hook(fetchFromDatabase, options)
+
+// bad
+hook.before('get', beforeHook)
+hook.after('get', afterHook)
+hook('get', fetchFromDatabase, options)
+```
+
+## Hook collection API
+
+- [Collection constructor](#collection-constructor)
+- [collection.api](#collectionapi)
+- [collection()](#collection)
+- [collection.before()](#collectionbefore)
+- [collection.error()](#collectionerror)
+- [collection.after()](#collectionafter)
+- [collection.wrap()](#collectionwrap)
+- [collection.remove()](#collectionremove)
+
+### Collection constructor
+
+The `Hook.Collection` constructor has no options and returns a `hookCollection` instance with the
+methods below
+
+```js
+const hookCollection = new Hook.Collection()
+```
+
+### hookCollection.api
+
+Use the `api` property to return the public API:
+
+- [hookCollection.before()](#hookcollectionbefore)
+- [hookCollection.after()](#hookcollectionafter)
+- [hookCollection.error()](#hookcollectionerror)
+- [hookCollection.wrap()](#hookcollectionwrap)
+- [hookCollection.remove()](#hookcollectionremove)
+
+That way you don’t need to expose the [hookCollection()](#hookcollection) method to consumers of your library
+
+### hookCollection()
+
+Invoke before and after hooks. Returns a promise.
+
+```js
+hookCollection(nameOrNames, method /*, options */)
+```
+
+<table>
+  <thead>
+    <tr>
+      <th>Argument</th>
+      <th>Type</th>
+      <th>Description</th>
+      <th>Required</th>
+    </tr>
+  </thead>
+  <tr>
+    <th align="left"><code>name</code></th>
+    <td>String or Array of Strings</td>
+    <td>Hook name, for example <code>'save'</code>. Or an array of names, see example below.</td>
+    <td>Yes</td>
+  </tr>
+  <tr>
+    <th align="left"><code>method</code></th>
+    <td>Function</td>
+    <td>Callback to be executed after all before hooks finished execution successfully. <code>options</code> is passed as first argument</td>
+    <td>Yes</td>
+  </tr>
+  <tr>
+    <th align="left"><code>options</code></th>
+    <td>Object</td>
+    <td>Will be passed to all before hooks as reference, so they can mutate it</td>
+    <td>No, defaults to empty object (<code>{}</code>)</td>
+  </tr>
+</table>
+
+Resolves with whatever `method` returns or resolves with.
+Rejects with error that is thrown or rejected with by
+
+1. Any of the before hooks, whichever rejects / throws first
+2. `method`
+3. Any of the after hooks, whichever rejects / throws first
+
+Simple Example
+
+```js
+hookCollection('save', function (record) {
+  return store.save(record)
+}, record)
+// shorter:  hookCollection('save', store.save, record)
+
+hookCollection.before('save', function addTimestamps (record) {
+  const now = new Date().toISOString()
+  if (record.createdAt) {
+    record.updatedAt = now
+  } else {
+    record.createdAt = now
+  }
+})
+```
+
+Example defining multiple hooks at once.
+
+```js
+hookCollection(['add', 'save'], function (record) {
+  return store.save(record)
+}, record)
+
+hookCollection.before('add', function addTimestamps (record) {
+  if (!record.type) {
+    throw new Error('type property is required')
+  }
+})
+
+hookCollection.before('save', function addTimestamps (record) {
+  if (!record.type) {
+    throw new Error('type property is required')
+  }
+})
+```
+
+Defining multiple hooks is helpful if you have similar methods for which you want to define separate hooks, but also an additional hook that gets called for all at once. The example above is equal to this:
+
+```js
+hookCollection('add', function (record) {
+  return hookCollection('save', function (record) {
+    return store.save(record)
+  }, record)
+}, record)
+```
+
+### hookCollection.before()
+
+Add before hook for given name.
+
+```js
+hookCollection.before(name, method)
+```
+
+<table>
+  <thead>
+    <tr>
+      <th>Argument</th>
+      <th>Type</th>
+      <th>Description</th>
+      <th>Required</th>
+    </tr>
+  </thead>
+  <tr>
+    <th align="left"><code>name</code></th>
+    <td>String</td>
+    <td>Hook name, for example <code>'save'</code></td>
+    <td>Yes</td>
+  </tr>
+  <tr>
+    <th align="left"><code>method</code></th>
+    <td>Function</td>
+    <td>
+      Executed before the wrapped method. Called with the hook’s
+      <code>options</code> argument. Before hooks can mutate the passed options
+      before they are passed to the wrapped method.
+    </td>
+    <td>Yes</td>
+  </tr>
+</table>
+
+Example
+
+```js
+hookCollection.before('save', function validate (record) {
+  if (!record.name) {
+    throw new Error('name property is required')
+  }
+})
+```
+
+### hookCollection.error()
+
+Add error hook for given name.
+
+```js
+hookCollection.error(name, method)
+```
+
+<table>
+  <thead>
+    <tr>
+      <th>Argument</th>
+      <th>Type</th>
+      <th>Description</th>
+      <th>Required</th>
+    </tr>
+  </thead>
+  <tr>
+    <th align="left"><code>name</code></th>
+    <td>String</td>
+    <td>Hook name, for example <code>'save'</code></td>
+    <td>Yes</td>
+  </tr>
+  <tr>
+    <th align="left"><code>method</code></th>
+    <td>Function</td>
+    <td>
+      Executed when an error occurred in either the wrapped method or a
+      <code>before</code> hook. Called with the thrown <code>error</code>
+      and the hook’s <code>options</code> argument. The first <code>method</code>
+      which does not throw an error will set the result that the after hook
+      methods will receive.
+    </td>
+    <td>Yes</td>
+  </tr>
+</table>
+
+Example
+
+```js
+hookCollection.error('save', function (error, options) {
+  if (error.ignore) return
+  throw error
+})
+```
+
+### hookCollection.after()
+
+Add after hook for given name.
+
+```js
+hookCollection.after(name, method)
+```
+
+<table>
+  <thead>
+    <tr>
+      <th>Argument</th>
+      <th>Type</th>
+      <th>Description</th>
+      <th>Required</th>
+    </tr>
+  </thead>
+  <tr>
+    <th align="left"><code>name</code></th>
+    <td>String</td>
+    <td>Hook name, for example <code>'save'</code></td>
+    <td>Yes</td>
+  </tr>
+  <tr>
+    <th align="left"><code>method</code></th>
+    <td>Function</td>
+    <td>
+    Executed after wrapped method. Called with what the wrapped method
+    resolves with the hook’s <code>options</code> argument.
+    </td>
+    <td>Yes</td>
+  </tr>
+</table>
+
+Example
+
+```js
+hookCollection.after('save', function (result, options) {
+  if (result.updatedAt) {
+    app.emit('update', result)
+  } else {
+    app.emit('create', result)
+  }
+})
+```
+
+### hookCollection.wrap()
+
+Add wrap hook for given name.
+
+```js
+hookCollection.wrap(name, method)
+```
+
+<table>
+  <thead>
+    <tr>
+      <th>Argument</th>
+      <th>Type</th>
+      <th>Description</th>
+      <th>Required</th>
+    </tr>
+  </thead>
+  <tr>
+    <th align="left"><code>name</code></th>
+    <td>String</td>
+    <td>Hook name, for example <code>'save'</code></td>
+    <td>Yes</td>
+  </tr>
+  <tr>
+    <th align="left"><code>method</code></th>
+    <td>Function</td>
+    <td>
+      Receives both the wrapped method and the passed options as arguments so it can add logic before and after the wrapped method, it can handle errors and even replace the wrapped method altogether
+    </td>
+    <td>Yes</td>
+  </tr>
+</table>
+
+Example
+
+```js
+hookCollection.wrap('save', async function (saveInDatabase, options) {
+  if (!record.name) {
+    throw new Error('name property is required')
+  }
+
+  try {
+    const result = await saveInDatabase(options)
+
+    if (result.updatedAt) {
+      app.emit('update', result)
+    } else {
+      app.emit('create', result)
+    }
+
+    return result
+  } catch (error) {
+    if (error.ignore) return
+    throw error
+  }
+})
+```
+
+See also: [Test mock example](examples/test-mock-example.md)
+
+### hookCollection.remove()
+
+Removes hook for given name.
+
+```js
+hookCollection.remove(name, hookMethod)
+```
+
+<table>
+  <thead>
+    <tr>
+      <th>Argument</th>
+      <th>Type</th>
+      <th>Description</th>
+      <th>Required</th>
+    </tr>
+  </thead>
+  <tr>
+    <th align="left"><code>name</code></th>
+    <td>String</td>
+    <td>Hook name, for example <code>'save'</code></td>
+    <td>Yes</td>
+  </tr>
+  <tr>
+    <th align="left"><code>beforeHookMethod</code></th>
+    <td>Function</td>
+    <td>
+      Same function that was previously passed to <code>hookCollection.before()</code>, <code>hookCollection.error()</code>, <code>hookCollection.after()</code> or <code>hookCollection.wrap()</code>
+    </td>
+    <td>Yes</td>
+  </tr>
+</table>
+
+Example
+
+```js
+hookCollection.remove('save', validateRecord)
+```
+
+## TypeScript
+
+This library contains type definitions for TypeScript. When you use TypeScript we highly recommend using the `Hook.Singular` constructor for your hooks as this allows you to pass along type information for the options object. For example:
+
+```ts
+
+import {Hook} from 'before-after-hook'
+
+interface Foo {
+  bar: string
+  num: number;
+}
+
+const hook = new Hook.Singular<Foo>();
+
+hook.before(function (foo) {
+
+  // typescript will complain about the following mutation attempts
+  foo.hello = 'world'
+  foo.bar = 123
+
+  // yet this is valid
+  foo.bar = 'other-string'
+  foo.num = 123
+})
+
+const foo = hook(function(foo) {
+  // handle `foo`
+  foo.bar = 'another-string'
+}, {bar: 'random-string'})
+
+// foo outputs
+{
+  bar: 'another-string',
+  num: 123
+}
+```
+
+An alternative import:
+
+```ts
+import {Singular, Collection} from 'before-after-hook'
+
+const hook = new Singular<{foo: string}>();
+const hookCollection = new Collection();
+```
+
+## Upgrading to 1.4
+
+Since version 1.4 the `Hook` constructor has been deprecated in favor of returning `Hook.Singular` in an upcoming breaking release. 
+
+Version 1.4 is still 100% backwards-compatible, but if you want to continue using hook collections, we recommend using the `Hook.Collection` constructor instead before the next release.
+
+For even more details, check out [the PR](https://github.com/gr2m/before-after-hook/pull/52).
+
+## See also
+
+If `before-after-hook` is not for you, have a look at one of these alternatives:
+
+- https://github.com/keystonejs/grappling-hook
+- https://github.com/sebelga/promised-hooks
+- https://github.com/bnoguchi/hooks-js
+- https://github.com/cb1kenobi/hook-emitter
+
+## License
+
+[Apache 2.0](LICENSE)
diff --git a/setup-maven/node_modules/before-after-hook/index.d.ts b/setup-maven/node_modules/before-after-hook/index.d.ts
new file mode 100644
index 0000000..3c19a5c
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/index.d.ts
@@ -0,0 +1,96 @@
+type HookMethod<O, R> = (options: O) => R | Promise<R>
+
+type BeforeHook<O> = (options: O) => void
+type ErrorHook<O, E> = (error: E, options: O) => void
+type AfterHook<O, R> = (result: R, options: O) => void
+type WrapHook<O, R> = (
+  hookMethod: HookMethod<O, R>,
+  options: O
+) => R | Promise<R>
+
+type AnyHook<O, R, E> =
+  | BeforeHook<O>
+  | ErrorHook<O, E>
+  | AfterHook<O, R>
+  | WrapHook<O, R>
+
+export interface HookCollection {
+  /**
+   * Invoke before and after hooks
+   */
+  (
+    name: string | string[],
+    hookMethod: HookMethod<any, any>,
+    options?: any
+  ): Promise<any>
+  /**
+   * Add `before` hook for given `name`
+   */
+  before(name: string, beforeHook: BeforeHook<any>): void
+  /**
+   * Add `error` hook for given `name`
+   */
+  error(name: string, errorHook: ErrorHook<any, any>): void
+  /**
+   * Add `after` hook for given `name`
+   */
+  after(name: string, afterHook: AfterHook<any, any>): void
+  /**
+   * Add `wrap` hook for given `name`
+   */
+  wrap(name: string, wrapHook: WrapHook<any, any>): void
+  /**
+   * Remove added hook for given `name`
+   */
+  remove(name: string, hook: AnyHook<any, any, any>): void
+}
+
+export interface HookSingular<O, R, E> {
+  /**
+   * Invoke before and after hooks
+   */
+  (hookMethod: HookMethod<O, R>, options?: O): Promise<R>
+  /**
+   * Add `before` hook
+   */
+  before(beforeHook: BeforeHook<O>): void
+  /**
+   * Add `error` hook
+   */
+  error(errorHook: ErrorHook<O, E>): void
+  /**
+   * Add `after` hook
+   */
+  after(afterHook: AfterHook<O, R>): void
+  /**
+   * Add `wrap` hook
+   */
+  wrap(wrapHook: WrapHook<O, R>): void
+  /**
+   * Remove added hook
+   */
+  remove(hook: AnyHook<O, R, E>): void
+}
+
+type Collection = new () => HookCollection
+type Singular = new <O = any, R = any, E = any>() => HookSingular<O, R, E>
+
+interface Hook {
+  new (): HookCollection
+
+  /**
+   * Creates a collection of hooks
+   */
+  Collection: Collection
+
+  /**
+   * Creates a nameless hook that supports strict typings
+   */
+  Singular: Singular
+}
+
+export const Hook: Hook
+export const Collection: Collection
+export const Singular: Singular
+
+export default Hook
diff --git a/setup-maven/node_modules/before-after-hook/index.js b/setup-maven/node_modules/before-after-hook/index.js
new file mode 100644
index 0000000..a97d89b
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/index.js
@@ -0,0 +1,57 @@
+var register = require('./lib/register')
+var addHook = require('./lib/add')
+var removeHook = require('./lib/remove')
+
+// bind with array of arguments: https://stackoverflow.com/a/21792913
+var bind = Function.bind
+var bindable = bind.bind(bind)
+
+function bindApi (hook, state, name) {
+  var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])
+  hook.api = { remove: removeHookRef }
+  hook.remove = removeHookRef
+
+  ;['before', 'error', 'after', 'wrap'].forEach(function (kind) {
+    var args = name ? [state, kind, name] : [state, kind]
+    hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)
+  })
+}
+
+function HookSingular () {
+  var singularHookName = 'h'
+  var singularHookState = {
+    registry: {}
+  }
+  var singularHook = register.bind(null, singularHookState, singularHookName)
+  bindApi(singularHook, singularHookState, singularHookName)
+  return singularHook
+}
+
+function HookCollection () {
+  var state = {
+    registry: {}
+  }
+
+  var hook = register.bind(null, state)
+  bindApi(hook, state)
+
+  return hook
+}
+
+var collectionHookDeprecationMessageDisplayed = false
+function Hook () {
+  if (!collectionHookDeprecationMessageDisplayed) {
+    console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4')
+    collectionHookDeprecationMessageDisplayed = true
+  }
+  return HookCollection()
+}
+
+Hook.Singular = HookSingular.bind()
+Hook.Collection = HookCollection.bind()
+
+module.exports = Hook
+// expose constructors as a named property for TypeScript
+module.exports.Hook = Hook
+module.exports.Singular = Hook.Singular
+module.exports.Collection = Hook.Collection
diff --git a/setup-maven/node_modules/before-after-hook/lib/add.js b/setup-maven/node_modules/before-after-hook/lib/add.js
new file mode 100644
index 0000000..a34e3f4
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/lib/add.js
@@ -0,0 +1,46 @@
+module.exports = addHook
+
+function addHook (state, kind, name, hook) {
+  var orig = hook
+  if (!state.registry[name]) {
+    state.registry[name] = []
+  }
+
+  if (kind === 'before') {
+    hook = function (method, options) {
+      return Promise.resolve()
+        .then(orig.bind(null, options))
+        .then(method.bind(null, options))
+    }
+  }
+
+  if (kind === 'after') {
+    hook = function (method, options) {
+      var result
+      return Promise.resolve()
+        .then(method.bind(null, options))
+        .then(function (result_) {
+          result = result_
+          return orig(result, options)
+        })
+        .then(function () {
+          return result
+        })
+    }
+  }
+
+  if (kind === 'error') {
+    hook = function (method, options) {
+      return Promise.resolve()
+        .then(method.bind(null, options))
+        .catch(function (error) {
+          return orig(error, options)
+        })
+    }
+  }
+
+  state.registry[name].push({
+    hook: hook,
+    orig: orig
+  })
+}
diff --git a/setup-maven/node_modules/before-after-hook/lib/register.js b/setup-maven/node_modules/before-after-hook/lib/register.js
new file mode 100644
index 0000000..b3d01fd
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/lib/register.js
@@ -0,0 +1,28 @@
+module.exports = register
+
+function register (state, name, method, options) {
+  if (typeof method !== 'function') {
+    throw new Error('method for before hook must be a function')
+  }
+
+  if (!options) {
+    options = {}
+  }
+
+  if (Array.isArray(name)) {
+    return name.reverse().reduce(function (callback, name) {
+      return register.bind(null, state, name, callback, options)
+    }, method)()
+  }
+
+  return Promise.resolve()
+    .then(function () {
+      if (!state.registry[name]) {
+        return method(options)
+      }
+
+      return (state.registry[name]).reduce(function (method, registered) {
+        return registered.hook.bind(null, method, options)
+      }, method)()
+    })
+}
diff --git a/setup-maven/node_modules/before-after-hook/lib/remove.js b/setup-maven/node_modules/before-after-hook/lib/remove.js
new file mode 100644
index 0000000..e357c51
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/lib/remove.js
@@ -0,0 +1,17 @@
+module.exports = removeHook
+
+function removeHook (state, name, method) {
+  if (!state.registry[name]) {
+    return
+  }
+
+  var index = state.registry[name]
+    .map(function (registered) { return registered.orig })
+    .indexOf(method)
+
+  if (index === -1) {
+    return
+  }
+
+  state.registry[name].splice(index, 1)
+}
diff --git a/setup-maven/node_modules/before-after-hook/package.json b/setup-maven/node_modules/before-after-hook/package.json
new file mode 100644
index 0000000..b76cde6
--- /dev/null
+++ b/setup-maven/node_modules/before-after-hook/package.json
@@ -0,0 +1,97 @@
+{
+  "_from": "before-after-hook@^2.0.0",
+  "_id": "before-after-hook@2.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==",
+  "_location": "/before-after-hook",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "before-after-hook@^2.0.0",
+    "name": "before-after-hook",
+    "escapedName": "before-after-hook",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz",
+  "_shasum": "b6c03487f44e24200dd30ca5e6a1979c5d2fb635",
+  "_spec": "before-after-hook@^2.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "author": {
+    "name": "Gregor Martynus"
+  },
+  "bugs": {
+    "url": "https://github.com/gr2m/before-after-hook/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "asynchronous before/error/after hooks for internal functionality",
+  "devDependencies": {
+    "browserify": "^16.0.0",
+    "gaze-cli": "^0.2.0",
+    "istanbul": "^0.4.0",
+    "istanbul-coveralls": "^1.0.3",
+    "mkdirp": "^0.5.1",
+    "rimraf": "^2.4.4",
+    "semantic-release": "^15.0.0",
+    "simple-mock": "^0.8.0",
+    "standard": "^13.0.1",
+    "tap-min": "^2.0.0",
+    "tap-spec": "^5.0.0",
+    "tape": "^4.2.2",
+    "typescript": "^3.5.3",
+    "uglify-js": "^3.0.0"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts",
+    "lib"
+  ],
+  "homepage": "https://github.com/gr2m/before-after-hook#readme",
+  "keywords": [
+    "hook",
+    "hooks",
+    "api"
+  ],
+  "license": "Apache-2.0",
+  "name": "before-after-hook",
+  "release": {
+    "publish": [
+      "@semantic-release/npm",
+      {
+        "path": "@semantic-release/github",
+        "assets": [
+          "dist/*.js"
+        ]
+      }
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gr2m/before-after-hook.git"
+  },
+  "scripts": {
+    "build": "browserify index.js --standalone=Hook > dist/before-after-hook.js",
+    "postbuild": "uglifyjs dist/before-after-hook.js -mc > dist/before-after-hook.min.js",
+    "posttest": "npm run validate:ts",
+    "postvalidate:ts": "tsc --noEmit --strict --target es6 test/typescript-validate.ts",
+    "prebuild": "rimraf dist && mkdirp dist",
+    "presemantic-release": "npm run build",
+    "pretest": "standard",
+    "semantic-release": "semantic-release",
+    "test": "npm run -s test:node | tap-spec",
+    "test:coverage": "istanbul cover test",
+    "test:coverage:upload": "istanbul-coveralls",
+    "test:node": "node test",
+    "test:watch": "gaze 'clear && node test | tap-min' 'test/**/*.js' 'index.js' 'lib/**/*.js'",
+    "validate:ts": "tsc --strict --target es6 index.d.ts"
+  },
+  "types": "./index.d.ts",
+  "version": "2.1.0"
+}
diff --git a/setup-maven/node_modules/btoa-lite/.npmignore b/setup-maven/node_modules/btoa-lite/.npmignore
new file mode 100644
index 0000000..50c7458
--- /dev/null
+++ b/setup-maven/node_modules/btoa-lite/.npmignore
@@ -0,0 +1,6 @@
+node_modules
+*.log
+.DS_Store
+bundle.js
+test
+test.js
diff --git a/setup-maven/node_modules/btoa-lite/LICENSE.md b/setup-maven/node_modules/btoa-lite/LICENSE.md
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/setup-maven/node_modules/btoa-lite/LICENSE.md
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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/setup-maven/node_modules/btoa-lite/README.md b/setup-maven/node_modules/btoa-lite/README.md
new file mode 100644
index 0000000..e36492e
--- /dev/null
+++ b/setup-maven/node_modules/btoa-lite/README.md
@@ -0,0 +1,37 @@
+# btoa-lite
+![](http://img.shields.io/badge/stability-stable-orange.svg?style=flat)
+![](http://img.shields.io/npm/v/btoa-lite.svg?style=flat)
+![](http://img.shields.io/npm/dm/btoa-lite.svg?style=flat)
+![](http://img.shields.io/npm/l/btoa-lite.svg?style=flat)
+
+Smallest/simplest possible means of using btoa with both Node and browserify.
+
+In the browser, encoding base64 strings is done using:
+
+``` javascript
+var encoded = btoa(decoded)
+```
+
+However in Node, it's done like so:
+
+``` javascript
+var encoded = new Buffer(decoded).toString('base64')
+```
+
+You can easily check if `Buffer` exists and switch between the approaches
+accordingly, but using `Buffer` anywhere in your browser source will pull
+in browserify's `Buffer` shim which is pretty hefty. This package uses
+the `main` and `browser` fields in its `package.json` to perform this
+check at build time and avoid pulling `Buffer` in unnecessarily.
+
+## Usage
+
+[![NPM](https://nodei.co/npm/btoa-lite.png)](https://nodei.co/npm/btoa-lite/)
+
+### `encoded = btoa(decoded)`
+
+Returns the base64-encoded value of a string.
+
+## License
+
+MIT. See [LICENSE.md](http://github.com/hughsk/btoa-lite/blob/master/LICENSE.md) for details.
diff --git a/setup-maven/node_modules/btoa-lite/btoa-browser.js b/setup-maven/node_modules/btoa-lite/btoa-browser.js
new file mode 100644
index 0000000..1b3acdb
--- /dev/null
+++ b/setup-maven/node_modules/btoa-lite/btoa-browser.js
@@ -0,0 +1,3 @@
+module.exports = function _btoa(str) {
+  return btoa(str)
+}
diff --git a/setup-maven/node_modules/btoa-lite/btoa-node.js b/setup-maven/node_modules/btoa-lite/btoa-node.js
new file mode 100644
index 0000000..0278470
--- /dev/null
+++ b/setup-maven/node_modules/btoa-lite/btoa-node.js
@@ -0,0 +1,3 @@
+module.exports = function btoa(str) {
+  return new Buffer(str).toString('base64')
+}
diff --git a/setup-maven/node_modules/btoa-lite/package.json b/setup-maven/node_modules/btoa-lite/package.json
new file mode 100644
index 0000000..c604201
--- /dev/null
+++ b/setup-maven/node_modules/btoa-lite/package.json
@@ -0,0 +1,66 @@
+{
+  "_from": "btoa-lite@^1.0.0",
+  "_id": "btoa-lite@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=",
+  "_location": "/btoa-lite",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "btoa-lite@^1.0.0",
+    "name": "btoa-lite",
+    "escapedName": "btoa-lite",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
+  "_shasum": "337766da15801210fdd956c22e9c6891ab9d0337",
+  "_spec": "btoa-lite@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "author": {
+    "name": "Hugh Kennedy",
+    "email": "hughskennedy@gmail.com",
+    "url": "http://hughsk.io/"
+  },
+  "browser": "btoa-browser.js",
+  "bugs": {
+    "url": "https://github.com/hughsk/btoa-lite/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Smallest/simplest possible means of using btoa with both Node and browserify",
+  "devDependencies": {
+    "browserify": "^10.2.4",
+    "smokestack": "^3.3.0",
+    "tap-spec": "^4.0.0",
+    "tape": "^4.0.0"
+  },
+  "homepage": "https://github.com/hughsk/btoa-lite",
+  "keywords": [
+    "btoa",
+    "base64",
+    "isomorphic",
+    "browser",
+    "node",
+    "shared"
+  ],
+  "license": "MIT",
+  "main": "btoa-node.js",
+  "name": "btoa-lite",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/hughsk/btoa-lite.git"
+  },
+  "scripts": {
+    "test": "npm run test-node && npm run test-browser",
+    "test-browser": "browserify test | smokestack | tap-spec",
+    "test-node": "node test | tap-spec"
+  },
+  "version": "1.0.0"
+}
diff --git a/setup-maven/node_modules/cross-spawn/CHANGELOG.md b/setup-maven/node_modules/cross-spawn/CHANGELOG.md
new file mode 100644
index 0000000..ded9620
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/CHANGELOG.md
@@ -0,0 +1,100 @@
+# Change Log
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+<a name="6.0.5"></a>
+## [6.0.5](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.4...v6.0.5) (2018-03-02)
+
+
+### Bug Fixes
+
+* avoid using deprecated Buffer constructor ([#94](https://github.com/moxystudio/node-cross-spawn/issues/94)) ([d5770df](https://github.com/moxystudio/node-cross-spawn/commit/d5770df)), closes [/nodejs.org/api/deprecations.html#deprecations_dep0005](https://github.com//nodejs.org/api/deprecations.html/issues/deprecations_dep0005)
+
+
+
+<a name="6.0.4"></a>
+## [6.0.4](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.3...v6.0.4) (2018-01-31)
+
+
+### Bug Fixes
+
+* fix paths being incorrectly normalized on unix ([06ee3c6](https://github.com/moxystudio/node-cross-spawn/commit/06ee3c6)), closes [#90](https://github.com/moxystudio/node-cross-spawn/issues/90)
+
+
+
+<a name="6.0.3"></a>
+## [6.0.3](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.2...v6.0.3) (2018-01-23)
+
+
+
+<a name="6.0.2"></a>
+## [6.0.2](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.1...v6.0.2) (2018-01-23)
+
+
+
+<a name="6.0.1"></a>
+## [6.0.1](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.0...v6.0.1) (2018-01-23)
+
+
+
+<a name="6.0.0"></a>
+# [6.0.0](https://github.com/moxystudio/node-cross-spawn/compare/5.1.0...6.0.0) (2018-01-23)
+
+
+### Bug Fixes
+
+* fix certain arguments not being correctly escaped or causing batch syntax error ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)), closes [#82](https://github.com/moxystudio/node-cross-spawn/issues/82) [#51](https://github.com/moxystudio/node-cross-spawn/issues/51)
+* fix commands as posix relatixe paths not working correctly, e.g.: `./my-command` ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))
+* fix `options` argument being mutated ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))
+* fix commands resolution when PATH was actually Path ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))
+
+
+### Features
+
+* improve compliance with node's ENOENT errors ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))
+* improve detection of node's shell option support ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))
+
+
+### Chores
+
+* upgrade tooling
+* upgrate project to es6 (node v4)
+
+
+### BREAKING CHANGES
+
+* remove support for older nodejs versions, only `node >= 4` is supported
+
+
+<a name="5.1.0"></a>
+## [5.1.0](https://github.com/moxystudio/node-cross-spawn/compare/5.0.1...5.1.0) (2017-02-26)
+
+
+### Bug Fixes
+
+* fix `options.shell` support for NodeJS [v4.8](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V4.md#4.8.0)
+
+
+<a name="5.0.1"></a>
+## [5.0.1](https://github.com/moxystudio/node-cross-spawn/compare/5.0.0...5.0.1) (2016-11-04)
+
+
+### Bug Fixes
+
+* fix `options.shell` support for NodeJS v7
+
+
+<a name="5.0.0"></a>
+# [5.0.0](https://github.com/moxystudio/node-cross-spawn/compare/4.0.2...5.0.0) (2016-10-30)
+
+
+## Features
+
+* add support for `options.shell`
+* improve parsing of shebangs by using [`shebang-command`](https://github.com/kevva/shebang-command) module
+
+
+## Chores
+
+* refactor some code to make it more clear
+* update README caveats
diff --git a/setup-maven/node_modules/cross-spawn/LICENSE b/setup-maven/node_modules/cross-spawn/LICENSE
new file mode 100644
index 0000000..8407b9a
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 Made With MOXY Lda <hello@moxy.studio>
+
+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/setup-maven/node_modules/cross-spawn/README.md b/setup-maven/node_modules/cross-spawn/README.md
new file mode 100644
index 0000000..e895cd7
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/README.md
@@ -0,0 +1,94 @@
+# cross-spawn
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Coverage Status][codecov-image]][codecov-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url] [![Greenkeeper badge][greenkeeper-image]][greenkeeper-url]
+
+[npm-url]:https://npmjs.org/package/cross-spawn
+[downloads-image]:http://img.shields.io/npm/dm/cross-spawn.svg
+[npm-image]:http://img.shields.io/npm/v/cross-spawn.svg
+[travis-url]:https://travis-ci.org/moxystudio/node-cross-spawn
+[travis-image]:http://img.shields.io/travis/moxystudio/node-cross-spawn/master.svg
+[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn
+[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn/master.svg
+[codecov-url]:https://codecov.io/gh/moxystudio/node-cross-spawn
+[codecov-image]:https://img.shields.io/codecov/c/github/moxystudio/node-cross-spawn/master.svg
+[david-dm-url]:https://david-dm.org/moxystudio/node-cross-spawn
+[david-dm-image]:https://img.shields.io/david/moxystudio/node-cross-spawn.svg
+[david-dm-dev-url]:https://david-dm.org/moxystudio/node-cross-spawn?type=dev
+[david-dm-dev-image]:https://img.shields.io/david/dev/moxystudio/node-cross-spawn.svg
+[greenkeeper-image]:https://badges.greenkeeper.io/moxystudio/node-cross-spawn.svg
+[greenkeeper-url]:https://greenkeeper.io/
+
+A cross platform solution to node's spawn and spawnSync.
+
+
+## Installation
+
+`$ npm install cross-spawn`
+
+
+## Why
+
+Node has issues when using spawn on Windows:
+
+- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318)
+- It does not support [shebangs](https://en.wikipedia.org/wiki/Shebang_(Unix))
+- Has problems running commands with [spaces](https://github.com/nodejs/node/issues/7367)
+- Has problems running commands with posix relative paths (e.g.: `./my-folder/my-executable`)
+- Has an [issue](https://github.com/moxystudio/node-cross-spawn/issues/82) with command shims (files in `node_modules/.bin/`), where arguments with quotes and parenthesis would result in [invalid syntax error](https://github.com/moxystudio/node-cross-spawn/blob/e77b8f22a416db46b6196767bcd35601d7e11d54/test/index.test.js#L149)
+- No `options.shell` support on node `<v4.8`
+
+All these issues are handled correctly by `cross-spawn`.
+There are some known modules, such as [win-spawn](https://github.com/ForbesLindesay/win-spawn), that try to solve this but they are either broken or provide faulty escaping of shell arguments.
+
+
+## Usage
+
+Exactly the same way as node's [`spawn`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) or [`spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options), so it's a drop in replacement.
+
+
+```js
+const spawn = require('cross-spawn');
+
+// Spawn NPM asynchronously
+const child = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });
+
+// Spawn NPM synchronously
+const result = spawn.sync('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });
+```
+
+
+## Caveats
+
+### Using `options.shell` as an alternative to `cross-spawn`
+
+Starting from node `v4.8`, `spawn` has a `shell` option that allows you run commands from within a shell. This new option solves
+the [PATHEXT](https://github.com/joyent/node/issues/2318) issue but:
+
+- It's not supported in node `<v4.8`
+- You must manually escape the command and arguments which is very error prone, specially when passing user input
+- There are a lot of other unresolved issues from the [Why](#why) section that you must take into account
+
+If you are using the `shell` option to spawn a command in a cross platform way, consider using `cross-spawn` instead. You have been warned.
+
+### `options.shell` support
+
+While `cross-spawn` adds support for `options.shell` in node `<v4.8`, all of its enhancements are disabled.
+
+This mimics the Node.js behavior. More specifically, the command and its arguments will not be automatically escaped nor shebang support will be offered. This is by design because if you are using `options.shell` you are probably targeting a specific platform anyway and you don't want things to get into your way.
+
+### Shebangs support
+
+While `cross-spawn` handles shebangs on Windows, its support is limited. More specifically, it just supports `#!/usr/bin/env <program>` where `<program>` must not contain any arguments.   
+If you would like to have the shebang support improved, feel free to contribute via a pull-request.
+
+Remember to always test your code on Windows!
+
+
+## Tests
+
+`$ npm test`   
+`$ npm test -- --watch` during development
+
+## License
+
+Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php).
diff --git a/setup-maven/node_modules/cross-spawn/index.js b/setup-maven/node_modules/cross-spawn/index.js
new file mode 100644
index 0000000..5509742
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/index.js
@@ -0,0 +1,39 @@
+'use strict';
+
+const cp = require('child_process');
+const parse = require('./lib/parse');
+const enoent = require('./lib/enoent');
+
+function spawn(command, args, options) {
+    // Parse the arguments
+    const parsed = parse(command, args, options);
+
+    // Spawn the child process
+    const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
+
+    // Hook into child process "exit" event to emit an error if the command
+    // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
+    enoent.hookChildProcess(spawned, parsed);
+
+    return spawned;
+}
+
+function spawnSync(command, args, options) {
+    // Parse the arguments
+    const parsed = parse(command, args, options);
+
+    // Spawn the child process
+    const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
+
+    // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
+    result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
+
+    return result;
+}
+
+module.exports = spawn;
+module.exports.spawn = spawn;
+module.exports.sync = spawnSync;
+
+module.exports._parse = parse;
+module.exports._enoent = enoent;
diff --git a/setup-maven/node_modules/cross-spawn/lib/enoent.js b/setup-maven/node_modules/cross-spawn/lib/enoent.js
new file mode 100644
index 0000000..14df9b6
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/lib/enoent.js
@@ -0,0 +1,59 @@
+'use strict';
+
+const isWin = process.platform === 'win32';
+
+function notFoundError(original, syscall) {
+    return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
+        code: 'ENOENT',
+        errno: 'ENOENT',
+        syscall: `${syscall} ${original.command}`,
+        path: original.command,
+        spawnargs: original.args,
+    });
+}
+
+function hookChildProcess(cp, parsed) {
+    if (!isWin) {
+        return;
+    }
+
+    const originalEmit = cp.emit;
+
+    cp.emit = function (name, arg1) {
+        // If emitting "exit" event and exit code is 1, we need to check if
+        // the command exists and emit an "error" instead
+        // See https://github.com/IndigoUnited/node-cross-spawn/issues/16
+        if (name === 'exit') {
+            const err = verifyENOENT(arg1, parsed, 'spawn');
+
+            if (err) {
+                return originalEmit.call(cp, 'error', err);
+            }
+        }
+
+        return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params
+    };
+}
+
+function verifyENOENT(status, parsed) {
+    if (isWin && status === 1 && !parsed.file) {
+        return notFoundError(parsed.original, 'spawn');
+    }
+
+    return null;
+}
+
+function verifyENOENTSync(status, parsed) {
+    if (isWin && status === 1 && !parsed.file) {
+        return notFoundError(parsed.original, 'spawnSync');
+    }
+
+    return null;
+}
+
+module.exports = {
+    hookChildProcess,
+    verifyENOENT,
+    verifyENOENTSync,
+    notFoundError,
+};
diff --git a/setup-maven/node_modules/cross-spawn/lib/parse.js b/setup-maven/node_modules/cross-spawn/lib/parse.js
new file mode 100644
index 0000000..962827a
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/lib/parse.js
@@ -0,0 +1,125 @@
+'use strict';
+
+const path = require('path');
+const niceTry = require('nice-try');
+const resolveCommand = require('./util/resolveCommand');
+const escape = require('./util/escape');
+const readShebang = require('./util/readShebang');
+const semver = require('semver');
+
+const isWin = process.platform === 'win32';
+const isExecutableRegExp = /\.(?:com|exe)$/i;
+const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
+
+// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0
+const supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false;
+
+function detectShebang(parsed) {
+    parsed.file = resolveCommand(parsed);
+
+    const shebang = parsed.file && readShebang(parsed.file);
+
+    if (shebang) {
+        parsed.args.unshift(parsed.file);
+        parsed.command = shebang;
+
+        return resolveCommand(parsed);
+    }
+
+    return parsed.file;
+}
+
+function parseNonShell(parsed) {
+    if (!isWin) {
+        return parsed;
+    }
+
+    // Detect & add support for shebangs
+    const commandFile = detectShebang(parsed);
+
+    // We don't need a shell if the command filename is an executable
+    const needsShell = !isExecutableRegExp.test(commandFile);
+
+    // If a shell is required, use cmd.exe and take care of escaping everything correctly
+    // Note that `forceShell` is an hidden option used only in tests
+    if (parsed.options.forceShell || needsShell) {
+        // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`
+        // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument
+        // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,
+        // we need to double escape them
+        const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
+
+        // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar)
+        // This is necessary otherwise it will always fail with ENOENT in those cases
+        parsed.command = path.normalize(parsed.command);
+
+        // Escape command & arguments
+        parsed.command = escape.command(parsed.command);
+        parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
+
+        const shellCommand = [parsed.command].concat(parsed.args).join(' ');
+
+        parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
+        parsed.command = process.env.comspec || 'cmd.exe';
+        parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
+    }
+
+    return parsed;
+}
+
+function parseShell(parsed) {
+    // If node supports the shell option, there's no need to mimic its behavior
+    if (supportsShellOption) {
+        return parsed;
+    }
+
+    // Mimic node shell option
+    // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335
+    const shellCommand = [parsed.command].concat(parsed.args).join(' ');
+
+    if (isWin) {
+        parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
+        parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
+        parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
+    } else {
+        if (typeof parsed.options.shell === 'string') {
+            parsed.command = parsed.options.shell;
+        } else if (process.platform === 'android') {
+            parsed.command = '/system/bin/sh';
+        } else {
+            parsed.command = '/bin/sh';
+        }
+
+        parsed.args = ['-c', shellCommand];
+    }
+
+    return parsed;
+}
+
+function parse(command, args, options) {
+    // Normalize arguments, similar to nodejs
+    if (args && !Array.isArray(args)) {
+        options = args;
+        args = null;
+    }
+
+    args = args ? args.slice(0) : []; // Clone array to avoid changing the original
+    options = Object.assign({}, options); // Clone object to avoid changing the original
+
+    // Build our parsed object
+    const parsed = {
+        command,
+        args,
+        options,
+        file: undefined,
+        original: {
+            command,
+            args,
+        },
+    };
+
+    // Delegate further parsing to shell or non-shell
+    return options.shell ? parseShell(parsed) : parseNonShell(parsed);
+}
+
+module.exports = parse;
diff --git a/setup-maven/node_modules/cross-spawn/lib/util/escape.js b/setup-maven/node_modules/cross-spawn/lib/util/escape.js
new file mode 100644
index 0000000..b0bb84c
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/lib/util/escape.js
@@ -0,0 +1,45 @@
+'use strict';
+
+// See http://www.robvanderwoude.com/escapechars.php
+const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
+
+function escapeCommand(arg) {
+    // Escape meta chars
+    arg = arg.replace(metaCharsRegExp, '^$1');
+
+    return arg;
+}
+
+function escapeArgument(arg, doubleEscapeMetaChars) {
+    // Convert to string
+    arg = `${arg}`;
+
+    // Algorithm below is based on https://qntm.org/cmd
+
+    // Sequence of backslashes followed by a double quote:
+    // double up all the backslashes and escape the double quote
+    arg = arg.replace(/(\\*)"/g, '$1$1\\"');
+
+    // Sequence of backslashes followed by the end of the string
+    // (which will become a double quote later):
+    // double up all the backslashes
+    arg = arg.replace(/(\\*)$/, '$1$1');
+
+    // All other backslashes occur literally
+
+    // Quote the whole thing:
+    arg = `"${arg}"`;
+
+    // Escape meta chars
+    arg = arg.replace(metaCharsRegExp, '^$1');
+
+    // Double escape meta chars if necessary
+    if (doubleEscapeMetaChars) {
+        arg = arg.replace(metaCharsRegExp, '^$1');
+    }
+
+    return arg;
+}
+
+module.exports.command = escapeCommand;
+module.exports.argument = escapeArgument;
diff --git a/setup-maven/node_modules/cross-spawn/lib/util/readShebang.js b/setup-maven/node_modules/cross-spawn/lib/util/readShebang.js
new file mode 100644
index 0000000..bd4f128
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/lib/util/readShebang.js
@@ -0,0 +1,32 @@
+'use strict';
+
+const fs = require('fs');
+const shebangCommand = require('shebang-command');
+
+function readShebang(command) {
+    // Read the first 150 bytes from the file
+    const size = 150;
+    let buffer;
+
+    if (Buffer.alloc) {
+        // Node.js v4.5+ / v5.10+
+        buffer = Buffer.alloc(size);
+    } else {
+        // Old Node.js API
+        buffer = new Buffer(size);
+        buffer.fill(0); // zero-fill
+    }
+
+    let fd;
+
+    try {
+        fd = fs.openSync(command, 'r');
+        fs.readSync(fd, buffer, 0, size, 0);
+        fs.closeSync(fd);
+    } catch (e) { /* Empty */ }
+
+    // Attempt to extract shebang (null is returned if not a shebang)
+    return shebangCommand(buffer.toString());
+}
+
+module.exports = readShebang;
diff --git a/setup-maven/node_modules/cross-spawn/lib/util/resolveCommand.js b/setup-maven/node_modules/cross-spawn/lib/util/resolveCommand.js
new file mode 100644
index 0000000..2fd5ad2
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/lib/util/resolveCommand.js
@@ -0,0 +1,47 @@
+'use strict';
+
+const path = require('path');
+const which = require('which');
+const pathKey = require('path-key')();
+
+function resolveCommandAttempt(parsed, withoutPathExt) {
+    const cwd = process.cwd();
+    const hasCustomCwd = parsed.options.cwd != null;
+
+    // If a custom `cwd` was specified, we need to change the process cwd
+    // because `which` will do stat calls but does not support a custom cwd
+    if (hasCustomCwd) {
+        try {
+            process.chdir(parsed.options.cwd);
+        } catch (err) {
+            /* Empty */
+        }
+    }
+
+    let resolved;
+
+    try {
+        resolved = which.sync(parsed.command, {
+            path: (parsed.options.env || process.env)[pathKey],
+            pathExt: withoutPathExt ? path.delimiter : undefined,
+        });
+    } catch (e) {
+        /* Empty */
+    } finally {
+        process.chdir(cwd);
+    }
+
+    // If we successfully resolved, ensure that an absolute path is returned
+    // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it
+    if (resolved) {
+        resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);
+    }
+
+    return resolved;
+}
+
+function resolveCommand(parsed) {
+    return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
+}
+
+module.exports = resolveCommand;
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/.bin/semver b/setup-maven/node_modules/cross-spawn/node_modules/.bin/semver
new file mode 100755
index 0000000..801e77f
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/.bin/semver
@@ -0,0 +1,160 @@
+#!/usr/bin/env node
+// Standalone semver comparison program.
+// Exits successfully and prints matching version(s) if
+// any supplied version is valid and passes all tests.
+
+var argv = process.argv.slice(2)
+
+var versions = []
+
+var range = []
+
+var inc = null
+
+var version = require('../package.json').version
+
+var loose = false
+
+var includePrerelease = false
+
+var coerce = false
+
+var identifier
+
+var semver = require('../semver')
+
+var reverse = false
+
+var options = {}
+
+main()
+
+function main () {
+  if (!argv.length) return help()
+  while (argv.length) {
+    var a = argv.shift()
+    var indexOfEqualSign = a.indexOf('=')
+    if (indexOfEqualSign !== -1) {
+      a = a.slice(0, indexOfEqualSign)
+      argv.unshift(a.slice(indexOfEqualSign + 1))
+    }
+    switch (a) {
+      case '-rv': case '-rev': case '--rev': case '--reverse':
+        reverse = true
+        break
+      case '-l': case '--loose':
+        loose = true
+        break
+      case '-p': case '--include-prerelease':
+        includePrerelease = true
+        break
+      case '-v': case '--version':
+        versions.push(argv.shift())
+        break
+      case '-i': case '--inc': case '--increment':
+        switch (argv[0]) {
+          case 'major': case 'minor': case 'patch': case 'prerelease':
+          case 'premajor': case 'preminor': case 'prepatch':
+            inc = argv.shift()
+            break
+          default:
+            inc = 'patch'
+            break
+        }
+        break
+      case '--preid':
+        identifier = argv.shift()
+        break
+      case '-r': case '--range':
+        range.push(argv.shift())
+        break
+      case '-c': case '--coerce':
+        coerce = true
+        break
+      case '-h': case '--help': case '-?':
+        return help()
+      default:
+        versions.push(a)
+        break
+    }
+  }
+
+  var options = { loose: loose, includePrerelease: includePrerelease }
+
+  versions = versions.map(function (v) {
+    return coerce ? (semver.coerce(v) || { version: v }).version : v
+  }).filter(function (v) {
+    return semver.valid(v)
+  })
+  if (!versions.length) return fail()
+  if (inc && (versions.length !== 1 || range.length)) { return failInc() }
+
+  for (var i = 0, l = range.length; i < l; i++) {
+    versions = versions.filter(function (v) {
+      return semver.satisfies(v, range[i], options)
+    })
+    if (!versions.length) return fail()
+  }
+  return success(versions)
+}
+
+function failInc () {
+  console.error('--inc can only be used on a single version with no range')
+  fail()
+}
+
+function fail () { process.exit(1) }
+
+function success () {
+  var compare = reverse ? 'rcompare' : 'compare'
+  versions.sort(function (a, b) {
+    return semver[compare](a, b, options)
+  }).map(function (v) {
+    return semver.clean(v, options)
+  }).map(function (v) {
+    return inc ? semver.inc(v, inc, options, identifier) : v
+  }).forEach(function (v, i, _) { console.log(v) })
+}
+
+function help () {
+  console.log(['SemVer ' + version,
+    '',
+    'A JavaScript implementation of the https://semver.org/ specification',
+    'Copyright Isaac Z. Schlueter',
+    '',
+    'Usage: semver [options] <version> [<version> [...]]',
+    'Prints valid versions sorted by SemVer precedence',
+    '',
+    'Options:',
+    '-r --range <range>',
+    '        Print versions that match the specified range.',
+    '',
+    '-i --increment [<level>]',
+    '        Increment a version by the specified level.  Level can',
+    '        be one of: major, minor, patch, premajor, preminor,',
+    "        prepatch, or prerelease.  Default level is 'patch'.",
+    '        Only one version may be specified.',
+    '',
+    '--preid <identifier>',
+    '        Identifier to be used to prefix premajor, preminor,',
+    '        prepatch or prerelease version increments.',
+    '',
+    '-l --loose',
+    '        Interpret versions and ranges loosely',
+    '',
+    '-p --include-prerelease',
+    '        Always include prerelease versions in range matching',
+    '',
+    '-c --coerce',
+    '        Coerce a string into SemVer if possible',
+    '        (does not imply --loose)',
+    '',
+    'Program exits successfully if any valid version satisfies',
+    'all supplied ranges, and prints all satisfying versions.',
+    '',
+    'If no satisfying versions are found, then exits failure.',
+    '',
+    'Versions are printed in ascending order, so supplying',
+    'multiple versions to the utility will just sort them.'
+  ].join('\n'))
+}
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/semver/CHANGELOG.md b/setup-maven/node_modules/cross-spawn/node_modules/semver/CHANGELOG.md
new file mode 100644
index 0000000..66304fd
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/semver/CHANGELOG.md
@@ -0,0 +1,39 @@
+# changes log
+
+## 5.7
+
+* Add `minVersion` method
+
+## 5.6
+
+* Move boolean `loose` param to an options object, with
+  backwards-compatibility protection.
+* Add ability to opt out of special prerelease version handling with
+  the `includePrerelease` option flag.
+
+## 5.5
+
+* Add version coercion capabilities
+
+## 5.4
+
+* Add intersection checking
+
+## 5.3
+
+* Add `minSatisfying` method
+
+## 5.2
+
+* Add `prerelease(v)` that returns prerelease components
+
+## 5.1
+
+* Add Backus-Naur for ranges
+* Remove excessively cute inspection methods
+
+## 5.0
+
+* Remove AMD/Browserified build artifacts
+* Fix ltr and gtr when using the `*` range
+* Fix for range `*` with a prerelease identifier
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/semver/LICENSE b/setup-maven/node_modules/cross-spawn/node_modules/semver/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/semver/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/semver/README.md b/setup-maven/node_modules/cross-spawn/node_modules/semver/README.md
new file mode 100644
index 0000000..f8dfa5a
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/semver/README.md
@@ -0,0 +1,412 @@
+semver(1) -- The semantic versioner for npm
+===========================================
+
+## Install
+
+```bash
+npm install --save semver
+````
+
+## Usage
+
+As a node module:
+
+```js
+const semver = require('semver')
+
+semver.valid('1.2.3') // '1.2.3'
+semver.valid('a.b.c') // null
+semver.clean('  =v1.2.3   ') // '1.2.3'
+semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
+semver.gt('1.2.3', '9.8.7') // false
+semver.lt('1.2.3', '9.8.7') // true
+semver.minVersion('>=1.0.0') // '1.0.0'
+semver.valid(semver.coerce('v2')) // '2.0.0'
+semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
+```
+
+As a command-line utility:
+
+```
+$ semver -h
+
+A JavaScript implementation of the https://semver.org/ specification
+Copyright Isaac Z. Schlueter
+
+Usage: semver [options] <version> [<version> [...]]
+Prints valid versions sorted by SemVer precedence
+
+Options:
+-r --range <range>
+        Print versions that match the specified range.
+
+-i --increment [<level>]
+        Increment a version by the specified level.  Level can
+        be one of: major, minor, patch, premajor, preminor,
+        prepatch, or prerelease.  Default level is 'patch'.
+        Only one version may be specified.
+
+--preid <identifier>
+        Identifier to be used to prefix premajor, preminor,
+        prepatch or prerelease version increments.
+
+-l --loose
+        Interpret versions and ranges loosely
+
+-p --include-prerelease
+        Always include prerelease versions in range matching
+
+-c --coerce
+        Coerce a string into SemVer if possible
+        (does not imply --loose)
+
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions.
+
+If no satisfying versions are found, then exits failure.
+
+Versions are printed in ascending order, so supplying
+multiple versions to the utility will just sort them.
+```
+
+## Versions
+
+A "version" is described by the `v2.0.0` specification found at
+<https://semver.org/>.
+
+A leading `"="` or `"v"` character is stripped off and ignored.
+
+## Ranges
+
+A `version range` is a set of `comparators` which specify versions
+that satisfy the range.
+
+A `comparator` is composed of an `operator` and a `version`.  The set
+of primitive `operators` is:
+
+* `<` Less than
+* `<=` Less than or equal to
+* `>` Greater than
+* `>=` Greater than or equal to
+* `=` Equal.  If no operator is specified, then equality is assumed,
+  so this operator is optional, but MAY be included.
+
+For example, the comparator `>=1.2.7` would match the versions
+`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
+or `1.1.0`.
+
+Comparators can be joined by whitespace to form a `comparator set`,
+which is satisfied by the **intersection** of all of the comparators
+it includes.
+
+A range is composed of one or more comparator sets, joined by `||`.  A
+version matches a range if and only if every comparator in at least
+one of the `||`-separated comparator sets is satisfied by the version.
+
+For example, the range `>=1.2.7 <1.3.0` would match the versions
+`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
+or `1.1.0`.
+
+The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
+`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
+
+### Prerelease Tags
+
+If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
+it will only be allowed to satisfy comparator sets if at least one
+comparator with the same `[major, minor, patch]` tuple also has a
+prerelease tag.
+
+For example, the range `>1.2.3-alpha.3` would be allowed to match the
+version `1.2.3-alpha.7`, but it would *not* be satisfied by
+`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
+than" `1.2.3-alpha.3` according to the SemVer sort rules.  The version
+range only accepts prerelease tags on the `1.2.3` version.  The
+version `3.4.5` *would* satisfy the range, because it does not have a
+prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
+
+The purpose for this behavior is twofold.  First, prerelease versions
+frequently are updated very quickly, and contain many breaking changes
+that are (by the author's design) not yet fit for public consumption.
+Therefore, by default, they are excluded from range matching
+semantics.
+
+Second, a user who has opted into using a prerelease version has
+clearly indicated the intent to use *that specific* set of
+alpha/beta/rc versions.  By including a prerelease tag in the range,
+the user is indicating that they are aware of the risk.  However, it
+is still not appropriate to assume that they have opted into taking a
+similar risk on the *next* set of prerelease versions.
+
+Note that this behavior can be suppressed (treating all prerelease
+versions as if they were normal versions, for the purpose of range
+matching) by setting the `includePrerelease` flag on the options
+object to any
+[functions](https://github.com/npm/node-semver#functions) that do
+range matching.
+
+#### Prerelease Identifiers
+
+The method `.inc` takes an additional `identifier` string argument that
+will append the value of the string as a prerelease identifier:
+
+```javascript
+semver.inc('1.2.3', 'prerelease', 'beta')
+// '1.2.4-beta.0'
+```
+
+command-line example:
+
+```bash
+$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+```
+
+Which then can be used to increment further:
+
+```bash
+$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+```
+
+### Advanced Range Syntax
+
+Advanced range syntax desugars to primitive comparators in
+deterministic ways.
+
+Advanced ranges may be combined in the same way as primitive
+comparators using white space or `||`.
+
+#### Hyphen Ranges `X.Y.Z - A.B.C`
+
+Specifies an inclusive set.
+
+* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
+
+If a partial version is provided as the first version in the inclusive
+range, then the missing pieces are replaced with zeroes.
+
+* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
+
+If a partial version is provided as the second version in the
+inclusive range, then all versions that start with the supplied parts
+of the tuple are accepted, but nothing that would be greater than the
+provided tuple parts.
+
+* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`
+* `1.2.3 - 2` := `>=1.2.3 <3.0.0`
+
+#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
+
+Any of `X`, `x`, or `*` may be used to "stand in" for one of the
+numeric values in the `[major, minor, patch]` tuple.
+
+* `*` := `>=0.0.0` (Any version satisfies)
+* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)
+* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)
+
+A partial version range is treated as an X-Range, so the special
+character is in fact optional.
+
+* `""` (empty string) := `*` := `>=0.0.0`
+* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
+* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
+
+#### Tilde Ranges `~1.2.3` `~1.2` `~1`
+
+Allows patch-level changes if a minor version is specified on the
+comparator.  Allows minor-level changes if not.
+
+* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`
+* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)
+* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)
+* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`
+* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)
+* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)
+* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in
+  the `1.2.3` version will be allowed, if they are greater than or
+  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
+  `1.2.4-beta.2` would not, because it is a prerelease of a
+  different `[major, minor, patch]` tuple.
+
+#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
+
+Allows changes that do not modify the left-most non-zero digit in the
+`[major, minor, patch]` tuple.  In other words, this allows patch and
+minor updates for versions `1.0.0` and above, patch updates for
+versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
+
+Many authors treat a `0.x` version as if the `x` were the major
+"breaking-change" indicator.
+
+Caret ranges are ideal when an author may make breaking changes
+between `0.2.4` and `0.3.0` releases, which is a common practice.
+However, it presumes that there will *not* be breaking changes between
+`0.2.4` and `0.2.5`.  It allows for changes that are presumed to be
+additive (but non-breaking), according to commonly observed practices.
+
+* `^1.2.3` := `>=1.2.3 <2.0.0`
+* `^0.2.3` := `>=0.2.3 <0.3.0`
+* `^0.0.3` := `>=0.0.3 <0.0.4`
+* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in
+  the `1.2.3` version will be allowed, if they are greater than or
+  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
+  `1.2.4-beta.2` would not, because it is a prerelease of a
+  different `[major, minor, patch]` tuple.
+* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4`  Note that prereleases in the
+  `0.0.3` version *only* will be allowed, if they are greater than or
+  equal to `beta`.  So, `0.0.3-pr.2` would be allowed.
+
+When parsing caret ranges, a missing `patch` value desugars to the
+number `0`, but will allow flexibility within that value, even if the
+major and minor versions are both `0`.
+
+* `^1.2.x` := `>=1.2.0 <2.0.0`
+* `^0.0.x` := `>=0.0.0 <0.1.0`
+* `^0.0` := `>=0.0.0 <0.1.0`
+
+A missing `minor` and `patch` values will desugar to zero, but also
+allow flexibility within those values, even if the major version is
+zero.
+
+* `^1.x` := `>=1.0.0 <2.0.0`
+* `^0.x` := `>=0.0.0 <1.0.0`
+
+### Range Grammar
+
+Putting all this together, here is a Backus-Naur grammar for ranges,
+for the benefit of parser authors:
+
+```bnf
+range-set  ::= range ( logical-or range ) *
+logical-or ::= ( ' ' ) * '||' ( ' ' ) *
+range      ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen     ::= partial ' - ' partial
+simple     ::= primitive | partial | tilde | caret
+primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
+partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
+xr         ::= 'x' | 'X' | '*' | nr
+nr         ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
+tilde      ::= '~' partial
+caret      ::= '^' partial
+qualifier  ::= ( '-' pre )? ( '+' build )?
+pre        ::= parts
+build      ::= parts
+parts      ::= part ( '.' part ) *
+part       ::= nr | [-0-9A-Za-z]+
+```
+
+## Functions
+
+All methods and classes take a final `options` object argument.  All
+options in this object are `false` by default.  The options supported
+are:
+
+- `loose`  Be more forgiving about not-quite-valid semver strings.
+  (Any resulting output will always be 100% strict compliant, of
+  course.)  For backwards compatibility reasons, if the `options`
+  argument is a boolean value instead of an object, it is interpreted
+  to be the `loose` param.
+- `includePrerelease`  Set to suppress the [default
+  behavior](https://github.com/npm/node-semver#prerelease-tags) of
+  excluding prerelease tagged versions from ranges unless they are
+  explicitly opted into.
+
+Strict-mode Comparators and Ranges will be strict about the SemVer
+strings that they parse.
+
+* `valid(v)`: Return the parsed version, or null if it's not valid.
+* `inc(v, release)`: Return the version incremented by the release
+  type (`major`,   `premajor`, `minor`, `preminor`, `patch`,
+  `prepatch`, or `prerelease`), or null if it's not valid
+  * `premajor` in one call will bump the version up to the next major
+    version and down to a prerelease of that major version.
+    `preminor`, and `prepatch` work the same way.
+  * If called from a non-prerelease version, the `prerelease` will work the
+    same as `prepatch`. It increments the patch version, then makes a
+    prerelease. If the input version is already a prerelease it simply
+    increments it.
+* `prerelease(v)`: Returns an array of prerelease components, or null
+  if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
+* `major(v)`: Return the major version number.
+* `minor(v)`: Return the minor version number.
+* `patch(v)`: Return the patch version number.
+* `intersects(r1, r2, loose)`: Return true if the two supplied ranges
+  or comparators intersect.
+* `parse(v)`: Attempt to parse a string as a semantic version, returning either
+  a `SemVer` object or `null`.
+
+### Comparison
+
+* `gt(v1, v2)`: `v1 > v2`
+* `gte(v1, v2)`: `v1 >= v2`
+* `lt(v1, v2)`: `v1 < v2`
+* `lte(v1, v2)`: `v1 <= v2`
+* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
+  even if they're not the exact same string.  You already know how to
+  compare strings.
+* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
+* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
+  the corresponding function above.  `"==="` and `"!=="` do simple
+  string comparison, but are included for completeness.  Throws if an
+  invalid comparison string is provided.
+* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
+  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.
+* `rcompare(v1, v2)`: The reverse of compare.  Sorts an array of versions
+  in descending order when passed to `Array.sort()`.
+* `diff(v1, v2)`: Returns difference between two versions by the release type
+  (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
+  or null if the versions are the same.
+
+### Comparators
+
+* `intersects(comparator)`: Return true if the comparators intersect
+
+### Ranges
+
+* `validRange(range)`: Return the valid range or null if it's not valid
+* `satisfies(version, range)`: Return true if the version satisfies the
+  range.
+* `maxSatisfying(versions, range)`: Return the highest version in the list
+  that satisfies the range, or `null` if none of them do.
+* `minSatisfying(versions, range)`: Return the lowest version in the list
+  that satisfies the range, or `null` if none of them do.
+* `minVersion(range)`: Return the lowest version that can possibly match
+  the given range.
+* `gtr(version, range)`: Return `true` if version is greater than all the
+  versions possible in the range.
+* `ltr(version, range)`: Return `true` if version is less than all the
+  versions possible in the range.
+* `outside(version, range, hilo)`: Return true if the version is outside
+  the bounds of the range in either the high or low direction.  The
+  `hilo` argument must be either the string `'>'` or `'<'`.  (This is
+  the function called by `gtr` and `ltr`.)
+* `intersects(range)`: Return true if any of the ranges comparators intersect
+
+Note that, since ranges may be non-contiguous, a version might not be
+greater than a range, less than a range, *or* satisfy a range!  For
+example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
+until `2.0.0`, so the version `1.2.10` would not be greater than the
+range (because `2.0.1` satisfies, which is higher), nor less than the
+range (since `1.2.8` satisfies, which is lower), and it also does not
+satisfy the range.
+
+If you want to know if a version satisfies or does not satisfy a
+range, use the `satisfies(version, range)` function.
+
+### Coercion
+
+* `coerce(version)`: Coerces a string to semver if possible
+
+This aims to provide a very forgiving translation of a non-semver string to
+semver. It looks for the first digit in a string, and consumes all
+remaining characters which satisfy at least a partial semver (e.g., `1`,
+`1.2`, `1.2.3`) up to the max permitted length (256 characters).  Longer
+versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`).  All
+surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes
+`3.4.0`).  Only text which lacks digits will fail coercion (`version one`
+is not valid).  The maximum  length for any semver component considered for
+coercion is 16 characters; longer components will be ignored
+(`10000000000000000.4.7.4` becomes `4.7.4`).  The maximum value for any
+semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value
+components are invalid (`9999999999999999.4.7.4` is likely invalid).
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/semver/bin/semver b/setup-maven/node_modules/cross-spawn/node_modules/semver/bin/semver
new file mode 100755
index 0000000..801e77f
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/semver/bin/semver
@@ -0,0 +1,160 @@
+#!/usr/bin/env node
+// Standalone semver comparison program.
+// Exits successfully and prints matching version(s) if
+// any supplied version is valid and passes all tests.
+
+var argv = process.argv.slice(2)
+
+var versions = []
+
+var range = []
+
+var inc = null
+
+var version = require('../package.json').version
+
+var loose = false
+
+var includePrerelease = false
+
+var coerce = false
+
+var identifier
+
+var semver = require('../semver')
+
+var reverse = false
+
+var options = {}
+
+main()
+
+function main () {
+  if (!argv.length) return help()
+  while (argv.length) {
+    var a = argv.shift()
+    var indexOfEqualSign = a.indexOf('=')
+    if (indexOfEqualSign !== -1) {
+      a = a.slice(0, indexOfEqualSign)
+      argv.unshift(a.slice(indexOfEqualSign + 1))
+    }
+    switch (a) {
+      case '-rv': case '-rev': case '--rev': case '--reverse':
+        reverse = true
+        break
+      case '-l': case '--loose':
+        loose = true
+        break
+      case '-p': case '--include-prerelease':
+        includePrerelease = true
+        break
+      case '-v': case '--version':
+        versions.push(argv.shift())
+        break
+      case '-i': case '--inc': case '--increment':
+        switch (argv[0]) {
+          case 'major': case 'minor': case 'patch': case 'prerelease':
+          case 'premajor': case 'preminor': case 'prepatch':
+            inc = argv.shift()
+            break
+          default:
+            inc = 'patch'
+            break
+        }
+        break
+      case '--preid':
+        identifier = argv.shift()
+        break
+      case '-r': case '--range':
+        range.push(argv.shift())
+        break
+      case '-c': case '--coerce':
+        coerce = true
+        break
+      case '-h': case '--help': case '-?':
+        return help()
+      default:
+        versions.push(a)
+        break
+    }
+  }
+
+  var options = { loose: loose, includePrerelease: includePrerelease }
+
+  versions = versions.map(function (v) {
+    return coerce ? (semver.coerce(v) || { version: v }).version : v
+  }).filter(function (v) {
+    return semver.valid(v)
+  })
+  if (!versions.length) return fail()
+  if (inc && (versions.length !== 1 || range.length)) { return failInc() }
+
+  for (var i = 0, l = range.length; i < l; i++) {
+    versions = versions.filter(function (v) {
+      return semver.satisfies(v, range[i], options)
+    })
+    if (!versions.length) return fail()
+  }
+  return success(versions)
+}
+
+function failInc () {
+  console.error('--inc can only be used on a single version with no range')
+  fail()
+}
+
+function fail () { process.exit(1) }
+
+function success () {
+  var compare = reverse ? 'rcompare' : 'compare'
+  versions.sort(function (a, b) {
+    return semver[compare](a, b, options)
+  }).map(function (v) {
+    return semver.clean(v, options)
+  }).map(function (v) {
+    return inc ? semver.inc(v, inc, options, identifier) : v
+  }).forEach(function (v, i, _) { console.log(v) })
+}
+
+function help () {
+  console.log(['SemVer ' + version,
+    '',
+    'A JavaScript implementation of the https://semver.org/ specification',
+    'Copyright Isaac Z. Schlueter',
+    '',
+    'Usage: semver [options] <version> [<version> [...]]',
+    'Prints valid versions sorted by SemVer precedence',
+    '',
+    'Options:',
+    '-r --range <range>',
+    '        Print versions that match the specified range.',
+    '',
+    '-i --increment [<level>]',
+    '        Increment a version by the specified level.  Level can',
+    '        be one of: major, minor, patch, premajor, preminor,',
+    "        prepatch, or prerelease.  Default level is 'patch'.",
+    '        Only one version may be specified.',
+    '',
+    '--preid <identifier>',
+    '        Identifier to be used to prefix premajor, preminor,',
+    '        prepatch or prerelease version increments.',
+    '',
+    '-l --loose',
+    '        Interpret versions and ranges loosely',
+    '',
+    '-p --include-prerelease',
+    '        Always include prerelease versions in range matching',
+    '',
+    '-c --coerce',
+    '        Coerce a string into SemVer if possible',
+    '        (does not imply --loose)',
+    '',
+    'Program exits successfully if any valid version satisfies',
+    'all supplied ranges, and prints all satisfying versions.',
+    '',
+    'If no satisfying versions are found, then exits failure.',
+    '',
+    'Versions are printed in ascending order, so supplying',
+    'multiple versions to the utility will just sort them.'
+  ].join('\n'))
+}
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/semver/package.json b/setup-maven/node_modules/cross-spawn/node_modules/semver/package.json
new file mode 100644
index 0000000..f78e5f2
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/semver/package.json
@@ -0,0 +1,60 @@
+{
+  "_from": "semver@^5.5.0",
+  "_id": "semver@5.7.1",
+  "_inBundle": false,
+  "_integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+  "_location": "/cross-spawn/semver",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "semver@^5.5.0",
+    "name": "semver",
+    "escapedName": "semver",
+    "rawSpec": "^5.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^5.5.0"
+  },
+  "_requiredBy": [
+    "/cross-spawn"
+  ],
+  "_resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+  "_shasum": "a954f931aeba508d307bbf069eff0c01c96116f7",
+  "_spec": "semver@^5.5.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/cross-spawn",
+  "bin": {
+    "semver": "./bin/semver"
+  },
+  "bugs": {
+    "url": "https://github.com/npm/node-semver/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "The semantic version parser used by npm.",
+  "devDependencies": {
+    "tap": "^13.0.0-rc.18"
+  },
+  "files": [
+    "bin",
+    "range.bnf",
+    "semver.js"
+  ],
+  "homepage": "https://github.com/npm/node-semver#readme",
+  "license": "ISC",
+  "main": "semver.js",
+  "name": "semver",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/npm/node-semver.git"
+  },
+  "scripts": {
+    "postpublish": "git push origin --all; git push origin --tags",
+    "postversion": "npm publish",
+    "preversion": "npm test",
+    "test": "tap"
+  },
+  "tap": {
+    "check-coverage": true
+  },
+  "version": "5.7.1"
+}
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/semver/range.bnf b/setup-maven/node_modules/cross-spawn/node_modules/semver/range.bnf
new file mode 100644
index 0000000..d4c6ae0
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/semver/range.bnf
@@ -0,0 +1,16 @@
+range-set  ::= range ( logical-or range ) *
+logical-or ::= ( ' ' ) * '||' ( ' ' ) *
+range      ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen     ::= partial ' - ' partial
+simple     ::= primitive | partial | tilde | caret
+primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
+partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
+xr         ::= 'x' | 'X' | '*' | nr
+nr         ::= '0' | [1-9] ( [0-9] ) *
+tilde      ::= '~' partial
+caret      ::= '^' partial
+qualifier  ::= ( '-' pre )? ( '+' build )?
+pre        ::= parts
+build      ::= parts
+parts      ::= part ( '.' part ) *
+part       ::= nr | [-0-9A-Za-z]+
diff --git a/setup-maven/node_modules/cross-spawn/node_modules/semver/semver.js b/setup-maven/node_modules/cross-spawn/node_modules/semver/semver.js
new file mode 100644
index 0000000..d315d5d
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/node_modules/semver/semver.js
@@ -0,0 +1,1483 @@
+exports = module.exports = SemVer
+
+var debug
+/* istanbul ignore next */
+if (typeof process === 'object' &&
+    process.env &&
+    process.env.NODE_DEBUG &&
+    /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
+  debug = function () {
+    var args = Array.prototype.slice.call(arguments, 0)
+    args.unshift('SEMVER')
+    console.log.apply(console, args)
+  }
+} else {
+  debug = function () {}
+}
+
+// Note: this is the semver.org version of the spec that it implements
+// Not necessarily the package version of this code.
+exports.SEMVER_SPEC_VERSION = '2.0.0'
+
+var MAX_LENGTH = 256
+var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
+  /* istanbul ignore next */ 9007199254740991
+
+// Max safe segment length for coercion.
+var MAX_SAFE_COMPONENT_LENGTH = 16
+
+// The actual regexps go on exports.re
+var re = exports.re = []
+var src = exports.src = []
+var R = 0
+
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
+
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
+
+var NUMERICIDENTIFIER = R++
+src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
+var NUMERICIDENTIFIERLOOSE = R++
+src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'
+
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
+
+var NONNUMERICIDENTIFIER = R++
+src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
+
+// ## Main Version
+// Three dot-separated numeric identifiers.
+
+var MAINVERSION = R++
+src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
+                   '(' + src[NUMERICIDENTIFIER] + ')\\.' +
+                   '(' + src[NUMERICIDENTIFIER] + ')'
+
+var MAINVERSIONLOOSE = R++
+src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
+                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
+                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')'
+
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
+
+var PRERELEASEIDENTIFIER = R++
+src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
+                            '|' + src[NONNUMERICIDENTIFIER] + ')'
+
+var PRERELEASEIDENTIFIERLOOSE = R++
+src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
+                                 '|' + src[NONNUMERICIDENTIFIER] + ')'
+
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
+
+var PRERELEASE = R++
+src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
+                  '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'
+
+var PRERELEASELOOSE = R++
+src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
+                       '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'
+
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
+
+var BUILDIDENTIFIER = R++
+src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
+
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
+
+var BUILD = R++
+src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
+             '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'
+
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
+
+// Note that the only major, minor, patch, and pre-release sections of
+// the version string are capturing groups.  The build metadata is not a
+// capturing group, because it should not ever be used in version
+// comparison.
+
+var FULL = R++
+var FULLPLAIN = 'v?' + src[MAINVERSION] +
+                src[PRERELEASE] + '?' +
+                src[BUILD] + '?'
+
+src[FULL] = '^' + FULLPLAIN + '$'
+
+// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
+// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
+// common in the npm registry.
+var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
+                 src[PRERELEASELOOSE] + '?' +
+                 src[BUILD] + '?'
+
+var LOOSE = R++
+src[LOOSE] = '^' + LOOSEPLAIN + '$'
+
+var GTLT = R++
+src[GTLT] = '((?:<|>)?=?)'
+
+// Something like "2.*" or "1.2.x".
+// Note that "x.x" is a valid xRange identifer, meaning "any version"
+// Only the first item is strictly required.
+var XRANGEIDENTIFIERLOOSE = R++
+src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
+var XRANGEIDENTIFIER = R++
+src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'
+
+var XRANGEPLAIN = R++
+src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
+                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
+                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
+                   '(?:' + src[PRERELEASE] + ')?' +
+                   src[BUILD] + '?' +
+                   ')?)?'
+
+var XRANGEPLAINLOOSE = R++
+src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+                        '(?:' + src[PRERELEASELOOSE] + ')?' +
+                        src[BUILD] + '?' +
+                        ')?)?'
+
+var XRANGE = R++
+src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
+var XRANGELOOSE = R++
+src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'
+
+// Coercion.
+// Extract anything that could conceivably be a part of a valid semver
+var COERCE = R++
+src[COERCE] = '(?:^|[^\\d])' +
+              '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
+              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+              '(?:$|[^\\d])'
+
+// Tilde ranges.
+// Meaning is "reasonably at or greater than"
+var LONETILDE = R++
+src[LONETILDE] = '(?:~>?)'
+
+var TILDETRIM = R++
+src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
+re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
+var tildeTrimReplace = '$1~'
+
+var TILDE = R++
+src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
+var TILDELOOSE = R++
+src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'
+
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+var LONECARET = R++
+src[LONECARET] = '(?:\\^)'
+
+var CARETTRIM = R++
+src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
+re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
+var caretTrimReplace = '$1^'
+
+var CARET = R++
+src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
+var CARETLOOSE = R++
+src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'
+
+// A simple gt/lt/eq thing, or just "" to indicate "any version"
+var COMPARATORLOOSE = R++
+src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
+var COMPARATOR = R++
+src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'
+
+// An expression to strip any whitespace between the gtlt and the thing
+// it modifies, so that `> 1.2.3` ==> `>1.2.3`
+var COMPARATORTRIM = R++
+src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
+                      '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'
+
+// this one has to use the /g flag
+re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
+var comparatorTrimReplace = '$1$2$3'
+
+// Something like `1.2.3 - 1.2.4`
+// Note that these all use the loose form, because they'll be
+// checked against either the strict or loose comparator form
+// later.
+var HYPHENRANGE = R++
+src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
+                   '\\s+-\\s+' +
+                   '(' + src[XRANGEPLAIN] + ')' +
+                   '\\s*$'
+
+var HYPHENRANGELOOSE = R++
+src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
+                        '\\s+-\\s+' +
+                        '(' + src[XRANGEPLAINLOOSE] + ')' +
+                        '\\s*$'
+
+// Star ranges basically just allow anything at all.
+var STAR = R++
+src[STAR] = '(<|>)?=?\\s*\\*'
+
+// Compile to actual regexp objects.
+// All are flag-free, unless they were created above with a flag.
+for (var i = 0; i < R; i++) {
+  debug(i, src[i])
+  if (!re[i]) {
+    re[i] = new RegExp(src[i])
+  }
+}
+
+exports.parse = parse
+function parse (version, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  if (version instanceof SemVer) {
+    return version
+  }
+
+  if (typeof version !== 'string') {
+    return null
+  }
+
+  if (version.length > MAX_LENGTH) {
+    return null
+  }
+
+  var r = options.loose ? re[LOOSE] : re[FULL]
+  if (!r.test(version)) {
+    return null
+  }
+
+  try {
+    return new SemVer(version, options)
+  } catch (er) {
+    return null
+  }
+}
+
+exports.valid = valid
+function valid (version, options) {
+  var v = parse(version, options)
+  return v ? v.version : null
+}
+
+exports.clean = clean
+function clean (version, options) {
+  var s = parse(version.trim().replace(/^[=v]+/, ''), options)
+  return s ? s.version : null
+}
+
+exports.SemVer = SemVer
+
+function SemVer (version, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+  if (version instanceof SemVer) {
+    if (version.loose === options.loose) {
+      return version
+    } else {
+      version = version.version
+    }
+  } else if (typeof version !== 'string') {
+    throw new TypeError('Invalid Version: ' + version)
+  }
+
+  if (version.length > MAX_LENGTH) {
+    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
+  }
+
+  if (!(this instanceof SemVer)) {
+    return new SemVer(version, options)
+  }
+
+  debug('SemVer', version, options)
+  this.options = options
+  this.loose = !!options.loose
+
+  var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])
+
+  if (!m) {
+    throw new TypeError('Invalid Version: ' + version)
+  }
+
+  this.raw = version
+
+  // these are actually numbers
+  this.major = +m[1]
+  this.minor = +m[2]
+  this.patch = +m[3]
+
+  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+    throw new TypeError('Invalid major version')
+  }
+
+  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+    throw new TypeError('Invalid minor version')
+  }
+
+  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+    throw new TypeError('Invalid patch version')
+  }
+
+  // numberify any prerelease numeric ids
+  if (!m[4]) {
+    this.prerelease = []
+  } else {
+    this.prerelease = m[4].split('.').map(function (id) {
+      if (/^[0-9]+$/.test(id)) {
+        var num = +id
+        if (num >= 0 && num < MAX_SAFE_INTEGER) {
+          return num
+        }
+      }
+      return id
+    })
+  }
+
+  this.build = m[5] ? m[5].split('.') : []
+  this.format()
+}
+
+SemVer.prototype.format = function () {
+  this.version = this.major + '.' + this.minor + '.' + this.patch
+  if (this.prerelease.length) {
+    this.version += '-' + this.prerelease.join('.')
+  }
+  return this.version
+}
+
+SemVer.prototype.toString = function () {
+  return this.version
+}
+
+SemVer.prototype.compare = function (other) {
+  debug('SemVer.compare', this.version, this.options, other)
+  if (!(other instanceof SemVer)) {
+    other = new SemVer(other, this.options)
+  }
+
+  return this.compareMain(other) || this.comparePre(other)
+}
+
+SemVer.prototype.compareMain = function (other) {
+  if (!(other instanceof SemVer)) {
+    other = new SemVer(other, this.options)
+  }
+
+  return compareIdentifiers(this.major, other.major) ||
+         compareIdentifiers(this.minor, other.minor) ||
+         compareIdentifiers(this.patch, other.patch)
+}
+
+SemVer.prototype.comparePre = function (other) {
+  if (!(other instanceof SemVer)) {
+    other = new SemVer(other, this.options)
+  }
+
+  // NOT having a prerelease is > having one
+  if (this.prerelease.length && !other.prerelease.length) {
+    return -1
+  } else if (!this.prerelease.length && other.prerelease.length) {
+    return 1
+  } else if (!this.prerelease.length && !other.prerelease.length) {
+    return 0
+  }
+
+  var i = 0
+  do {
+    var a = this.prerelease[i]
+    var b = other.prerelease[i]
+    debug('prerelease compare', i, a, b)
+    if (a === undefined && b === undefined) {
+      return 0
+    } else if (b === undefined) {
+      return 1
+    } else if (a === undefined) {
+      return -1
+    } else if (a === b) {
+      continue
+    } else {
+      return compareIdentifiers(a, b)
+    }
+  } while (++i)
+}
+
+// preminor will bump the version up to the next minor release, and immediately
+// down to pre-release. premajor and prepatch work the same way.
+SemVer.prototype.inc = function (release, identifier) {
+  switch (release) {
+    case 'premajor':
+      this.prerelease.length = 0
+      this.patch = 0
+      this.minor = 0
+      this.major++
+      this.inc('pre', identifier)
+      break
+    case 'preminor':
+      this.prerelease.length = 0
+      this.patch = 0
+      this.minor++
+      this.inc('pre', identifier)
+      break
+    case 'prepatch':
+      // If this is already a prerelease, it will bump to the next version
+      // drop any prereleases that might already exist, since they are not
+      // relevant at this point.
+      this.prerelease.length = 0
+      this.inc('patch', identifier)
+      this.inc('pre', identifier)
+      break
+    // If the input is a non-prerelease version, this acts the same as
+    // prepatch.
+    case 'prerelease':
+      if (this.prerelease.length === 0) {
+        this.inc('patch', identifier)
+      }
+      this.inc('pre', identifier)
+      break
+
+    case 'major':
+      // If this is a pre-major version, bump up to the same major version.
+      // Otherwise increment major.
+      // 1.0.0-5 bumps to 1.0.0
+      // 1.1.0 bumps to 2.0.0
+      if (this.minor !== 0 ||
+          this.patch !== 0 ||
+          this.prerelease.length === 0) {
+        this.major++
+      }
+      this.minor = 0
+      this.patch = 0
+      this.prerelease = []
+      break
+    case 'minor':
+      // If this is a pre-minor version, bump up to the same minor version.
+      // Otherwise increment minor.
+      // 1.2.0-5 bumps to 1.2.0
+      // 1.2.1 bumps to 1.3.0
+      if (this.patch !== 0 || this.prerelease.length === 0) {
+        this.minor++
+      }
+      this.patch = 0
+      this.prerelease = []
+      break
+    case 'patch':
+      // If this is not a pre-release version, it will increment the patch.
+      // If it is a pre-release it will bump up to the same patch version.
+      // 1.2.0-5 patches to 1.2.0
+      // 1.2.0 patches to 1.2.1
+      if (this.prerelease.length === 0) {
+        this.patch++
+      }
+      this.prerelease = []
+      break
+    // This probably shouldn't be used publicly.
+    // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
+    case 'pre':
+      if (this.prerelease.length === 0) {
+        this.prerelease = [0]
+      } else {
+        var i = this.prerelease.length
+        while (--i >= 0) {
+          if (typeof this.prerelease[i] === 'number') {
+            this.prerelease[i]++
+            i = -2
+          }
+        }
+        if (i === -1) {
+          // didn't increment anything
+          this.prerelease.push(0)
+        }
+      }
+      if (identifier) {
+        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+        if (this.prerelease[0] === identifier) {
+          if (isNaN(this.prerelease[1])) {
+            this.prerelease = [identifier, 0]
+          }
+        } else {
+          this.prerelease = [identifier, 0]
+        }
+      }
+      break
+
+    default:
+      throw new Error('invalid increment argument: ' + release)
+  }
+  this.format()
+  this.raw = this.version
+  return this
+}
+
+exports.inc = inc
+function inc (version, release, loose, identifier) {
+  if (typeof (loose) === 'string') {
+    identifier = loose
+    loose = undefined
+  }
+
+  try {
+    return new SemVer(version, loose).inc(release, identifier).version
+  } catch (er) {
+    return null
+  }
+}
+
+exports.diff = diff
+function diff (version1, version2) {
+  if (eq(version1, version2)) {
+    return null
+  } else {
+    var v1 = parse(version1)
+    var v2 = parse(version2)
+    var prefix = ''
+    if (v1.prerelease.length || v2.prerelease.length) {
+      prefix = 'pre'
+      var defaultResult = 'prerelease'
+    }
+    for (var key in v1) {
+      if (key === 'major' || key === 'minor' || key === 'patch') {
+        if (v1[key] !== v2[key]) {
+          return prefix + key
+        }
+      }
+    }
+    return defaultResult // may be undefined
+  }
+}
+
+exports.compareIdentifiers = compareIdentifiers
+
+var numeric = /^[0-9]+$/
+function compareIdentifiers (a, b) {
+  var anum = numeric.test(a)
+  var bnum = numeric.test(b)
+
+  if (anum && bnum) {
+    a = +a
+    b = +b
+  }
+
+  return a === b ? 0
+    : (anum && !bnum) ? -1
+    : (bnum && !anum) ? 1
+    : a < b ? -1
+    : 1
+}
+
+exports.rcompareIdentifiers = rcompareIdentifiers
+function rcompareIdentifiers (a, b) {
+  return compareIdentifiers(b, a)
+}
+
+exports.major = major
+function major (a, loose) {
+  return new SemVer(a, loose).major
+}
+
+exports.minor = minor
+function minor (a, loose) {
+  return new SemVer(a, loose).minor
+}
+
+exports.patch = patch
+function patch (a, loose) {
+  return new SemVer(a, loose).patch
+}
+
+exports.compare = compare
+function compare (a, b, loose) {
+  return new SemVer(a, loose).compare(new SemVer(b, loose))
+}
+
+exports.compareLoose = compareLoose
+function compareLoose (a, b) {
+  return compare(a, b, true)
+}
+
+exports.rcompare = rcompare
+function rcompare (a, b, loose) {
+  return compare(b, a, loose)
+}
+
+exports.sort = sort
+function sort (list, loose) {
+  return list.sort(function (a, b) {
+    return exports.compare(a, b, loose)
+  })
+}
+
+exports.rsort = rsort
+function rsort (list, loose) {
+  return list.sort(function (a, b) {
+    return exports.rcompare(a, b, loose)
+  })
+}
+
+exports.gt = gt
+function gt (a, b, loose) {
+  return compare(a, b, loose) > 0
+}
+
+exports.lt = lt
+function lt (a, b, loose) {
+  return compare(a, b, loose) < 0
+}
+
+exports.eq = eq
+function eq (a, b, loose) {
+  return compare(a, b, loose) === 0
+}
+
+exports.neq = neq
+function neq (a, b, loose) {
+  return compare(a, b, loose) !== 0
+}
+
+exports.gte = gte
+function gte (a, b, loose) {
+  return compare(a, b, loose) >= 0
+}
+
+exports.lte = lte
+function lte (a, b, loose) {
+  return compare(a, b, loose) <= 0
+}
+
+exports.cmp = cmp
+function cmp (a, op, b, loose) {
+  switch (op) {
+    case '===':
+      if (typeof a === 'object')
+        a = a.version
+      if (typeof b === 'object')
+        b = b.version
+      return a === b
+
+    case '!==':
+      if (typeof a === 'object')
+        a = a.version
+      if (typeof b === 'object')
+        b = b.version
+      return a !== b
+
+    case '':
+    case '=':
+    case '==':
+      return eq(a, b, loose)
+
+    case '!=':
+      return neq(a, b, loose)
+
+    case '>':
+      return gt(a, b, loose)
+
+    case '>=':
+      return gte(a, b, loose)
+
+    case '<':
+      return lt(a, b, loose)
+
+    case '<=':
+      return lte(a, b, loose)
+
+    default:
+      throw new TypeError('Invalid operator: ' + op)
+  }
+}
+
+exports.Comparator = Comparator
+function Comparator (comp, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  if (comp instanceof Comparator) {
+    if (comp.loose === !!options.loose) {
+      return comp
+    } else {
+      comp = comp.value
+    }
+  }
+
+  if (!(this instanceof Comparator)) {
+    return new Comparator(comp, options)
+  }
+
+  debug('comparator', comp, options)
+  this.options = options
+  this.loose = !!options.loose
+  this.parse(comp)
+
+  if (this.semver === ANY) {
+    this.value = ''
+  } else {
+    this.value = this.operator + this.semver.version
+  }
+
+  debug('comp', this)
+}
+
+var ANY = {}
+Comparator.prototype.parse = function (comp) {
+  var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
+  var m = comp.match(r)
+
+  if (!m) {
+    throw new TypeError('Invalid comparator: ' + comp)
+  }
+
+  this.operator = m[1]
+  if (this.operator === '=') {
+    this.operator = ''
+  }
+
+  // if it literally is just '>' or '' then allow anything.
+  if (!m[2]) {
+    this.semver = ANY
+  } else {
+    this.semver = new SemVer(m[2], this.options.loose)
+  }
+}
+
+Comparator.prototype.toString = function () {
+  return this.value
+}
+
+Comparator.prototype.test = function (version) {
+  debug('Comparator.test', version, this.options.loose)
+
+  if (this.semver === ANY) {
+    return true
+  }
+
+  if (typeof version === 'string') {
+    version = new SemVer(version, this.options)
+  }
+
+  return cmp(version, this.operator, this.semver, this.options)
+}
+
+Comparator.prototype.intersects = function (comp, options) {
+  if (!(comp instanceof Comparator)) {
+    throw new TypeError('a Comparator is required')
+  }
+
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  var rangeTmp
+
+  if (this.operator === '') {
+    rangeTmp = new Range(comp.value, options)
+    return satisfies(this.value, rangeTmp, options)
+  } else if (comp.operator === '') {
+    rangeTmp = new Range(this.value, options)
+    return satisfies(comp.semver, rangeTmp, options)
+  }
+
+  var sameDirectionIncreasing =
+    (this.operator === '>=' || this.operator === '>') &&
+    (comp.operator === '>=' || comp.operator === '>')
+  var sameDirectionDecreasing =
+    (this.operator === '<=' || this.operator === '<') &&
+    (comp.operator === '<=' || comp.operator === '<')
+  var sameSemVer = this.semver.version === comp.semver.version
+  var differentDirectionsInclusive =
+    (this.operator === '>=' || this.operator === '<=') &&
+    (comp.operator === '>=' || comp.operator === '<=')
+  var oppositeDirectionsLessThan =
+    cmp(this.semver, '<', comp.semver, options) &&
+    ((this.operator === '>=' || this.operator === '>') &&
+    (comp.operator === '<=' || comp.operator === '<'))
+  var oppositeDirectionsGreaterThan =
+    cmp(this.semver, '>', comp.semver, options) &&
+    ((this.operator === '<=' || this.operator === '<') &&
+    (comp.operator === '>=' || comp.operator === '>'))
+
+  return sameDirectionIncreasing || sameDirectionDecreasing ||
+    (sameSemVer && differentDirectionsInclusive) ||
+    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
+}
+
+exports.Range = Range
+function Range (range, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  if (range instanceof Range) {
+    if (range.loose === !!options.loose &&
+        range.includePrerelease === !!options.includePrerelease) {
+      return range
+    } else {
+      return new Range(range.raw, options)
+    }
+  }
+
+  if (range instanceof Comparator) {
+    return new Range(range.value, options)
+  }
+
+  if (!(this instanceof Range)) {
+    return new Range(range, options)
+  }
+
+  this.options = options
+  this.loose = !!options.loose
+  this.includePrerelease = !!options.includePrerelease
+
+  // First, split based on boolean or ||
+  this.raw = range
+  this.set = range.split(/\s*\|\|\s*/).map(function (range) {
+    return this.parseRange(range.trim())
+  }, this).filter(function (c) {
+    // throw out any that are not relevant for whatever reason
+    return c.length
+  })
+
+  if (!this.set.length) {
+    throw new TypeError('Invalid SemVer Range: ' + range)
+  }
+
+  this.format()
+}
+
+Range.prototype.format = function () {
+  this.range = this.set.map(function (comps) {
+    return comps.join(' ').trim()
+  }).join('||').trim()
+  return this.range
+}
+
+Range.prototype.toString = function () {
+  return this.range
+}
+
+Range.prototype.parseRange = function (range) {
+  var loose = this.options.loose
+  range = range.trim()
+  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
+  var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
+  range = range.replace(hr, hyphenReplace)
+  debug('hyphen replace', range)
+  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
+  range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
+  debug('comparator trim', range, re[COMPARATORTRIM])
+
+  // `~ 1.2.3` => `~1.2.3`
+  range = range.replace(re[TILDETRIM], tildeTrimReplace)
+
+  // `^ 1.2.3` => `^1.2.3`
+  range = range.replace(re[CARETTRIM], caretTrimReplace)
+
+  // normalize spaces
+  range = range.split(/\s+/).join(' ')
+
+  // At this point, the range is completely trimmed and
+  // ready to be split into comparators.
+
+  var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
+  var set = range.split(' ').map(function (comp) {
+    return parseComparator(comp, this.options)
+  }, this).join(' ').split(/\s+/)
+  if (this.options.loose) {
+    // in loose mode, throw out any that are not valid comparators
+    set = set.filter(function (comp) {
+      return !!comp.match(compRe)
+    })
+  }
+  set = set.map(function (comp) {
+    return new Comparator(comp, this.options)
+  }, this)
+
+  return set
+}
+
+Range.prototype.intersects = function (range, options) {
+  if (!(range instanceof Range)) {
+    throw new TypeError('a Range is required')
+  }
+
+  return this.set.some(function (thisComparators) {
+    return thisComparators.every(function (thisComparator) {
+      return range.set.some(function (rangeComparators) {
+        return rangeComparators.every(function (rangeComparator) {
+          return thisComparator.intersects(rangeComparator, options)
+        })
+      })
+    })
+  })
+}
+
+// Mostly just for testing and legacy API reasons
+exports.toComparators = toComparators
+function toComparators (range, options) {
+  return new Range(range, options).set.map(function (comp) {
+    return comp.map(function (c) {
+      return c.value
+    }).join(' ').trim().split(' ')
+  })
+}
+
+// comprised of xranges, tildes, stars, and gtlt's at this point.
+// already replaced the hyphen ranges
+// turn into a set of JUST comparators.
+function parseComparator (comp, options) {
+  debug('comp', comp, options)
+  comp = replaceCarets(comp, options)
+  debug('caret', comp)
+  comp = replaceTildes(comp, options)
+  debug('tildes', comp)
+  comp = replaceXRanges(comp, options)
+  debug('xrange', comp)
+  comp = replaceStars(comp, options)
+  debug('stars', comp)
+  return comp
+}
+
+function isX (id) {
+  return !id || id.toLowerCase() === 'x' || id === '*'
+}
+
+// ~, ~> --> * (any, kinda silly)
+// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
+// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
+// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
+// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
+// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
+function replaceTildes (comp, options) {
+  return comp.trim().split(/\s+/).map(function (comp) {
+    return replaceTilde(comp, options)
+  }).join(' ')
+}
+
+function replaceTilde (comp, options) {
+  var r = options.loose ? re[TILDELOOSE] : re[TILDE]
+  return comp.replace(r, function (_, M, m, p, pr) {
+    debug('tilde', comp, _, M, m, p, pr)
+    var ret
+
+    if (isX(M)) {
+      ret = ''
+    } else if (isX(m)) {
+      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
+    } else if (isX(p)) {
+      // ~1.2 == >=1.2.0 <1.3.0
+      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+    } else if (pr) {
+      debug('replaceTilde pr', pr)
+      ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+            ' <' + M + '.' + (+m + 1) + '.0'
+    } else {
+      // ~1.2.3 == >=1.2.3 <1.3.0
+      ret = '>=' + M + '.' + m + '.' + p +
+            ' <' + M + '.' + (+m + 1) + '.0'
+    }
+
+    debug('tilde return', ret)
+    return ret
+  })
+}
+
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
+// ^1.2.3 --> >=1.2.3 <2.0.0
+// ^1.2.0 --> >=1.2.0 <2.0.0
+function replaceCarets (comp, options) {
+  return comp.trim().split(/\s+/).map(function (comp) {
+    return replaceCaret(comp, options)
+  }).join(' ')
+}
+
+function replaceCaret (comp, options) {
+  debug('caret', comp, options)
+  var r = options.loose ? re[CARETLOOSE] : re[CARET]
+  return comp.replace(r, function (_, M, m, p, pr) {
+    debug('caret', comp, _, M, m, p, pr)
+    var ret
+
+    if (isX(M)) {
+      ret = ''
+    } else if (isX(m)) {
+      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
+    } else if (isX(p)) {
+      if (M === '0') {
+        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+      } else {
+        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
+      }
+    } else if (pr) {
+      debug('replaceCaret pr', pr)
+      if (M === '0') {
+        if (m === '0') {
+          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+                ' <' + M + '.' + m + '.' + (+p + 1)
+        } else {
+          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+                ' <' + M + '.' + (+m + 1) + '.0'
+        }
+      } else {
+        ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+              ' <' + (+M + 1) + '.0.0'
+      }
+    } else {
+      debug('no pr')
+      if (M === '0') {
+        if (m === '0') {
+          ret = '>=' + M + '.' + m + '.' + p +
+                ' <' + M + '.' + m + '.' + (+p + 1)
+        } else {
+          ret = '>=' + M + '.' + m + '.' + p +
+                ' <' + M + '.' + (+m + 1) + '.0'
+        }
+      } else {
+        ret = '>=' + M + '.' + m + '.' + p +
+              ' <' + (+M + 1) + '.0.0'
+      }
+    }
+
+    debug('caret return', ret)
+    return ret
+  })
+}
+
+function replaceXRanges (comp, options) {
+  debug('replaceXRanges', comp, options)
+  return comp.split(/\s+/).map(function (comp) {
+    return replaceXRange(comp, options)
+  }).join(' ')
+}
+
+function replaceXRange (comp, options) {
+  comp = comp.trim()
+  var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]
+  return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
+    debug('xRange', comp, ret, gtlt, M, m, p, pr)
+    var xM = isX(M)
+    var xm = xM || isX(m)
+    var xp = xm || isX(p)
+    var anyX = xp
+
+    if (gtlt === '=' && anyX) {
+      gtlt = ''
+    }
+
+    if (xM) {
+      if (gtlt === '>' || gtlt === '<') {
+        // nothing is allowed
+        ret = '<0.0.0'
+      } else {
+        // nothing is forbidden
+        ret = '*'
+      }
+    } else if (gtlt && anyX) {
+      // we know patch is an x, because we have any x at all.
+      // replace X with 0
+      if (xm) {
+        m = 0
+      }
+      p = 0
+
+      if (gtlt === '>') {
+        // >1 => >=2.0.0
+        // >1.2 => >=1.3.0
+        // >1.2.3 => >= 1.2.4
+        gtlt = '>='
+        if (xm) {
+          M = +M + 1
+          m = 0
+          p = 0
+        } else {
+          m = +m + 1
+          p = 0
+        }
+      } else if (gtlt === '<=') {
+        // <=0.7.x is actually <0.8.0, since any 0.7.x should
+        // pass.  Similarly, <=7.x is actually <8.0.0, etc.
+        gtlt = '<'
+        if (xm) {
+          M = +M + 1
+        } else {
+          m = +m + 1
+        }
+      }
+
+      ret = gtlt + M + '.' + m + '.' + p
+    } else if (xm) {
+      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
+    } else if (xp) {
+      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+    }
+
+    debug('xRange return', ret)
+
+    return ret
+  })
+}
+
+// Because * is AND-ed with everything else in the comparator,
+// and '' means "any version", just remove the *s entirely.
+function replaceStars (comp, options) {
+  debug('replaceStars', comp, options)
+  // Looseness is ignored here.  star is always as loose as it gets!
+  return comp.trim().replace(re[STAR], '')
+}
+
+// This function is passed to string.replace(re[HYPHENRANGE])
+// M, m, patch, prerelease, build
+// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0 <3.5.0
+function hyphenReplace ($0,
+  from, fM, fm, fp, fpr, fb,
+  to, tM, tm, tp, tpr, tb) {
+  if (isX(fM)) {
+    from = ''
+  } else if (isX(fm)) {
+    from = '>=' + fM + '.0.0'
+  } else if (isX(fp)) {
+    from = '>=' + fM + '.' + fm + '.0'
+  } else {
+    from = '>=' + from
+  }
+
+  if (isX(tM)) {
+    to = ''
+  } else if (isX(tm)) {
+    to = '<' + (+tM + 1) + '.0.0'
+  } else if (isX(tp)) {
+    to = '<' + tM + '.' + (+tm + 1) + '.0'
+  } else if (tpr) {
+    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
+  } else {
+    to = '<=' + to
+  }
+
+  return (from + ' ' + to).trim()
+}
+
+// if ANY of the sets match ALL of its comparators, then pass
+Range.prototype.test = function (version) {
+  if (!version) {
+    return false
+  }
+
+  if (typeof version === 'string') {
+    version = new SemVer(version, this.options)
+  }
+
+  for (var i = 0; i < this.set.length; i++) {
+    if (testSet(this.set[i], version, this.options)) {
+      return true
+    }
+  }
+  return false
+}
+
+function testSet (set, version, options) {
+  for (var i = 0; i < set.length; i++) {
+    if (!set[i].test(version)) {
+      return false
+    }
+  }
+
+  if (version.prerelease.length && !options.includePrerelease) {
+    // Find the set of versions that are allowed to have prereleases
+    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
+    // That should allow `1.2.3-pr.2` to pass.
+    // However, `1.2.4-alpha.notready` should NOT be allowed,
+    // even though it's within the range set by the comparators.
+    for (i = 0; i < set.length; i++) {
+      debug(set[i].semver)
+      if (set[i].semver === ANY) {
+        continue
+      }
+
+      if (set[i].semver.prerelease.length > 0) {
+        var allowed = set[i].semver
+        if (allowed.major === version.major &&
+            allowed.minor === version.minor &&
+            allowed.patch === version.patch) {
+          return true
+        }
+      }
+    }
+
+    // Version has a -pre, but it's not one of the ones we like.
+    return false
+  }
+
+  return true
+}
+
+exports.satisfies = satisfies
+function satisfies (version, range, options) {
+  try {
+    range = new Range(range, options)
+  } catch (er) {
+    return false
+  }
+  return range.test(version)
+}
+
+exports.maxSatisfying = maxSatisfying
+function maxSatisfying (versions, range, options) {
+  var max = null
+  var maxSV = null
+  try {
+    var rangeObj = new Range(range, options)
+  } catch (er) {
+    return null
+  }
+  versions.forEach(function (v) {
+    if (rangeObj.test(v)) {
+      // satisfies(v, range, options)
+      if (!max || maxSV.compare(v) === -1) {
+        // compare(max, v, true)
+        max = v
+        maxSV = new SemVer(max, options)
+      }
+    }
+  })
+  return max
+}
+
+exports.minSatisfying = minSatisfying
+function minSatisfying (versions, range, options) {
+  var min = null
+  var minSV = null
+  try {
+    var rangeObj = new Range(range, options)
+  } catch (er) {
+    return null
+  }
+  versions.forEach(function (v) {
+    if (rangeObj.test(v)) {
+      // satisfies(v, range, options)
+      if (!min || minSV.compare(v) === 1) {
+        // compare(min, v, true)
+        min = v
+        minSV = new SemVer(min, options)
+      }
+    }
+  })
+  return min
+}
+
+exports.minVersion = minVersion
+function minVersion (range, loose) {
+  range = new Range(range, loose)
+
+  var minver = new SemVer('0.0.0')
+  if (range.test(minver)) {
+    return minver
+  }
+
+  minver = new SemVer('0.0.0-0')
+  if (range.test(minver)) {
+    return minver
+  }
+
+  minver = null
+  for (var i = 0; i < range.set.length; ++i) {
+    var comparators = range.set[i]
+
+    comparators.forEach(function (comparator) {
+      // Clone to avoid manipulating the comparator's semver object.
+      var compver = new SemVer(comparator.semver.version)
+      switch (comparator.operator) {
+        case '>':
+          if (compver.prerelease.length === 0) {
+            compver.patch++
+          } else {
+            compver.prerelease.push(0)
+          }
+          compver.raw = compver.format()
+          /* fallthrough */
+        case '':
+        case '>=':
+          if (!minver || gt(minver, compver)) {
+            minver = compver
+          }
+          break
+        case '<':
+        case '<=':
+          /* Ignore maximum versions */
+          break
+        /* istanbul ignore next */
+        default:
+          throw new Error('Unexpected operation: ' + comparator.operator)
+      }
+    })
+  }
+
+  if (minver && range.test(minver)) {
+    return minver
+  }
+
+  return null
+}
+
+exports.validRange = validRange
+function validRange (range, options) {
+  try {
+    // Return '*' instead of '' so that truthiness works.
+    // This will throw if it's invalid anyway
+    return new Range(range, options).range || '*'
+  } catch (er) {
+    return null
+  }
+}
+
+// Determine if version is less than all the versions possible in the range
+exports.ltr = ltr
+function ltr (version, range, options) {
+  return outside(version, range, '<', options)
+}
+
+// Determine if version is greater than all the versions possible in the range.
+exports.gtr = gtr
+function gtr (version, range, options) {
+  return outside(version, range, '>', options)
+}
+
+exports.outside = outside
+function outside (version, range, hilo, options) {
+  version = new SemVer(version, options)
+  range = new Range(range, options)
+
+  var gtfn, ltefn, ltfn, comp, ecomp
+  switch (hilo) {
+    case '>':
+      gtfn = gt
+      ltefn = lte
+      ltfn = lt
+      comp = '>'
+      ecomp = '>='
+      break
+    case '<':
+      gtfn = lt
+      ltefn = gte
+      ltfn = gt
+      comp = '<'
+      ecomp = '<='
+      break
+    default:
+      throw new TypeError('Must provide a hilo val of "<" or ">"')
+  }
+
+  // If it satisifes the range it is not outside
+  if (satisfies(version, range, options)) {
+    return false
+  }
+
+  // From now on, variable terms are as if we're in "gtr" mode.
+  // but note that everything is flipped for the "ltr" function.
+
+  for (var i = 0; i < range.set.length; ++i) {
+    var comparators = range.set[i]
+
+    var high = null
+    var low = null
+
+    comparators.forEach(function (comparator) {
+      if (comparator.semver === ANY) {
+        comparator = new Comparator('>=0.0.0')
+      }
+      high = high || comparator
+      low = low || comparator
+      if (gtfn(comparator.semver, high.semver, options)) {
+        high = comparator
+      } else if (ltfn(comparator.semver, low.semver, options)) {
+        low = comparator
+      }
+    })
+
+    // If the edge version comparator has a operator then our version
+    // isn't outside it
+    if (high.operator === comp || high.operator === ecomp) {
+      return false
+    }
+
+    // If the lowest version comparator has an operator and our version
+    // is less than it then it isn't higher than the range
+    if ((!low.operator || low.operator === comp) &&
+        ltefn(version, low.semver)) {
+      return false
+    } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+      return false
+    }
+  }
+  return true
+}
+
+exports.prerelease = prerelease
+function prerelease (version, options) {
+  var parsed = parse(version, options)
+  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
+}
+
+exports.intersects = intersects
+function intersects (r1, r2, options) {
+  r1 = new Range(r1, options)
+  r2 = new Range(r2, options)
+  return r1.intersects(r2)
+}
+
+exports.coerce = coerce
+function coerce (version) {
+  if (version instanceof SemVer) {
+    return version
+  }
+
+  if (typeof version !== 'string') {
+    return null
+  }
+
+  var match = version.match(re[COERCE])
+
+  if (match == null) {
+    return null
+  }
+
+  return parse(match[1] +
+    '.' + (match[2] || '0') +
+    '.' + (match[3] || '0'))
+}
diff --git a/setup-maven/node_modules/cross-spawn/package.json b/setup-maven/node_modules/cross-spawn/package.json
new file mode 100644
index 0000000..68e4ca8
--- /dev/null
+++ b/setup-maven/node_modules/cross-spawn/package.json
@@ -0,0 +1,107 @@
+{
+  "_from": "cross-spawn@^6.0.0",
+  "_id": "cross-spawn@6.0.5",
+  "_inBundle": false,
+  "_integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+  "_location": "/cross-spawn",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "cross-spawn@^6.0.0",
+    "name": "cross-spawn",
+    "escapedName": "cross-spawn",
+    "rawSpec": "^6.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^6.0.0"
+  },
+  "_requiredBy": [
+    "/execa"
+  ],
+  "_resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+  "_shasum": "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4",
+  "_spec": "cross-spawn@^6.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/execa",
+  "author": {
+    "name": "André Cruz",
+    "email": "andre@moxy.studio"
+  },
+  "bugs": {
+    "url": "https://github.com/moxystudio/node-cross-spawn/issues"
+  },
+  "bundleDependencies": false,
+  "commitlint": {
+    "extends": [
+      "@commitlint/config-conventional"
+    ]
+  },
+  "dependencies": {
+    "nice-try": "^1.0.4",
+    "path-key": "^2.0.1",
+    "semver": "^5.5.0",
+    "shebang-command": "^1.2.0",
+    "which": "^1.2.9"
+  },
+  "deprecated": false,
+  "description": "Cross platform child_process#spawn and child_process#spawnSync",
+  "devDependencies": {
+    "@commitlint/cli": "^6.0.0",
+    "@commitlint/config-conventional": "^6.0.2",
+    "babel-core": "^6.26.0",
+    "babel-jest": "^22.1.0",
+    "babel-preset-moxy": "^2.2.1",
+    "eslint": "^4.3.0",
+    "eslint-config-moxy": "^5.0.0",
+    "husky": "^0.14.3",
+    "jest": "^22.0.0",
+    "lint-staged": "^7.0.0",
+    "mkdirp": "^0.5.1",
+    "regenerator-runtime": "^0.11.1",
+    "rimraf": "^2.6.2",
+    "standard-version": "^4.2.0"
+  },
+  "engines": {
+    "node": ">=4.8"
+  },
+  "files": [
+    "lib"
+  ],
+  "homepage": "https://github.com/moxystudio/node-cross-spawn",
+  "keywords": [
+    "spawn",
+    "spawnSync",
+    "windows",
+    "cross-platform",
+    "path-ext",
+    "shebang",
+    "cmd",
+    "execute"
+  ],
+  "license": "MIT",
+  "lint-staged": {
+    "*.js": [
+      "eslint --fix",
+      "git add"
+    ]
+  },
+  "main": "index.js",
+  "name": "cross-spawn",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/moxystudio/node-cross-spawn.git"
+  },
+  "scripts": {
+    "commitmsg": "commitlint -e $GIT_PARAMS",
+    "lint": "eslint .",
+    "precommit": "lint-staged",
+    "prerelease": "npm t && npm run lint",
+    "release": "standard-version",
+    "test": "jest --env node --coverage"
+  },
+  "standard-version": {
+    "scripts": {
+      "posttag": "git push --follow-tags origin master && npm publish"
+    }
+  },
+  "version": "6.0.5"
+}
diff --git a/setup-maven/node_modules/deprecation/LICENSE b/setup-maven/node_modules/deprecation/LICENSE
new file mode 100644
index 0000000..1683b58
--- /dev/null
+++ b/setup-maven/node_modules/deprecation/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Gregor Martynus and contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/deprecation/README.md b/setup-maven/node_modules/deprecation/README.md
new file mode 100644
index 0000000..648809d
--- /dev/null
+++ b/setup-maven/node_modules/deprecation/README.md
@@ -0,0 +1,77 @@
+# deprecation
+
+> Log a deprecation message with stack
+
+![build](https://action-badges.now.sh/gr2m/deprecation)
+
+## Usage
+
+<table>
+<tbody valign=top align=left>
+<tr><th>
+Browsers
+</th><td width=100%>
+
+Load `deprecation` directly from [cdn.pika.dev](https://cdn.pika.dev)
+
+```html
+<script type="module">
+  import { Deprecation } from "https://cdn.pika.dev/deprecation/v2";
+</script>
+```
+
+</td></tr>
+<tr><th>
+Node
+</th><td>
+
+Install with `npm install deprecation`
+
+```js
+const { Deprecation } = require("deprecation");
+// or: import { Deprecation } from "deprecation";
+```
+
+</td></tr>
+</tbody>
+</table>
+
+```js
+function foo() {
+  bar();
+}
+
+function bar() {
+  baz();
+}
+
+function baz() {
+  console.warn(new Deprecation("[my-lib] foo() is deprecated, use bar()"));
+}
+
+foo();
+// { Deprecation: [my-lib] foo() is deprecated, use bar()
+//     at baz (/path/to/file.js:12:15)
+//     at bar (/path/to/file.js:8:3)
+//     at foo (/path/to/file.js:4:3)
+```
+
+To log a deprecation message only once, you can use the [once](https://www.npmjs.com/package/once) module.
+
+```js
+const Deprecation = require("deprecation");
+const once = require("once");
+
+const deprecateFoo = once(console.warn);
+
+function foo() {
+  deprecateFoo(new Deprecation("[my-lib] foo() is deprecated, use bar()"));
+}
+
+foo();
+foo(); // logs nothing
+```
+
+## License
+
+[ISC](LICENSE)
diff --git a/setup-maven/node_modules/deprecation/dist-node/index.js b/setup-maven/node_modules/deprecation/dist-node/index.js
new file mode 100644
index 0000000..9da1775
--- /dev/null
+++ b/setup-maven/node_modules/deprecation/dist-node/index.js
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+class Deprecation extends Error {
+  constructor(message) {
+    super(message); // Maintains proper stack trace (only available on V8)
+
+    /* istanbul ignore next */
+
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, this.constructor);
+    }
+
+    this.name = 'Deprecation';
+  }
+
+}
+
+exports.Deprecation = Deprecation;
diff --git a/setup-maven/node_modules/deprecation/dist-src/index.js b/setup-maven/node_modules/deprecation/dist-src/index.js
new file mode 100644
index 0000000..7950fdc
--- /dev/null
+++ b/setup-maven/node_modules/deprecation/dist-src/index.js
@@ -0,0 +1,14 @@
+export class Deprecation extends Error {
+  constructor(message) {
+    super(message); // Maintains proper stack trace (only available on V8)
+
+    /* istanbul ignore next */
+
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, this.constructor);
+    }
+
+    this.name = 'Deprecation';
+  }
+
+}
\ No newline at end of file
diff --git a/setup-maven/node_modules/deprecation/dist-types/index.d.ts b/setup-maven/node_modules/deprecation/dist-types/index.d.ts
new file mode 100644
index 0000000..e3ae7ad
--- /dev/null
+++ b/setup-maven/node_modules/deprecation/dist-types/index.d.ts
@@ -0,0 +1,3 @@
+export class Deprecation extends Error {
+  name: "Deprecation";
+}
diff --git a/setup-maven/node_modules/deprecation/dist-web/index.js b/setup-maven/node_modules/deprecation/dist-web/index.js
new file mode 100644
index 0000000..c6bbda7
--- /dev/null
+++ b/setup-maven/node_modules/deprecation/dist-web/index.js
@@ -0,0 +1,16 @@
+class Deprecation extends Error {
+  constructor(message) {
+    super(message); // Maintains proper stack trace (only available on V8)
+
+    /* istanbul ignore next */
+
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, this.constructor);
+    }
+
+    this.name = 'Deprecation';
+  }
+
+}
+
+export { Deprecation };
diff --git a/setup-maven/node_modules/deprecation/package.json b/setup-maven/node_modules/deprecation/package.json
new file mode 100644
index 0000000..1cf007c
--- /dev/null
+++ b/setup-maven/node_modules/deprecation/package.json
@@ -0,0 +1,65 @@
+{
+  "_from": "deprecation@^2.0.0",
+  "_id": "deprecation@2.3.1",
+  "_inBundle": false,
+  "_integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
+  "_location": "/deprecation",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "deprecation@^2.0.0",
+    "name": "deprecation",
+    "escapedName": "deprecation",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/request",
+    "/@octokit/request-error",
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+  "_shasum": "6368cbdb40abf3373b525ac87e4a260c3a700919",
+  "_spec": "deprecation@^2.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "bugs": {
+    "url": "https://github.com/gr2m/deprecation/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Log a deprecation message with stack",
+  "devDependencies": {
+    "@pika/pack": "^0.3.7",
+    "@pika/plugin-build-node": "^0.4.0",
+    "@pika/plugin-build-types": "^0.4.0",
+    "@pika/plugin-build-web": "^0.4.0",
+    "@pika/plugin-standard-pkg": "^0.4.0",
+    "semantic-release": "^15.13.3"
+  },
+  "esnext": "dist-src/index.js",
+  "files": [
+    "dist-*/",
+    "bin/"
+  ],
+  "homepage": "https://github.com/gr2m/deprecation#readme",
+  "keywords": [
+    "deprecate",
+    "deprecated",
+    "deprecation"
+  ],
+  "license": "ISC",
+  "main": "dist-node/index.js",
+  "module": "dist-web/index.js",
+  "name": "deprecation",
+  "pika": true,
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gr2m/deprecation.git"
+  },
+  "sideEffects": false,
+  "types": "dist-types/index.d.ts",
+  "version": "2.3.1"
+}
diff --git a/setup-maven/node_modules/end-of-stream/LICENSE b/setup-maven/node_modules/end-of-stream/LICENSE
new file mode 100644
index 0000000..757562e
--- /dev/null
+++ b/setup-maven/node_modules/end-of-stream/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+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.
\ No newline at end of file
diff --git a/setup-maven/node_modules/end-of-stream/README.md b/setup-maven/node_modules/end-of-stream/README.md
new file mode 100644
index 0000000..857b14b
--- /dev/null
+++ b/setup-maven/node_modules/end-of-stream/README.md
@@ -0,0 +1,54 @@
+# end-of-stream
+
+A node module that calls a callback when a readable/writable/duplex stream has completed or failed.
+
+	npm install end-of-stream
+
+[![Build status](https://travis-ci.org/mafintosh/end-of-stream.svg?branch=master)](https://travis-ci.org/mafintosh/end-of-stream)
+
+## Usage
+
+Simply pass a stream and a callback to the `eos`.
+Both legacy streams, streams2 and stream3 are supported.
+
+``` js
+var eos = require('end-of-stream');
+
+eos(readableStream, function(err) {
+  // this will be set to the stream instance
+	if (err) return console.log('stream had an error or closed early');
+	console.log('stream has ended', this === readableStream);
+});
+
+eos(writableStream, function(err) {
+	if (err) return console.log('stream had an error or closed early');
+	console.log('stream has finished', this === writableStream);
+});
+
+eos(duplexStream, function(err) {
+	if (err) return console.log('stream had an error or closed early');
+	console.log('stream has ended and finished', this === duplexStream);
+});
+
+eos(duplexStream, {readable:false}, function(err) {
+	if (err) return console.log('stream had an error or closed early');
+	console.log('stream has finished but might still be readable');
+});
+
+eos(duplexStream, {writable:false}, function(err) {
+	if (err) return console.log('stream had an error or closed early');
+	console.log('stream has ended but might still be writable');
+});
+
+eos(readableStream, {error:false}, function(err) {
+	// do not treat emit('error', err) as a end-of-stream
+});
+```
+
+## License
+
+MIT
+
+## Related
+
+`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
diff --git a/setup-maven/node_modules/end-of-stream/index.js b/setup-maven/node_modules/end-of-stream/index.js
new file mode 100644
index 0000000..c77f0d5
--- /dev/null
+++ b/setup-maven/node_modules/end-of-stream/index.js
@@ -0,0 +1,94 @@
+var once = require('once');
+
+var noop = function() {};
+
+var isRequest = function(stream) {
+	return stream.setHeader && typeof stream.abort === 'function';
+};
+
+var isChildProcess = function(stream) {
+	return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
+};
+
+var eos = function(stream, opts, callback) {
+	if (typeof opts === 'function') return eos(stream, null, opts);
+	if (!opts) opts = {};
+
+	callback = once(callback || noop);
+
+	var ws = stream._writableState;
+	var rs = stream._readableState;
+	var readable = opts.readable || (opts.readable !== false && stream.readable);
+	var writable = opts.writable || (opts.writable !== false && stream.writable);
+	var cancelled = false;
+
+	var onlegacyfinish = function() {
+		if (!stream.writable) onfinish();
+	};
+
+	var onfinish = function() {
+		writable = false;
+		if (!readable) callback.call(stream);
+	};
+
+	var onend = function() {
+		readable = false;
+		if (!writable) callback.call(stream);
+	};
+
+	var onexit = function(exitCode) {
+		callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
+	};
+
+	var onerror = function(err) {
+		callback.call(stream, err);
+	};
+
+	var onclose = function() {
+		process.nextTick(onclosenexttick);
+	};
+
+	var onclosenexttick = function() {
+		if (cancelled) return;
+		if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));
+		if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));
+	};
+
+	var onrequest = function() {
+		stream.req.on('finish', onfinish);
+	};
+
+	if (isRequest(stream)) {
+		stream.on('complete', onfinish);
+		stream.on('abort', onclose);
+		if (stream.req) onrequest();
+		else stream.on('request', onrequest);
+	} else if (writable && !ws) { // legacy streams
+		stream.on('end', onlegacyfinish);
+		stream.on('close', onlegacyfinish);
+	}
+
+	if (isChildProcess(stream)) stream.on('exit', onexit);
+
+	stream.on('end', onend);
+	stream.on('finish', onfinish);
+	if (opts.error !== false) stream.on('error', onerror);
+	stream.on('close', onclose);
+
+	return function() {
+		cancelled = true;
+		stream.removeListener('complete', onfinish);
+		stream.removeListener('abort', onclose);
+		stream.removeListener('request', onrequest);
+		if (stream.req) stream.req.removeListener('finish', onfinish);
+		stream.removeListener('end', onlegacyfinish);
+		stream.removeListener('close', onlegacyfinish);
+		stream.removeListener('finish', onfinish);
+		stream.removeListener('exit', onexit);
+		stream.removeListener('end', onend);
+		stream.removeListener('error', onerror);
+		stream.removeListener('close', onclose);
+	};
+};
+
+module.exports = eos;
diff --git a/setup-maven/node_modules/end-of-stream/package.json b/setup-maven/node_modules/end-of-stream/package.json
new file mode 100644
index 0000000..a60e969
--- /dev/null
+++ b/setup-maven/node_modules/end-of-stream/package.json
@@ -0,0 +1,65 @@
+{
+  "_from": "end-of-stream@^1.1.0",
+  "_id": "end-of-stream@1.4.4",
+  "_inBundle": false,
+  "_integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+  "_location": "/end-of-stream",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "end-of-stream@^1.1.0",
+    "name": "end-of-stream",
+    "escapedName": "end-of-stream",
+    "rawSpec": "^1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.0"
+  },
+  "_requiredBy": [
+    "/pump"
+  ],
+  "_resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+  "_shasum": "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0",
+  "_spec": "end-of-stream@^1.1.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/pump",
+  "author": {
+    "name": "Mathias Buus",
+    "email": "mathiasbuus@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/mafintosh/end-of-stream/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "once": "^1.4.0"
+  },
+  "deprecated": false,
+  "description": "Call a callback when a readable/writable/duplex stream has completed or failed.",
+  "devDependencies": {
+    "tape": "^4.11.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/mafintosh/end-of-stream",
+  "keywords": [
+    "stream",
+    "streams",
+    "callback",
+    "finish",
+    "close",
+    "end",
+    "wait"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "end-of-stream",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/mafintosh/end-of-stream.git"
+  },
+  "scripts": {
+    "test": "node test.js"
+  },
+  "version": "1.4.4"
+}
diff --git a/setup-maven/node_modules/execa/index.js b/setup-maven/node_modules/execa/index.js
new file mode 100644
index 0000000..aad9ac8
--- /dev/null
+++ b/setup-maven/node_modules/execa/index.js
@@ -0,0 +1,361 @@
+'use strict';
+const path = require('path');
+const childProcess = require('child_process');
+const crossSpawn = require('cross-spawn');
+const stripEof = require('strip-eof');
+const npmRunPath = require('npm-run-path');
+const isStream = require('is-stream');
+const _getStream = require('get-stream');
+const pFinally = require('p-finally');
+const onExit = require('signal-exit');
+const errname = require('./lib/errname');
+const stdio = require('./lib/stdio');
+
+const TEN_MEGABYTES = 1000 * 1000 * 10;
+
+function handleArgs(cmd, args, opts) {
+	let parsed;
+
+	opts = Object.assign({
+		extendEnv: true,
+		env: {}
+	}, opts);
+
+	if (opts.extendEnv) {
+		opts.env = Object.assign({}, process.env, opts.env);
+	}
+
+	if (opts.__winShell === true) {
+		delete opts.__winShell;
+		parsed = {
+			command: cmd,
+			args,
+			options: opts,
+			file: cmd,
+			original: {
+				cmd,
+				args
+			}
+		};
+	} else {
+		parsed = crossSpawn._parse(cmd, args, opts);
+	}
+
+	opts = Object.assign({
+		maxBuffer: TEN_MEGABYTES,
+		buffer: true,
+		stripEof: true,
+		preferLocal: true,
+		localDir: parsed.options.cwd || process.cwd(),
+		encoding: 'utf8',
+		reject: true,
+		cleanup: true
+	}, parsed.options);
+
+	opts.stdio = stdio(opts);
+
+	if (opts.preferLocal) {
+		opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir}));
+	}
+
+	if (opts.detached) {
+		// #115
+		opts.cleanup = false;
+	}
+
+	if (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') {
+		// #116
+		parsed.args.unshift('/q');
+	}
+
+	return {
+		cmd: parsed.command,
+		args: parsed.args,
+		opts,
+		parsed
+	};
+}
+
+function handleInput(spawned, input) {
+	if (input === null || input === undefined) {
+		return;
+	}
+
+	if (isStream(input)) {
+		input.pipe(spawned.stdin);
+	} else {
+		spawned.stdin.end(input);
+	}
+}
+
+function handleOutput(opts, val) {
+	if (val && opts.stripEof) {
+		val = stripEof(val);
+	}
+
+	return val;
+}
+
+function handleShell(fn, cmd, opts) {
+	let file = '/bin/sh';
+	let args = ['-c', cmd];
+
+	opts = Object.assign({}, opts);
+
+	if (process.platform === 'win32') {
+		opts.__winShell = true;
+		file = process.env.comspec || 'cmd.exe';
+		args = ['/s', '/c', `"${cmd}"`];
+		opts.windowsVerbatimArguments = true;
+	}
+
+	if (opts.shell) {
+		file = opts.shell;
+		delete opts.shell;
+	}
+
+	return fn(file, args, opts);
+}
+
+function getStream(process, stream, {encoding, buffer, maxBuffer}) {
+	if (!process[stream]) {
+		return null;
+	}
+
+	let ret;
+
+	if (!buffer) {
+		// TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10
+		ret = new Promise((resolve, reject) => {
+			process[stream]
+				.once('end', resolve)
+				.once('error', reject);
+		});
+	} else if (encoding) {
+		ret = _getStream(process[stream], {
+			encoding,
+			maxBuffer
+		});
+	} else {
+		ret = _getStream.buffer(process[stream], {maxBuffer});
+	}
+
+	return ret.catch(err => {
+		err.stream = stream;
+		err.message = `${stream} ${err.message}`;
+		throw err;
+	});
+}
+
+function makeError(result, options) {
+	const {stdout, stderr} = result;
+
+	let err = result.error;
+	const {code, signal} = result;
+
+	const {parsed, joinedCmd} = options;
+	const timedOut = options.timedOut || false;
+
+	if (!err) {
+		let output = '';
+
+		if (Array.isArray(parsed.opts.stdio)) {
+			if (parsed.opts.stdio[2] !== 'inherit') {
+				output += output.length > 0 ? stderr : `\n${stderr}`;
+			}
+
+			if (parsed.opts.stdio[1] !== 'inherit') {
+				output += `\n${stdout}`;
+			}
+		} else if (parsed.opts.stdio !== 'inherit') {
+			output = `\n${stderr}${stdout}`;
+		}
+
+		err = new Error(`Command failed: ${joinedCmd}${output}`);
+		err.code = code < 0 ? errname(code) : code;
+	}
+
+	err.stdout = stdout;
+	err.stderr = stderr;
+	err.failed = true;
+	err.signal = signal || null;
+	err.cmd = joinedCmd;
+	err.timedOut = timedOut;
+
+	return err;
+}
+
+function joinCmd(cmd, args) {
+	let joinedCmd = cmd;
+
+	if (Array.isArray(args) && args.length > 0) {
+		joinedCmd += ' ' + args.join(' ');
+	}
+
+	return joinedCmd;
+}
+
+module.exports = (cmd, args, opts) => {
+	const parsed = handleArgs(cmd, args, opts);
+	const {encoding, buffer, maxBuffer} = parsed.opts;
+	const joinedCmd = joinCmd(cmd, args);
+
+	let spawned;
+	try {
+		spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts);
+	} catch (err) {
+		return Promise.reject(err);
+	}
+
+	let removeExitHandler;
+	if (parsed.opts.cleanup) {
+		removeExitHandler = onExit(() => {
+			spawned.kill();
+		});
+	}
+
+	let timeoutId = null;
+	let timedOut = false;
+
+	const cleanup = () => {
+		if (timeoutId) {
+			clearTimeout(timeoutId);
+			timeoutId = null;
+		}
+
+		if (removeExitHandler) {
+			removeExitHandler();
+		}
+	};
+
+	if (parsed.opts.timeout > 0) {
+		timeoutId = setTimeout(() => {
+			timeoutId = null;
+			timedOut = true;
+			spawned.kill(parsed.opts.killSignal);
+		}, parsed.opts.timeout);
+	}
+
+	const processDone = new Promise(resolve => {
+		spawned.on('exit', (code, signal) => {
+			cleanup();
+			resolve({code, signal});
+		});
+
+		spawned.on('error', err => {
+			cleanup();
+			resolve({error: err});
+		});
+
+		if (spawned.stdin) {
+			spawned.stdin.on('error', err => {
+				cleanup();
+				resolve({error: err});
+			});
+		}
+	});
+
+	function destroy() {
+		if (spawned.stdout) {
+			spawned.stdout.destroy();
+		}
+
+		if (spawned.stderr) {
+			spawned.stderr.destroy();
+		}
+	}
+
+	const handlePromise = () => pFinally(Promise.all([
+		processDone,
+		getStream(spawned, 'stdout', {encoding, buffer, maxBuffer}),
+		getStream(spawned, 'stderr', {encoding, buffer, maxBuffer})
+	]).then(arr => {
+		const result = arr[0];
+		result.stdout = arr[1];
+		result.stderr = arr[2];
+
+		if (result.error || result.code !== 0 || result.signal !== null) {
+			const err = makeError(result, {
+				joinedCmd,
+				parsed,
+				timedOut
+			});
+
+			// TODO: missing some timeout logic for killed
+			// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203
+			// err.killed = spawned.killed || killed;
+			err.killed = err.killed || spawned.killed;
+
+			if (!parsed.opts.reject) {
+				return err;
+			}
+
+			throw err;
+		}
+
+		return {
+			stdout: handleOutput(parsed.opts, result.stdout),
+			stderr: handleOutput(parsed.opts, result.stderr),
+			code: 0,
+			failed: false,
+			killed: false,
+			signal: null,
+			cmd: joinedCmd,
+			timedOut: false
+		};
+	}), destroy);
+
+	crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed);
+
+	handleInput(spawned, parsed.opts.input);
+
+	spawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected);
+	spawned.catch = onrejected => handlePromise().catch(onrejected);
+
+	return spawned;
+};
+
+// TODO: set `stderr: 'ignore'` when that option is implemented
+module.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout);
+
+// TODO: set `stdout: 'ignore'` when that option is implemented
+module.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr);
+
+module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);
+
+module.exports.sync = (cmd, args, opts) => {
+	const parsed = handleArgs(cmd, args, opts);
+	const joinedCmd = joinCmd(cmd, args);
+
+	if (isStream(parsed.opts.input)) {
+		throw new TypeError('The `input` option cannot be a stream in sync mode');
+	}
+
+	const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);
+	result.code = result.status;
+
+	if (result.error || result.status !== 0 || result.signal !== null) {
+		const err = makeError(result, {
+			joinedCmd,
+			parsed
+		});
+
+		if (!parsed.opts.reject) {
+			return err;
+		}
+
+		throw err;
+	}
+
+	return {
+		stdout: handleOutput(parsed.opts, result.stdout),
+		stderr: handleOutput(parsed.opts, result.stderr),
+		code: 0,
+		failed: false,
+		signal: null,
+		cmd: joinedCmd,
+		timedOut: false
+	};
+};
+
+module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);
diff --git a/setup-maven/node_modules/execa/lib/errname.js b/setup-maven/node_modules/execa/lib/errname.js
new file mode 100644
index 0000000..e367837
--- /dev/null
+++ b/setup-maven/node_modules/execa/lib/errname.js
@@ -0,0 +1,39 @@
+'use strict';
+// Older verions of Node.js might not have `util.getSystemErrorName()`.
+// In that case, fall back to a deprecated internal.
+const util = require('util');
+
+let uv;
+
+if (typeof util.getSystemErrorName === 'function') {
+	module.exports = util.getSystemErrorName;
+} else {
+	try {
+		uv = process.binding('uv');
+
+		if (typeof uv.errname !== 'function') {
+			throw new TypeError('uv.errname is not a function');
+		}
+	} catch (err) {
+		console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
+		uv = null;
+	}
+
+	module.exports = code => errname(uv, code);
+}
+
+// Used for testing the fallback behavior
+module.exports.__test__ = errname;
+
+function errname(uv, code) {
+	if (uv) {
+		return uv.errname(code);
+	}
+
+	if (!(code < 0)) {
+		throw new Error('err >= 0');
+	}
+
+	return `Unknown system error ${code}`;
+}
+
diff --git a/setup-maven/node_modules/execa/lib/stdio.js b/setup-maven/node_modules/execa/lib/stdio.js
new file mode 100644
index 0000000..a82d468
--- /dev/null
+++ b/setup-maven/node_modules/execa/lib/stdio.js
@@ -0,0 +1,41 @@
+'use strict';
+const alias = ['stdin', 'stdout', 'stderr'];
+
+const hasAlias = opts => alias.some(x => Boolean(opts[x]));
+
+module.exports = opts => {
+	if (!opts) {
+		return null;
+	}
+
+	if (opts.stdio && hasAlias(opts)) {
+		throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`);
+	}
+
+	if (typeof opts.stdio === 'string') {
+		return opts.stdio;
+	}
+
+	const stdio = opts.stdio || [];
+
+	if (!Array.isArray(stdio)) {
+		throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
+	}
+
+	const result = [];
+	const len = Math.max(stdio.length, alias.length);
+
+	for (let i = 0; i < len; i++) {
+		let value = null;
+
+		if (stdio[i] !== undefined) {
+			value = stdio[i];
+		} else if (opts[alias[i]] !== undefined) {
+			value = opts[alias[i]];
+		}
+
+		result[i] = value;
+	}
+
+	return result;
+};
diff --git a/setup-maven/node_modules/execa/license b/setup-maven/node_modules/execa/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/setup-maven/node_modules/execa/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/execa/package.json b/setup-maven/node_modules/execa/package.json
new file mode 100644
index 0000000..c538a70
--- /dev/null
+++ b/setup-maven/node_modules/execa/package.json
@@ -0,0 +1,102 @@
+{
+  "_from": "execa@^1.0.0",
+  "_id": "execa@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+  "_location": "/execa",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "execa@^1.0.0",
+    "name": "execa",
+    "escapedName": "execa",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/husky",
+    "/windows-release"
+  ],
+  "_resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+  "_shasum": "c6236a5bb4df6d6f15e88e7f017798216749ddd8",
+  "_spec": "execa@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/windows-release",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/execa/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "cross-spawn": "^6.0.0",
+    "get-stream": "^4.0.0",
+    "is-stream": "^1.1.0",
+    "npm-run-path": "^2.0.0",
+    "p-finally": "^1.0.0",
+    "signal-exit": "^3.0.0",
+    "strip-eof": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "A better `child_process`",
+  "devDependencies": {
+    "ava": "*",
+    "cat-names": "^1.0.2",
+    "coveralls": "^3.0.1",
+    "delay": "^3.0.0",
+    "is-running": "^2.0.0",
+    "nyc": "^13.0.1",
+    "tempfile": "^2.0.0",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "lib"
+  ],
+  "homepage": "https://github.com/sindresorhus/execa#readme",
+  "keywords": [
+    "exec",
+    "child",
+    "process",
+    "execute",
+    "fork",
+    "execfile",
+    "spawn",
+    "file",
+    "shell",
+    "bin",
+    "binary",
+    "binaries",
+    "npm",
+    "path",
+    "local"
+  ],
+  "license": "MIT",
+  "name": "execa",
+  "nyc": {
+    "reporter": [
+      "text",
+      "lcov"
+    ],
+    "exclude": [
+      "**/fixtures/**",
+      "**/test.js",
+      "**/test/**"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/execa.git"
+  },
+  "scripts": {
+    "test": "xo && nyc ava"
+  },
+  "version": "1.0.0"
+}
diff --git a/setup-maven/node_modules/execa/readme.md b/setup-maven/node_modules/execa/readme.md
new file mode 100644
index 0000000..f3f533d
--- /dev/null
+++ b/setup-maven/node_modules/execa/readme.md
@@ -0,0 +1,327 @@
+# execa [![Build Status: Linux](https://travis-ci.org/sindresorhus/execa.svg?branch=master)](https://travis-ci.org/sindresorhus/execa) [![Build status: Windows](https://ci.appveyor.com/api/projects/status/x5ajamxtjtt93cqv/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/execa/branch/master) [![Coverage Status](https://coveralls.io/repos/github/sindresorhus/execa/badge.svg?branch=master)](https://coveralls.io/github/sindresorhus/execa?branch=master)
+
+> A better [`child_process`](https://nodejs.org/api/child_process.html)
+
+
+## Why
+
+- Promise interface.
+- [Strips EOF](https://github.com/sindresorhus/strip-eof) from the output so you don't have to `stdout.trim()`.
+- Supports [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) binaries cross-platform.
+- [Improved Windows support.](https://github.com/IndigoUnited/node-cross-spawn#why)
+- Higher max buffer. 10 MB instead of 200 KB.
+- [Executes locally installed binaries by name.](#preferlocal)
+- [Cleans up spawned processes when the parent process dies.](#cleanup)
+
+
+## Install
+
+```
+$ npm install execa
+```
+
+<a href="https://www.patreon.com/sindresorhus">
+	<img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" width="160">
+</a>
+
+
+## Usage
+
+```js
+const execa = require('execa');
+
+(async () => {
+	const {stdout} = await execa('echo', ['unicorns']);
+	console.log(stdout);
+	//=> 'unicorns'
+})();
+```
+
+Additional examples:
+
+```js
+const execa = require('execa');
+
+(async () => {
+	// Pipe the child process stdout to the current stdout
+	execa('echo', ['unicorns']).stdout.pipe(process.stdout);
+
+
+	// Run a shell command
+	const {stdout} = await execa.shell('echo unicorns');
+	//=> 'unicorns'
+
+
+	// Catching an error
+	try {
+		await execa.shell('exit 3');
+	} catch (error) {
+		console.log(error);
+		/*
+		{
+			message: 'Command failed: /bin/sh -c exit 3'
+			killed: false,
+			code: 3,
+			signal: null,
+			cmd: '/bin/sh -c exit 3',
+			stdout: '',
+			stderr: '',
+			timedOut: false
+		}
+		*/
+	}
+})();
+
+// Catching an error with a sync method
+try {
+	execa.shellSync('exit 3');
+} catch (error) {
+	console.log(error);
+	/*
+	{
+		message: 'Command failed: /bin/sh -c exit 3'
+		code: 3,
+		signal: null,
+		cmd: '/bin/sh -c exit 3',
+		stdout: '',
+		stderr: '',
+		timedOut: false
+	}
+	*/
+}
+```
+
+
+## API
+
+### execa(file, [arguments], [options])
+
+Execute a file.
+
+Think of this as a mix of `child_process.execFile` and `child_process.spawn`.
+
+Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess), which is enhanced to also be a `Promise` for a result `Object` with `stdout` and `stderr` properties.
+
+### execa.stdout(file, [arguments], [options])
+
+Same as `execa()`, but returns only `stdout`.
+
+### execa.stderr(file, [arguments], [options])
+
+Same as `execa()`, but returns only `stderr`.
+
+### execa.shell(command, [options])
+
+Execute a command through the system shell. Prefer `execa()` whenever possible, as it's both faster and safer.
+
+Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess).
+
+The `child_process` instance is enhanced to also be promise for a result object with `stdout` and `stderr` properties.
+
+### execa.sync(file, [arguments], [options])
+
+Execute a file synchronously.
+
+Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options).
+
+This method throws an `Error` if the command fails.
+
+### execa.shellSync(file, [options])
+
+Execute a command synchronously through the system shell.
+
+Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options).
+
+### options
+
+Type: `Object`
+
+#### cwd
+
+Type: `string`<br>
+Default: `process.cwd()`
+
+Current working directory of the child process.
+
+#### env
+
+Type: `Object`<br>
+Default: `process.env`
+
+Environment key-value pairs. Extends automatically from `process.env`. Set `extendEnv` to `false` if you don't want this.
+
+#### extendEnv
+
+Type: `boolean`<br>
+Default: `true`
+
+Set to `false` if you don't want to extend the environment variables when providing the `env` property.
+
+#### argv0
+
+Type: `string`
+
+Explicitly set the value of `argv[0]` sent to the child process. This will be set to `command` or `file` if not specified.
+
+#### stdio
+
+Type: `string[]` `string`<br>
+Default: `pipe`
+
+Child's [stdio](https://nodejs.org/api/child_process.html#child_process_options_stdio) configuration.
+
+#### detached
+
+Type: `boolean`
+
+Prepare child to run independently of its parent process. Specific behavior [depends on the platform](https://nodejs.org/api/child_process.html#child_process_options_detached).
+
+#### uid
+
+Type: `number`
+
+Sets the user identity of the process.
+
+#### gid
+
+Type: `number`
+
+Sets the group identity of the process.
+
+#### shell
+
+Type: `boolean` `string`<br>
+Default: `false`
+
+If `true`, runs `command` inside of a shell. Uses `/bin/sh` on UNIX and `cmd.exe` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX or `/d /s /c` on Windows.
+
+#### stripEof
+
+Type: `boolean`<br>
+Default: `true`
+
+[Strip EOF](https://github.com/sindresorhus/strip-eof) (last newline) from the output.
+
+#### preferLocal
+
+Type: `boolean`<br>
+Default: `true`
+
+Prefer locally installed binaries when looking for a binary to execute.<br>
+If you `$ npm install foo`, you can then `execa('foo')`.
+
+#### localDir
+
+Type: `string`<br>
+Default: `process.cwd()`
+
+Preferred path to find locally installed binaries in (use with `preferLocal`).
+
+#### input
+
+Type: `string` `Buffer` `stream.Readable`
+
+Write some input to the `stdin` of your binary.<br>
+Streams are not allowed when using the synchronous methods.
+
+#### reject
+
+Type: `boolean`<br>
+Default: `true`
+
+Setting this to `false` resolves the promise with the error instead of rejecting it.
+
+#### cleanup
+
+Type: `boolean`<br>
+Default: `true`
+
+Keep track of the spawned process and `kill` it when the parent process exits.
+
+#### encoding
+
+Type: `string`<br>
+Default: `utf8`
+
+Specify the character encoding used to decode the `stdout` and `stderr` output.
+
+#### timeout
+
+Type: `number`<br>
+Default: `0`
+
+If timeout is greater than `0`, the parent will send the signal identified by the `killSignal` property (the default is `SIGTERM`) if the child runs longer than timeout milliseconds.
+
+#### buffer
+
+Type: `boolean`<br>
+Default: `true`
+
+Buffer the output from the spawned process. When buffering is disabled you must consume the output of the `stdout` and `stderr` streams because the promise will not be resolved/rejected until they have completed.
+
+#### maxBuffer
+
+Type: `number`<br>
+Default: `10000000` (10MB)
+
+Largest amount of data in bytes allowed on `stdout` or `stderr`.
+
+#### killSignal
+
+Type: `string` `number`<br>
+Default: `SIGTERM`
+
+Signal value to be used when the spawned process will be killed.
+
+#### stdin
+
+Type: `string` `number` `Stream` `undefined` `null`<br>
+Default: `pipe`
+
+Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).
+
+#### stdout
+
+Type: `string` `number` `Stream` `undefined` `null`<br>
+Default: `pipe`
+
+Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).
+
+#### stderr
+
+Type: `string` `number` `Stream` `undefined` `null`<br>
+Default: `pipe`
+
+Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).
+
+#### windowsVerbatimArguments
+
+Type: `boolean`<br>
+Default: `false`
+
+If `true`, no quoting or escaping of arguments is done on Windows. Ignored on other platforms. This is set to `true` automatically when the `shell` option is `true`.
+
+
+## Tips
+
+### Save and pipe output from a child process
+
+Let's say you want to show the output of a child process in real-time while also saving it to a variable.
+
+```js
+const execa = require('execa');
+const getStream = require('get-stream');
+
+const stream = execa('echo', ['foo']).stdout;
+
+stream.pipe(process.stdout);
+
+getStream(stream).then(value => {
+	console.log('child output:', value);
+});
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/get-stream/buffer-stream.js b/setup-maven/node_modules/get-stream/buffer-stream.js
new file mode 100644
index 0000000..4121c8e
--- /dev/null
+++ b/setup-maven/node_modules/get-stream/buffer-stream.js
@@ -0,0 +1,51 @@
+'use strict';
+const {PassThrough} = require('stream');
+
+module.exports = options => {
+	options = Object.assign({}, options);
+
+	const {array} = options;
+	let {encoding} = options;
+	const buffer = encoding === 'buffer';
+	let objectMode = false;
+
+	if (array) {
+		objectMode = !(encoding || buffer);
+	} else {
+		encoding = encoding || 'utf8';
+	}
+
+	if (buffer) {
+		encoding = null;
+	}
+
+	let len = 0;
+	const ret = [];
+	const stream = new PassThrough({objectMode});
+
+	if (encoding) {
+		stream.setEncoding(encoding);
+	}
+
+	stream.on('data', chunk => {
+		ret.push(chunk);
+
+		if (objectMode) {
+			len = ret.length;
+		} else {
+			len += chunk.length;
+		}
+	});
+
+	stream.getBufferedValue = () => {
+		if (array) {
+			return ret;
+		}
+
+		return buffer ? Buffer.concat(ret, len) : ret.join('');
+	};
+
+	stream.getBufferedLength = () => len;
+
+	return stream;
+};
diff --git a/setup-maven/node_modules/get-stream/index.js b/setup-maven/node_modules/get-stream/index.js
new file mode 100644
index 0000000..7e5584a
--- /dev/null
+++ b/setup-maven/node_modules/get-stream/index.js
@@ -0,0 +1,50 @@
+'use strict';
+const pump = require('pump');
+const bufferStream = require('./buffer-stream');
+
+class MaxBufferError extends Error {
+	constructor() {
+		super('maxBuffer exceeded');
+		this.name = 'MaxBufferError';
+	}
+}
+
+function getStream(inputStream, options) {
+	if (!inputStream) {
+		return Promise.reject(new Error('Expected a stream'));
+	}
+
+	options = Object.assign({maxBuffer: Infinity}, options);
+
+	const {maxBuffer} = options;
+
+	let stream;
+	return new Promise((resolve, reject) => {
+		const rejectPromise = error => {
+			if (error) { // A null check
+				error.bufferedData = stream.getBufferedValue();
+			}
+			reject(error);
+		};
+
+		stream = pump(inputStream, bufferStream(options), error => {
+			if (error) {
+				rejectPromise(error);
+				return;
+			}
+
+			resolve();
+		});
+
+		stream.on('data', () => {
+			if (stream.getBufferedLength() > maxBuffer) {
+				rejectPromise(new MaxBufferError());
+			}
+		});
+	}).then(() => stream.getBufferedValue());
+}
+
+module.exports = getStream;
+module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'}));
+module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true}));
+module.exports.MaxBufferError = MaxBufferError;
diff --git a/setup-maven/node_modules/get-stream/license b/setup-maven/node_modules/get-stream/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/setup-maven/node_modules/get-stream/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/get-stream/package.json b/setup-maven/node_modules/get-stream/package.json
new file mode 100644
index 0000000..9a3f660
--- /dev/null
+++ b/setup-maven/node_modules/get-stream/package.json
@@ -0,0 +1,78 @@
+{
+  "_from": "get-stream@^4.0.0",
+  "_id": "get-stream@4.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+  "_location": "/get-stream",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "get-stream@^4.0.0",
+    "name": "get-stream",
+    "escapedName": "get-stream",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/execa"
+  ],
+  "_resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+  "_shasum": "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5",
+  "_spec": "get-stream@^4.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/execa",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/get-stream/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "pump": "^3.0.0"
+  },
+  "deprecated": false,
+  "description": "Get a stream as a string, buffer, or array",
+  "devDependencies": {
+    "ava": "*",
+    "into-stream": "^3.0.0",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "buffer-stream.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/get-stream#readme",
+  "keywords": [
+    "get",
+    "stream",
+    "promise",
+    "concat",
+    "string",
+    "text",
+    "buffer",
+    "read",
+    "data",
+    "consume",
+    "readable",
+    "readablestream",
+    "array",
+    "object"
+  ],
+  "license": "MIT",
+  "name": "get-stream",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/get-stream.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "4.1.0"
+}
diff --git a/setup-maven/node_modules/get-stream/readme.md b/setup-maven/node_modules/get-stream/readme.md
new file mode 100644
index 0000000..b87a4d3
--- /dev/null
+++ b/setup-maven/node_modules/get-stream/readme.md
@@ -0,0 +1,123 @@
+# get-stream [![Build Status](https://travis-ci.org/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/get-stream)
+
+> Get a stream as a string, buffer, or array
+
+
+## Install
+
+```
+$ npm install get-stream
+```
+
+
+## Usage
+
+```js
+const fs = require('fs');
+const getStream = require('get-stream');
+
+(async () => {
+	const stream = fs.createReadStream('unicorn.txt');
+
+	console.log(await getStream(stream));
+	/*
+	              ,,))))))));,
+	           __)))))))))))))),
+	\|/       -\(((((''''((((((((.
+	-*-==//////((''  .     `)))))),
+	/|\      ))| o    ;-.    '(((((                                  ,(,
+	         ( `|    /  )    ;))))'                               ,_))^;(~
+	            |   |   |   ,))((((_     _____------~~~-.        %,;(;(>';'~
+	            o_);   ;    )))(((` ~---~  `::           \      %%~~)(v;(`('~
+	                  ;    ''''````         `:       `:::|\,__,%%    );`'; ~
+	                 |   _                )     /      `:|`----'     `-'
+	           ______/\/~    |                 /        /
+	         /~;;.____/;;'  /          ___--,-(   `;;;/
+	        / //  _;______;'------~~~~~    /;;/\    /
+	       //  | |                        / ;   \;;,\
+	      (<_  | ;                      /',/-----'  _>
+	       \_| ||_                     //~;~~~~~~~~~
+	           `\_|                   (,~~
+	                                   \~\
+	                                    ~~
+	*/
+})();
+```
+
+
+## API
+
+The methods returns a promise that resolves when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode.
+
+### getStream(stream, [options])
+
+Get the `stream` as a string.
+
+#### options
+
+Type: `Object`
+
+##### encoding
+
+Type: `string`<br>
+Default: `utf8`
+
+[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream.
+
+##### maxBuffer
+
+Type: `number`<br>
+Default: `Infinity`
+
+Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected with a `getStream.MaxBufferError` error.
+
+### getStream.buffer(stream, [options])
+
+Get the `stream` as a buffer.
+
+It honors the `maxBuffer` option as above, but it refers to byte length rather than string length.
+
+### getStream.array(stream, [options])
+
+Get the `stream` as an array of values.
+
+It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen:
+
+- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes).
+
+- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array.
+
+- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array.
+
+
+## Errors
+
+If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error.
+
+```js
+(async () => {
+	try {
+		await getStream(streamThatErrorsAtTheEnd('unicorn'));
+	} catch (error) {
+		console.log(error.bufferedData);
+		//=> 'unicorn'
+	}
+})()
+```
+
+
+## FAQ
+
+### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)?
+
+This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package.
+
+
+## Related
+
+- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/is-plain-object/LICENSE b/setup-maven/node_modules/is-plain-object/LICENSE
new file mode 100644
index 0000000..3f2eca1
--- /dev/null
+++ b/setup-maven/node_modules/is-plain-object/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/setup-maven/node_modules/is-plain-object/README.md b/setup-maven/node_modules/is-plain-object/README.md
new file mode 100644
index 0000000..60b7b59
--- /dev/null
+++ b/setup-maven/node_modules/is-plain-object/README.md
@@ -0,0 +1,119 @@
+# is-plain-object [![NPM version](https://img.shields.io/npm/v/is-plain-object.svg?style=flat)](https://www.npmjs.com/package/is-plain-object) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![NPM total downloads](https://img.shields.io/npm/dt/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-plain-object.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-plain-object)
+
+> Returns true if an object was created by the `Object` constructor.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-plain-object
+```
+
+Use [isobject](https://github.com/jonschlinkert/isobject) if you only want to check if the value is an object and not an array or null.
+
+## Usage
+
+```js
+import isPlainObject from 'is-plain-object';
+```
+
+**true** when created by the `Object` constructor.
+
+```js
+isPlainObject(Object.create({}));
+//=> true
+isPlainObject(Object.create(Object.prototype));
+//=> true
+isPlainObject({foo: 'bar'});
+//=> true
+isPlainObject({});
+//=> true
+```
+
+**false** when not created by the `Object` constructor.
+
+```js
+isPlainObject(1);
+//=> false
+isPlainObject(['foo', 'bar']);
+//=> false
+isPlainObject([]);
+//=> false
+isPlainObject(new Foo);
+//=> false
+isPlainObject(null);
+//=> false
+isPlainObject(Object.create(null));
+//=> false
+```
+
+## About
+
+<details>
+<summary><strong>Contributing</strong></summary>
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+</details>
+
+<details>
+<summary><strong>Running Tests</strong></summary>
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+</details>
+
+<details>
+<summary><strong>Building docs</strong></summary>
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+</details>
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if a number or string value is a finite number. Useful for regex… [more](https://github.com/jonschlinkert/is-number) | [homepage](https://github.com/jonschlinkert/is-number "Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+
+### Contributors
+
+| **Commits** | **Contributor** |  
+| --- | --- |  
+| 19 | [jonschlinkert](https://github.com/jonschlinkert) |  
+| 6  | [TrySound](https://github.com/TrySound) |  
+| 6  | [stevenvachon](https://github.com/stevenvachon) |  
+| 3  | [onokumus](https://github.com/onokumus) |  
+| 1  | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |  
+
+### Author
+
+**Jon Schlinkert**
+
+* [GitHub Profile](https://github.com/jonschlinkert)
+* [Twitter Profile](https://twitter.com/jonschlinkert)
+* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)
+
+### License
+
+Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 28, 2019._
\ No newline at end of file
diff --git a/setup-maven/node_modules/is-plain-object/index.cjs.js b/setup-maven/node_modules/is-plain-object/index.cjs.js
new file mode 100644
index 0000000..d7dda95
--- /dev/null
+++ b/setup-maven/node_modules/is-plain-object/index.cjs.js
@@ -0,0 +1,48 @@
+'use strict';
+
+/*!
+ * isobject <https://github.com/jonschlinkert/isobject>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+function isObject(val) {
+  return val != null && typeof val === 'object' && Array.isArray(val) === false;
+}
+
+/*!
+ * is-plain-object <https://github.com/jonschlinkert/is-plain-object>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+function isObjectObject(o) {
+  return isObject(o) === true
+    && Object.prototype.toString.call(o) === '[object Object]';
+}
+
+function isPlainObject(o) {
+  var ctor,prot;
+
+  if (isObjectObject(o) === false) return false;
+
+  // If has modified constructor
+  ctor = o.constructor;
+  if (typeof ctor !== 'function') return false;
+
+  // If has modified prototype
+  prot = ctor.prototype;
+  if (isObjectObject(prot) === false) return false;
+
+  // If constructor does not have an Object-specific method
+  if (prot.hasOwnProperty('isPrototypeOf') === false) {
+    return false;
+  }
+
+  // Most likely a plain Object
+  return true;
+}
+
+module.exports = isPlainObject;
diff --git a/setup-maven/node_modules/is-plain-object/index.d.ts b/setup-maven/node_modules/is-plain-object/index.d.ts
new file mode 100644
index 0000000..fd131f0
--- /dev/null
+++ b/setup-maven/node_modules/is-plain-object/index.d.ts
@@ -0,0 +1,3 @@
+declare function isPlainObject(o: any): boolean;
+
+export default isPlainObject;
diff --git a/setup-maven/node_modules/is-plain-object/index.js b/setup-maven/node_modules/is-plain-object/index.js
new file mode 100644
index 0000000..565ce9e
--- /dev/null
+++ b/setup-maven/node_modules/is-plain-object/index.js
@@ -0,0 +1,35 @@
+/*!
+ * is-plain-object <https://github.com/jonschlinkert/is-plain-object>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+import isObject from 'isobject';
+
+function isObjectObject(o) {
+  return isObject(o) === true
+    && Object.prototype.toString.call(o) === '[object Object]';
+}
+
+export default function isPlainObject(o) {
+  var ctor,prot;
+
+  if (isObjectObject(o) === false) return false;
+
+  // If has modified constructor
+  ctor = o.constructor;
+  if (typeof ctor !== 'function') return false;
+
+  // If has modified prototype
+  prot = ctor.prototype;
+  if (isObjectObject(prot) === false) return false;
+
+  // If constructor does not have an Object-specific method
+  if (prot.hasOwnProperty('isPrototypeOf') === false) {
+    return false;
+  }
+
+  // Most likely a plain Object
+  return true;
+};
diff --git a/setup-maven/node_modules/is-plain-object/package.json b/setup-maven/node_modules/is-plain-object/package.json
new file mode 100644
index 0000000..45f716c
--- /dev/null
+++ b/setup-maven/node_modules/is-plain-object/package.json
@@ -0,0 +1,125 @@
+{
+  "_from": "is-plain-object@^3.0.0",
+  "_id": "is-plain-object@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==",
+  "_location": "/is-plain-object",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "is-plain-object@^3.0.0",
+    "name": "is-plain-object",
+    "escapedName": "is-plain-object",
+    "rawSpec": "^3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.0"
+  },
+  "_requiredBy": [
+    "/@octokit/endpoint",
+    "/@octokit/request"
+  ],
+  "_resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz",
+  "_shasum": "47bfc5da1b5d50d64110806c199359482e75a928",
+  "_spec": "is-plain-object@^3.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/is-plain-object/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Jon Schlinkert",
+      "url": "http://twitter.com/jonschlinkert"
+    },
+    {
+      "name": "Osman Nuri Okumuş",
+      "url": "http://onokumus.com"
+    },
+    {
+      "name": "Steven Vachon",
+      "url": "https://svachon.com"
+    },
+    {
+      "url": "https://github.com/wtgtybhertgeghgtwtg"
+    }
+  ],
+  "dependencies": {
+    "isobject": "^4.0.0"
+  },
+  "deprecated": false,
+  "description": "Returns true if an object was created by the `Object` constructor.",
+  "devDependencies": {
+    "chai": "^4.2.0",
+    "esm": "^3.2.22",
+    "gulp-format-md": "^1.0.0",
+    "mocha": "^6.1.4",
+    "mocha-headless-chrome": "^2.0.2",
+    "rollup": "^1.10.1",
+    "rollup-plugin-node-resolve": "^4.2.3"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.d.ts",
+    "index.js",
+    "index.cjs.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/is-plain-object",
+  "keywords": [
+    "check",
+    "is",
+    "is-object",
+    "isobject",
+    "javascript",
+    "kind",
+    "kind-of",
+    "object",
+    "plain",
+    "type",
+    "typeof",
+    "value"
+  ],
+  "license": "MIT",
+  "main": "index.cjs.js",
+  "module": "index.js",
+  "name": "is-plain-object",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/is-plain-object.git"
+  },
+  "scripts": {
+    "build": "rollup -c",
+    "prepare": "rollup -c",
+    "test": "npm run test_node && npm run build && npm run test_browser",
+    "test_browser": "mocha-headless-chrome --args=disable-web-security -f test/browser.html",
+    "test_node": "mocha -r esm"
+  },
+  "types": "index.d.ts",
+  "verb": {
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "related": {
+      "list": [
+        "is-number",
+        "isobject",
+        "kind-of"
+      ]
+    },
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "3.0.0"
+}
diff --git a/setup-maven/node_modules/is-stream/index.js b/setup-maven/node_modules/is-stream/index.js
new file mode 100644
index 0000000..6f7ec91
--- /dev/null
+++ b/setup-maven/node_modules/is-stream/index.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var isStream = module.exports = function (stream) {
+	return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';
+};
+
+isStream.writable = function (stream) {
+	return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';
+};
+
+isStream.readable = function (stream) {
+	return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';
+};
+
+isStream.duplex = function (stream) {
+	return isStream.writable(stream) && isStream.readable(stream);
+};
+
+isStream.transform = function (stream) {
+	return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';
+};
diff --git a/setup-maven/node_modules/is-stream/license b/setup-maven/node_modules/is-stream/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/setup-maven/node_modules/is-stream/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/is-stream/package.json b/setup-maven/node_modules/is-stream/package.json
new file mode 100644
index 0000000..da4d0f8
--- /dev/null
+++ b/setup-maven/node_modules/is-stream/package.json
@@ -0,0 +1,70 @@
+{
+  "_from": "is-stream@^1.1.0",
+  "_id": "is-stream@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+  "_location": "/is-stream",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "is-stream@^1.1.0",
+    "name": "is-stream",
+    "escapedName": "is-stream",
+    "rawSpec": "^1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.0"
+  },
+  "_requiredBy": [
+    "/execa"
+  ],
+  "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+  "_shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44",
+  "_spec": "is-stream@^1.1.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/execa",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/is-stream/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Check if something is a Node.js stream",
+  "devDependencies": {
+    "ava": "*",
+    "tempfile": "^1.1.0",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/is-stream#readme",
+  "keywords": [
+    "stream",
+    "type",
+    "streams",
+    "writable",
+    "readable",
+    "duplex",
+    "transform",
+    "check",
+    "detect",
+    "is"
+  ],
+  "license": "MIT",
+  "name": "is-stream",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/is-stream.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "1.1.0"
+}
diff --git a/setup-maven/node_modules/is-stream/readme.md b/setup-maven/node_modules/is-stream/readme.md
new file mode 100644
index 0000000..d8afce8
--- /dev/null
+++ b/setup-maven/node_modules/is-stream/readme.md
@@ -0,0 +1,42 @@
+# is-stream [![Build Status](https://travis-ci.org/sindresorhus/is-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/is-stream)
+
+> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html)
+
+
+## Install
+
+```
+$ npm install --save is-stream
+```
+
+
+## Usage
+
+```js
+const fs = require('fs');
+const isStream = require('is-stream');
+
+isStream(fs.createReadStream('unicorn.png'));
+//=> true
+
+isStream({});
+//=> false
+```
+
+
+## API
+
+### isStream(stream)
+
+#### isStream.writable(stream)
+
+#### isStream.readable(stream)
+
+#### isStream.duplex(stream)
+
+#### isStream.transform(stream)
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/isexe/.npmignore b/setup-maven/node_modules/isexe/.npmignore
new file mode 100644
index 0000000..c1cb757
--- /dev/null
+++ b/setup-maven/node_modules/isexe/.npmignore
@@ -0,0 +1,2 @@
+.nyc_output/
+coverage/
diff --git a/setup-maven/node_modules/isexe/LICENSE b/setup-maven/node_modules/isexe/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/setup-maven/node_modules/isexe/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/isexe/README.md b/setup-maven/node_modules/isexe/README.md
new file mode 100644
index 0000000..35769e8
--- /dev/null
+++ b/setup-maven/node_modules/isexe/README.md
@@ -0,0 +1,51 @@
+# isexe
+
+Minimal module to check if a file is executable, and a normal file.
+
+Uses `fs.stat` and tests against the `PATHEXT` environment variable on
+Windows.
+
+## USAGE
+
+```javascript
+var isexe = require('isexe')
+isexe('some-file-name', function (err, isExe) {
+  if (err) {
+    console.error('probably file does not exist or something', err)
+  } else if (isExe) {
+    console.error('this thing can be run')
+  } else {
+    console.error('cannot be run')
+  }
+})
+
+// same thing but synchronous, throws errors
+var isExe = isexe.sync('some-file-name')
+
+// treat errors as just "not executable"
+isexe('maybe-missing-file', { ignoreErrors: true }, callback)
+var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true })
+```
+
+## API
+
+### `isexe(path, [options], [callback])`
+
+Check if the path is executable.  If no callback provided, and a
+global `Promise` object is available, then a Promise will be returned.
+
+Will raise whatever errors may be raised by `fs.stat`, unless
+`options.ignoreErrors` is set to true.
+
+### `isexe.sync(path, [options])`
+
+Same as `isexe` but returns the value and throws any errors raised.
+
+### Options
+
+* `ignoreErrors` Treat all errors as "no, this is not executable", but
+  don't raise them.
+* `uid` Number to use as the user id
+* `gid` Number to use as the group id
+* `pathExt` List of path extensions to use instead of `PATHEXT`
+  environment variable on Windows.
diff --git a/setup-maven/node_modules/isexe/index.js b/setup-maven/node_modules/isexe/index.js
new file mode 100644
index 0000000..553fb32
--- /dev/null
+++ b/setup-maven/node_modules/isexe/index.js
@@ -0,0 +1,57 @@
+var fs = require('fs')
+var core
+if (process.platform === 'win32' || global.TESTING_WINDOWS) {
+  core = require('./windows.js')
+} else {
+  core = require('./mode.js')
+}
+
+module.exports = isexe
+isexe.sync = sync
+
+function isexe (path, options, cb) {
+  if (typeof options === 'function') {
+    cb = options
+    options = {}
+  }
+
+  if (!cb) {
+    if (typeof Promise !== 'function') {
+      throw new TypeError('callback not provided')
+    }
+
+    return new Promise(function (resolve, reject) {
+      isexe(path, options || {}, function (er, is) {
+        if (er) {
+          reject(er)
+        } else {
+          resolve(is)
+        }
+      })
+    })
+  }
+
+  core(path, options || {}, function (er, is) {
+    // ignore EACCES because that just means we aren't allowed to run it
+    if (er) {
+      if (er.code === 'EACCES' || options && options.ignoreErrors) {
+        er = null
+        is = false
+      }
+    }
+    cb(er, is)
+  })
+}
+
+function sync (path, options) {
+  // my kingdom for a filtered catch
+  try {
+    return core.sync(path, options || {})
+  } catch (er) {
+    if (options && options.ignoreErrors || er.code === 'EACCES') {
+      return false
+    } else {
+      throw er
+    }
+  }
+}
diff --git a/setup-maven/node_modules/isexe/mode.js b/setup-maven/node_modules/isexe/mode.js
new file mode 100644
index 0000000..1995ea4
--- /dev/null
+++ b/setup-maven/node_modules/isexe/mode.js
@@ -0,0 +1,41 @@
+module.exports = isexe
+isexe.sync = sync
+
+var fs = require('fs')
+
+function isexe (path, options, cb) {
+  fs.stat(path, function (er, stat) {
+    cb(er, er ? false : checkStat(stat, options))
+  })
+}
+
+function sync (path, options) {
+  return checkStat(fs.statSync(path), options)
+}
+
+function checkStat (stat, options) {
+  return stat.isFile() && checkMode(stat, options)
+}
+
+function checkMode (stat, options) {
+  var mod = stat.mode
+  var uid = stat.uid
+  var gid = stat.gid
+
+  var myUid = options.uid !== undefined ?
+    options.uid : process.getuid && process.getuid()
+  var myGid = options.gid !== undefined ?
+    options.gid : process.getgid && process.getgid()
+
+  var u = parseInt('100', 8)
+  var g = parseInt('010', 8)
+  var o = parseInt('001', 8)
+  var ug = u | g
+
+  var ret = (mod & o) ||
+    (mod & g) && gid === myGid ||
+    (mod & u) && uid === myUid ||
+    (mod & ug) && myUid === 0
+
+  return ret
+}
diff --git a/setup-maven/node_modules/isexe/package.json b/setup-maven/node_modules/isexe/package.json
new file mode 100644
index 0000000..4788f40
--- /dev/null
+++ b/setup-maven/node_modules/isexe/package.json
@@ -0,0 +1,60 @@
+{
+  "_from": "isexe@^2.0.0",
+  "_id": "isexe@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+  "_location": "/isexe",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "isexe@^2.0.0",
+    "name": "isexe",
+    "escapedName": "isexe",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/which"
+  ],
+  "_resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+  "_shasum": "e8fbf374dc556ff8947a10dcb0572d633f2cfa10",
+  "_spec": "isexe@^2.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/which",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me/"
+  },
+  "bugs": {
+    "url": "https://github.com/isaacs/isexe/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Minimal module to check if a file is executable.",
+  "devDependencies": {
+    "mkdirp": "^0.5.1",
+    "rimraf": "^2.5.0",
+    "tap": "^10.3.0"
+  },
+  "directories": {
+    "test": "test"
+  },
+  "homepage": "https://github.com/isaacs/isexe#readme",
+  "keywords": [],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "isexe",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/isaacs/isexe.git"
+  },
+  "scripts": {
+    "postpublish": "git push origin --all; git push origin --tags",
+    "postversion": "npm publish",
+    "preversion": "npm test",
+    "test": "tap test/*.js --100"
+  },
+  "version": "2.0.0"
+}
diff --git a/setup-maven/node_modules/isexe/test/basic.js b/setup-maven/node_modules/isexe/test/basic.js
new file mode 100644
index 0000000..d926df6
--- /dev/null
+++ b/setup-maven/node_modules/isexe/test/basic.js
@@ -0,0 +1,221 @@
+var t = require('tap')
+var fs = require('fs')
+var path = require('path')
+var fixture = path.resolve(__dirname, 'fixtures')
+var meow = fixture + '/meow.cat'
+var mine = fixture + '/mine.cat'
+var ours = fixture + '/ours.cat'
+var fail = fixture + '/fail.false'
+var noent = fixture + '/enoent.exe'
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+
+var isWindows = process.platform === 'win32'
+var hasAccess = typeof fs.access === 'function'
+var winSkip = isWindows && 'windows'
+var accessSkip = !hasAccess && 'no fs.access function'
+var hasPromise = typeof Promise === 'function'
+var promiseSkip = !hasPromise && 'no global Promise'
+
+function reset () {
+  delete require.cache[require.resolve('../')]
+  return require('../')
+}
+
+t.test('setup fixtures', function (t) {
+  rimraf.sync(fixture)
+  mkdirp.sync(fixture)
+  fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n')
+  fs.chmodSync(meow, parseInt('0755', 8))
+  fs.writeFileSync(fail, '#!/usr/bin/env false\n')
+  fs.chmodSync(fail, parseInt('0644', 8))
+  fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n')
+  fs.chmodSync(mine, parseInt('0744', 8))
+  fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n')
+  fs.chmodSync(ours, parseInt('0754', 8))
+  t.end()
+})
+
+t.test('promise', { skip: promiseSkip }, function (t) {
+  var isexe = reset()
+  t.test('meow async', function (t) {
+    isexe(meow).then(function (is) {
+      t.ok(is)
+      t.end()
+    })
+  })
+  t.test('fail async', function (t) {
+    isexe(fail).then(function (is) {
+      t.notOk(is)
+      t.end()
+    })
+  })
+  t.test('noent async', function (t) {
+    isexe(noent).catch(function (er) {
+      t.ok(er)
+      t.end()
+    })
+  })
+  t.test('noent ignore async', function (t) {
+    isexe(noent, { ignoreErrors: true }).then(function (is) {
+      t.notOk(is)
+      t.end()
+    })
+  })
+  t.end()
+})
+
+t.test('no promise', function (t) {
+  global.Promise = null
+  var isexe = reset()
+  t.throws('try to meow a promise', function () {
+    isexe(meow)
+  })
+  t.end()
+})
+
+t.test('access', { skip: accessSkip || winSkip }, function (t) {
+  runTest(t)
+})
+
+t.test('mode', { skip: winSkip }, function (t) {
+  delete fs.access
+  delete fs.accessSync
+  var isexe = reset()
+  t.ok(isexe.sync(ours, { uid: 0, gid: 0 }))
+  t.ok(isexe.sync(mine, { uid: 0, gid: 0 }))
+  runTest(t)
+})
+
+t.test('windows', function (t) {
+  global.TESTING_WINDOWS = true
+  var pathExt = '.EXE;.CAT;.CMD;.COM'
+  t.test('pathExt option', function (t) {
+    runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' })
+  })
+  t.test('pathExt env', function (t) {
+    process.env.PATHEXT = pathExt
+    runTest(t)
+  })
+  t.test('no pathExt', function (t) {
+    // with a pathExt of '', any filename is fine.
+    // so the "fail" one would still pass.
+    runTest(t, { pathExt: '', skipFail: true })
+  })
+  t.test('pathext with empty entry', function (t) {
+    // with a pathExt of '', any filename is fine.
+    // so the "fail" one would still pass.
+    runTest(t, { pathExt: ';' + pathExt, skipFail: true })
+  })
+  t.end()
+})
+
+t.test('cleanup', function (t) {
+  rimraf.sync(fixture)
+  t.end()
+})
+
+function runTest (t, options) {
+  var isexe = reset()
+
+  var optionsIgnore = Object.create(options || {})
+  optionsIgnore.ignoreErrors = true
+
+  if (!options || !options.skipFail) {
+    t.notOk(isexe.sync(fail, options))
+  }
+  t.notOk(isexe.sync(noent, optionsIgnore))
+  if (!options) {
+    t.ok(isexe.sync(meow))
+  } else {
+    t.ok(isexe.sync(meow, options))
+  }
+
+  t.ok(isexe.sync(mine, options))
+  t.ok(isexe.sync(ours, options))
+  t.throws(function () {
+    isexe.sync(noent, options)
+  })
+
+  t.test('meow async', function (t) {
+    if (!options) {
+      isexe(meow, function (er, is) {
+        if (er) {
+          throw er
+        }
+        t.ok(is)
+        t.end()
+      })
+    } else {
+      isexe(meow, options, function (er, is) {
+        if (er) {
+          throw er
+        }
+        t.ok(is)
+        t.end()
+      })
+    }
+  })
+
+  t.test('mine async', function (t) {
+    isexe(mine, options, function (er, is) {
+      if (er) {
+        throw er
+      }
+      t.ok(is)
+      t.end()
+    })
+  })
+
+  t.test('ours async', function (t) {
+    isexe(ours, options, function (er, is) {
+      if (er) {
+        throw er
+      }
+      t.ok(is)
+      t.end()
+    })
+  })
+
+  if (!options || !options.skipFail) {
+    t.test('fail async', function (t) {
+      isexe(fail, options, function (er, is) {
+        if (er) {
+          throw er
+        }
+        t.notOk(is)
+        t.end()
+      })
+    })
+  }
+
+  t.test('noent async', function (t) {
+    isexe(noent, options, function (er, is) {
+      t.ok(er)
+      t.notOk(is)
+      t.end()
+    })
+  })
+
+  t.test('noent ignore async', function (t) {
+    isexe(noent, optionsIgnore, function (er, is) {
+      if (er) {
+        throw er
+      }
+      t.notOk(is)
+      t.end()
+    })
+  })
+
+  t.test('directory is not executable', function (t) {
+    isexe(__dirname, options, function (er, is) {
+      if (er) {
+        throw er
+      }
+      t.notOk(is)
+      t.end()
+    })
+  })
+
+  t.end()
+}
diff --git a/setup-maven/node_modules/isexe/windows.js b/setup-maven/node_modules/isexe/windows.js
new file mode 100644
index 0000000..3499673
--- /dev/null
+++ b/setup-maven/node_modules/isexe/windows.js
@@ -0,0 +1,42 @@
+module.exports = isexe
+isexe.sync = sync
+
+var fs = require('fs')
+
+function checkPathExt (path, options) {
+  var pathext = options.pathExt !== undefined ?
+    options.pathExt : process.env.PATHEXT
+
+  if (!pathext) {
+    return true
+  }
+
+  pathext = pathext.split(';')
+  if (pathext.indexOf('') !== -1) {
+    return true
+  }
+  for (var i = 0; i < pathext.length; i++) {
+    var p = pathext[i].toLowerCase()
+    if (p && path.substr(-p.length).toLowerCase() === p) {
+      return true
+    }
+  }
+  return false
+}
+
+function checkStat (stat, path, options) {
+  if (!stat.isSymbolicLink() && !stat.isFile()) {
+    return false
+  }
+  return checkPathExt(path, options)
+}
+
+function isexe (path, options, cb) {
+  fs.stat(path, function (er, stat) {
+    cb(er, er ? false : checkStat(stat, path, options))
+  })
+}
+
+function sync (path, options) {
+  return checkStat(fs.statSync(path), path, options)
+}
diff --git a/setup-maven/node_modules/isobject/LICENSE b/setup-maven/node_modules/isobject/LICENSE
new file mode 100644
index 0000000..943e71d
--- /dev/null
+++ b/setup-maven/node_modules/isobject/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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.
\ No newline at end of file
diff --git a/setup-maven/node_modules/isobject/README.md b/setup-maven/node_modules/isobject/README.md
new file mode 100644
index 0000000..1c6e21f
--- /dev/null
+++ b/setup-maven/node_modules/isobject/README.md
@@ -0,0 +1,127 @@
+# isobject [![NPM version](https://img.shields.io/npm/v/isobject.svg?style=flat)](https://www.npmjs.com/package/isobject) [![NPM monthly downloads](https://img.shields.io/npm/dm/isobject.svg?style=flat)](https://npmjs.org/package/isobject) [![NPM total downloads](https://img.shields.io/npm/dt/isobject.svg?style=flat)](https://npmjs.org/package/isobject) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/isobject.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/isobject)
+
+> Returns true if the value is an object and not an array or null.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save isobject
+```
+
+Use [is-plain-object](https://github.com/jonschlinkert/is-plain-object) if you want only objects that are created by the `Object` constructor.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install isobject
+```
+
+## Usage
+
+```js
+import isObject from 'isobject';
+```
+
+**True**
+
+All of the following return `true`:
+
+```js
+isObject({});
+isObject(Object.create({}));
+isObject(Object.create(Object.prototype));
+isObject(Object.create(null));
+isObject({});
+isObject(new Foo);
+isObject(/foo/);
+```
+
+**False**
+
+All of the following return `false`:
+
+```js
+isObject();
+isObject(function () {});
+isObject(1);
+isObject([]);
+isObject(undefined);
+isObject(null);
+```
+
+## About
+
+<details>
+<summary><strong>Contributing</strong></summary>
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+</details>
+
+<details>
+<summary><strong>Running Tests</strong></summary>
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+</details>
+
+<details>
+<summary><strong>Building docs</strong></summary>
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+</details>
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.")
+* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object "Returns true if an object was created by the `Object` constructor.")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep "Recursively merge values in a javascript object.")
+
+### Contributors
+
+| **Commits** | **Contributor** |  
+| --- | --- |  
+| 30 | [jonschlinkert](https://github.com/jonschlinkert) |  
+| 8  | [doowb](https://github.com/doowb) |  
+| 7  | [TrySound](https://github.com/TrySound) |  
+| 3  | [onokumus](https://github.com/onokumus) |  
+| 1  | [LeSuisse](https://github.com/LeSuisse) |  
+| 1  | [tmcw](https://github.com/tmcw) |  
+| 1  | [ZhouHansen](https://github.com/ZhouHansen) |  
+
+### Author
+
+**Jon Schlinkert**
+
+* [GitHub Profile](https://github.com/jonschlinkert)
+* [Twitter Profile](https://twitter.com/jonschlinkert)
+* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)
+
+### License
+
+Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 28, 2019._
\ No newline at end of file
diff --git a/setup-maven/node_modules/isobject/index.cjs.js b/setup-maven/node_modules/isobject/index.cjs.js
new file mode 100644
index 0000000..49debe7
--- /dev/null
+++ b/setup-maven/node_modules/isobject/index.cjs.js
@@ -0,0 +1,14 @@
+'use strict';
+
+/*!
+ * isobject <https://github.com/jonschlinkert/isobject>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+function isObject(val) {
+  return val != null && typeof val === 'object' && Array.isArray(val) === false;
+}
+
+module.exports = isObject;
diff --git a/setup-maven/node_modules/isobject/index.d.ts b/setup-maven/node_modules/isobject/index.d.ts
new file mode 100644
index 0000000..c471c71
--- /dev/null
+++ b/setup-maven/node_modules/isobject/index.d.ts
@@ -0,0 +1,3 @@
+declare function isObject(val: any): boolean;
+
+export default isObject;
diff --git a/setup-maven/node_modules/isobject/index.js b/setup-maven/node_modules/isobject/index.js
new file mode 100644
index 0000000..e9f0382
--- /dev/null
+++ b/setup-maven/node_modules/isobject/index.js
@@ -0,0 +1,10 @@
+/*!
+ * isobject <https://github.com/jonschlinkert/isobject>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+export default function isObject(val) {
+  return val != null && typeof val === 'object' && Array.isArray(val) === false;
+};
diff --git a/setup-maven/node_modules/isobject/package.json b/setup-maven/node_modules/isobject/package.json
new file mode 100644
index 0000000..b5da72e
--- /dev/null
+++ b/setup-maven/node_modules/isobject/package.json
@@ -0,0 +1,125 @@
+{
+  "_from": "isobject@^4.0.0",
+  "_id": "isobject@4.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
+  "_location": "/isobject",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "isobject@^4.0.0",
+    "name": "isobject",
+    "escapedName": "isobject",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/is-plain-object"
+  ],
+  "_resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
+  "_shasum": "3f1c9155e73b192022a80819bacd0343711697b0",
+  "_spec": "isobject@^4.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/is-plain-object",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/isobject/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "url": "https://github.com/LeSuisse"
+    },
+    {
+      "name": "Brian Woodward",
+      "url": "https://twitter.com/doowb"
+    },
+    {
+      "name": "Jon Schlinkert",
+      "url": "http://twitter.com/jonschlinkert"
+    },
+    {
+      "name": "Magnús Dæhlen",
+      "url": "https://github.com/magnudae"
+    },
+    {
+      "name": "Tom MacWright",
+      "url": "https://macwright.org"
+    }
+  ],
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Returns true if the value is an object and not an array or null.",
+  "devDependencies": {
+    "esm": "^3.2.22",
+    "gulp-format-md": "^0.1.9",
+    "mocha": "^2.4.5",
+    "rollup": "^1.10.1"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.d.ts",
+    "index.cjs.js",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/isobject",
+  "keywords": [
+    "check",
+    "is",
+    "is-object",
+    "isobject",
+    "kind",
+    "kind-of",
+    "kindof",
+    "native",
+    "object",
+    "type",
+    "typeof",
+    "value"
+  ],
+  "license": "MIT",
+  "main": "index.cjs.js",
+  "module": "index.js",
+  "name": "isobject",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/isobject.git"
+  },
+  "scripts": {
+    "build": "rollup -i index.js -o index.cjs.js -f cjs",
+    "prepublish": "npm run build",
+    "test": "mocha -r esm"
+  },
+  "types": "index.d.ts",
+  "verb": {
+    "related": {
+      "list": [
+        "extend-shallow",
+        "is-plain-object",
+        "kind-of",
+        "merge-deep"
+      ]
+    },
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "lint": {
+      "reflinks": true
+    },
+    "reflinks": [
+      "verb"
+    ]
+  },
+  "version": "4.0.0"
+}
diff --git a/setup-maven/node_modules/lodash.get/LICENSE b/setup-maven/node_modules/lodash.get/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/setup-maven/node_modules/lodash.get/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors <https://jquery.org/>
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/setup-maven/node_modules/lodash.get/README.md b/setup-maven/node_modules/lodash.get/README.md
new file mode 100644
index 0000000..9079614
--- /dev/null
+++ b/setup-maven/node_modules/lodash.get/README.md
@@ -0,0 +1,18 @@
+# lodash.get v4.4.2
+
+The [lodash](https://lodash.com/) method `_.get` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.get
+```
+
+In Node.js:
+```js
+var get = require('lodash.get');
+```
+
+See the [documentation](https://lodash.com/docs#get) or [package source](https://github.com/lodash/lodash/blob/4.4.2-npm-packages/lodash.get) for more details.
diff --git a/setup-maven/node_modules/lodash.get/index.js b/setup-maven/node_modules/lodash.get/index.js
new file mode 100644
index 0000000..0eaadec
--- /dev/null
+++ b/setup-maven/node_modules/lodash.get/index.js
@@ -0,0 +1,931 @@
+/**
+ * lodash (Custom Build) <https://lodash.com/>
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
+ * Released under MIT license <https://lodash.com/license>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+    genTag = '[object GeneratorFunction]',
+    symbolTag = '[object Symbol]';
+
+/** Used to match property names within property paths. */
+var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+    reIsPlainProp = /^\w*$/,
+    reLeadingDot = /^\./,
+    rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to match backslashes in property paths. */
+var reEscapeChar = /\\(\\)?/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+  return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+  // Many host objects are `Object` objects that can coerce to strings
+  // despite having improperly defined `toString` methods.
+  var result = false;
+  if (value != null && typeof value.toString != 'function') {
+    try {
+      result = !!(value + '');
+    } catch (e) {}
+  }
+  return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype,
+    funcProto = Function.prototype,
+    objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+  return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var Symbol = root.Symbol,
+    splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(root, 'Map'),
+    nativeCreate = getNative(Object, 'create');
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+    symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+  this.__data__ = nativeCreate ? nativeCreate(null) : {};
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+  return this.has(key) && delete this.__data__[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+  var data = this.__data__;
+  if (nativeCreate) {
+    var result = data[key];
+    return result === HASH_UNDEFINED ? undefined : result;
+  }
+  return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+  var data = this.__data__;
+  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+  var data = this.__data__;
+  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+  return this;
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+  this.__data__ = [];
+}
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  if (index < 0) {
+    return false;
+  }
+  var lastIndex = data.length - 1;
+  if (index == lastIndex) {
+    data.pop();
+  } else {
+    splice.call(data, index, 1);
+  }
+  return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+  return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  if (index < 0) {
+    data.push([key, value]);
+  } else {
+    data[index][1] = value;
+  }
+  return this;
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+  this.__data__ = {
+    'hash': new Hash,
+    'map': new (Map || ListCache),
+    'string': new Hash
+  };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+  return getMapData(this, key)['delete'](key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+  return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+  return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+  getMapData(this, key).set(key, value);
+  return this;
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+  var length = array.length;
+  while (length--) {
+    if (eq(array[length][0], key)) {
+      return length;
+    }
+  }
+  return -1;
+}
+
+/**
+ * The base implementation of `_.get` without support for default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @returns {*} Returns the resolved value.
+ */
+function baseGet(object, path) {
+  path = isKey(path, object) ? [path] : castPath(path);
+
+  var index = 0,
+      length = path.length;
+
+  while (object != null && index < length) {
+    object = object[toKey(path[index++])];
+  }
+  return (index && index == length) ? object : undefined;
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ *  else `false`.
+ */
+function baseIsNative(value) {
+  if (!isObject(value) || isMasked(value)) {
+    return false;
+  }
+  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+  return pattern.test(toSource(value));
+}
+
+/**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+  // Exit early for strings to avoid a performance hit in some environments.
+  if (typeof value == 'string') {
+    return value;
+  }
+  if (isSymbol(value)) {
+    return symbolToString ? symbolToString.call(value) : '';
+  }
+  var result = (value + '');
+  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Casts `value` to a path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array} Returns the cast property path array.
+ */
+function castPath(value) {
+  return isArray(value) ? value : stringToPath(value);
+}
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+  var data = map.__data__;
+  return isKeyable(key)
+    ? data[typeof key == 'string' ? 'string' : 'hash']
+    : data.map;
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+  var value = getValue(object, key);
+  return baseIsNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+function isKey(value, object) {
+  if (isArray(value)) {
+    return false;
+  }
+  var type = typeof value;
+  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+      value == null || isSymbol(value)) {
+    return true;
+  }
+  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+    (object != null && value in Object(object));
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+  var type = typeof value;
+  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+    ? (value !== '__proto__')
+    : (value === null);
+}
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+  return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/**
+ * Converts `string` to a property path array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+var stringToPath = memoize(function(string) {
+  string = toString(string);
+
+  var result = [];
+  if (reLeadingDot.test(string)) {
+    result.push('');
+  }
+  string.replace(rePropName, function(match, number, quote, string) {
+    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+  });
+  return result;
+});
+
+/**
+ * Converts `value` to a string key if it's not a string or symbol.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+function toKey(value) {
+  if (typeof value == 'string' || isSymbol(value)) {
+    return value;
+  }
+  var result = (value + '');
+  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+  if (func != null) {
+    try {
+      return funcToString.call(func);
+    } catch (e) {}
+    try {
+      return (func + '');
+    } catch (e) {}
+  }
+  return '';
+}
+
+/**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+function memoize(func, resolver) {
+  if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  var memoized = function() {
+    var args = arguments,
+        key = resolver ? resolver.apply(this, args) : args[0],
+        cache = memoized.cache;
+
+    if (cache.has(key)) {
+      return cache.get(key);
+    }
+    var result = func.apply(this, args);
+    memoized.cache = cache.set(key, result);
+    return result;
+  };
+  memoized.cache = new (memoize.Cache || MapCache);
+  return memoized;
+}
+
+// Assign cache to `_.memoize`.
+memoize.Cache = MapCache;
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+  return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+  // The use of `Object#toString` avoids issues with the `typeof` operator
+  // in Safari 8-9 which returns 'object' for typed array and other constructors.
+  var tag = isObject(value) ? objectToString.call(value) : '';
+  return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+  var type = typeof value;
+  return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+  return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+  return typeof value == 'symbol' ||
+    (isObjectLike(value) && objectToString.call(value) == symbolTag);
+}
+
+/**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString(value) {
+  return value == null ? '' : baseToString(value);
+}
+
+/**
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined`, the `defaultValue` is returned in its place.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+function get(object, path, defaultValue) {
+  var result = object == null ? undefined : baseGet(object, path);
+  return result === undefined ? defaultValue : result;
+}
+
+module.exports = get;
diff --git a/setup-maven/node_modules/lodash.get/package.json b/setup-maven/node_modules/lodash.get/package.json
new file mode 100644
index 0000000..599cbe1
--- /dev/null
+++ b/setup-maven/node_modules/lodash.get/package.json
@@ -0,0 +1,69 @@
+{
+  "_from": "lodash.get@^4.4.2",
+  "_id": "lodash.get@4.4.2",
+  "_inBundle": false,
+  "_integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+  "_location": "/lodash.get",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "lodash.get@^4.4.2",
+    "name": "lodash.get",
+    "escapedName": "lodash.get",
+    "rawSpec": "^4.4.2",
+    "saveSpec": null,
+    "fetchSpec": "^4.4.2"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+  "_shasum": "2d177f652fa31e939b4438d5341499dfa3825e99",
+  "_spec": "lodash.get@^4.4.2",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "author": {
+    "name": "John-David Dalton",
+    "email": "john.david.dalton@gmail.com",
+    "url": "http://allyoucanleet.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/lodash/lodash/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "John-David Dalton",
+      "email": "john.david.dalton@gmail.com",
+      "url": "http://allyoucanleet.com/"
+    },
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com",
+      "url": "https://github.com/phated"
+    },
+    {
+      "name": "Mathias Bynens",
+      "email": "mathias@qiwi.be",
+      "url": "https://mathiasbynens.be/"
+    }
+  ],
+  "deprecated": false,
+  "description": "The lodash method `_.get` exported as a module.",
+  "homepage": "https://lodash.com/",
+  "icon": "https://lodash.com/icon.svg",
+  "keywords": [
+    "lodash-modularized",
+    "get"
+  ],
+  "license": "MIT",
+  "name": "lodash.get",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/lodash/lodash.git"
+  },
+  "scripts": {
+    "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+  },
+  "version": "4.4.2"
+}
diff --git a/setup-maven/node_modules/lodash.set/LICENSE b/setup-maven/node_modules/lodash.set/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/setup-maven/node_modules/lodash.set/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors <https://jquery.org/>
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/setup-maven/node_modules/lodash.set/README.md b/setup-maven/node_modules/lodash.set/README.md
new file mode 100644
index 0000000..1f530bc
--- /dev/null
+++ b/setup-maven/node_modules/lodash.set/README.md
@@ -0,0 +1,18 @@
+# lodash.set v4.3.2
+
+The [lodash](https://lodash.com/) method `_.set` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.set
+```
+
+In Node.js:
+```js
+var set = require('lodash.set');
+```
+
+See the [documentation](https://lodash.com/docs#set) or [package source](https://github.com/lodash/lodash/blob/4.3.2-npm-packages/lodash.set) for more details.
diff --git a/setup-maven/node_modules/lodash.set/index.js b/setup-maven/node_modules/lodash.set/index.js
new file mode 100644
index 0000000..9f3ed6b
--- /dev/null
+++ b/setup-maven/node_modules/lodash.set/index.js
@@ -0,0 +1,990 @@
+/**
+ * lodash (Custom Build) <https://lodash.com/>
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
+ * Released under MIT license <https://lodash.com/license>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0,
+    MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+    genTag = '[object GeneratorFunction]',
+    symbolTag = '[object Symbol]';
+
+/** Used to match property names within property paths. */
+var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+    reIsPlainProp = /^\w*$/,
+    reLeadingDot = /^\./,
+    rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to match backslashes in property paths. */
+var reEscapeChar = /\\(\\)?/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+  return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+  // Many host objects are `Object` objects that can coerce to strings
+  // despite having improperly defined `toString` methods.
+  var result = false;
+  if (value != null && typeof value.toString != 'function') {
+    try {
+      result = !!(value + '');
+    } catch (e) {}
+  }
+  return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype,
+    funcProto = Function.prototype,
+    objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+  return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var Symbol = root.Symbol,
+    splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(root, 'Map'),
+    nativeCreate = getNative(Object, 'create');
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+    symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+  this.__data__ = nativeCreate ? nativeCreate(null) : {};
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+  return this.has(key) && delete this.__data__[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+  var data = this.__data__;
+  if (nativeCreate) {
+    var result = data[key];
+    return result === HASH_UNDEFINED ? undefined : result;
+  }
+  return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+  var data = this.__data__;
+  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+  var data = this.__data__;
+  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+  return this;
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+  this.__data__ = [];
+}
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  if (index < 0) {
+    return false;
+  }
+  var lastIndex = data.length - 1;
+  if (index == lastIndex) {
+    data.pop();
+  } else {
+    splice.call(data, index, 1);
+  }
+  return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+  return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  if (index < 0) {
+    data.push([key, value]);
+  } else {
+    data[index][1] = value;
+  }
+  return this;
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+  this.__data__ = {
+    'hash': new Hash,
+    'map': new (Map || ListCache),
+    'string': new Hash
+  };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+  return getMapData(this, key)['delete'](key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+  return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+  return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+  getMapData(this, key).set(key, value);
+  return this;
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+function assignValue(object, key, value) {
+  var objValue = object[key];
+  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
+      (value === undefined && !(key in object))) {
+    object[key] = value;
+  }
+}
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+  var length = array.length;
+  while (length--) {
+    if (eq(array[length][0], key)) {
+      return length;
+    }
+  }
+  return -1;
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ *  else `false`.
+ */
+function baseIsNative(value) {
+  if (!isObject(value) || isMasked(value)) {
+    return false;
+  }
+  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+  return pattern.test(toSource(value));
+}
+
+/**
+ * The base implementation of `_.set`.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @param {Function} [customizer] The function to customize path creation.
+ * @returns {Object} Returns `object`.
+ */
+function baseSet(object, path, value, customizer) {
+  if (!isObject(object)) {
+    return object;
+  }
+  path = isKey(path, object) ? [path] : castPath(path);
+
+  var index = -1,
+      length = path.length,
+      lastIndex = length - 1,
+      nested = object;
+
+  while (nested != null && ++index < length) {
+    var key = toKey(path[index]),
+        newValue = value;
+
+    if (index != lastIndex) {
+      var objValue = nested[key];
+      newValue = customizer ? customizer(objValue, key, nested) : undefined;
+      if (newValue === undefined) {
+        newValue = isObject(objValue)
+          ? objValue
+          : (isIndex(path[index + 1]) ? [] : {});
+      }
+    }
+    assignValue(nested, key, newValue);
+    nested = nested[key];
+  }
+  return object;
+}
+
+/**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+  // Exit early for strings to avoid a performance hit in some environments.
+  if (typeof value == 'string') {
+    return value;
+  }
+  if (isSymbol(value)) {
+    return symbolToString ? symbolToString.call(value) : '';
+  }
+  var result = (value + '');
+  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Casts `value` to a path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array} Returns the cast property path array.
+ */
+function castPath(value) {
+  return isArray(value) ? value : stringToPath(value);
+}
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+  var data = map.__data__;
+  return isKeyable(key)
+    ? data[typeof key == 'string' ? 'string' : 'hash']
+    : data.map;
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+  var value = getValue(object, key);
+  return baseIsNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+  length = length == null ? MAX_SAFE_INTEGER : length;
+  return !!length &&
+    (typeof value == 'number' || reIsUint.test(value)) &&
+    (value > -1 && value % 1 == 0 && value < length);
+}
+
+/**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+function isKey(value, object) {
+  if (isArray(value)) {
+    return false;
+  }
+  var type = typeof value;
+  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+      value == null || isSymbol(value)) {
+    return true;
+  }
+  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+    (object != null && value in Object(object));
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+  var type = typeof value;
+  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+    ? (value !== '__proto__')
+    : (value === null);
+}
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+  return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/**
+ * Converts `string` to a property path array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+var stringToPath = memoize(function(string) {
+  string = toString(string);
+
+  var result = [];
+  if (reLeadingDot.test(string)) {
+    result.push('');
+  }
+  string.replace(rePropName, function(match, number, quote, string) {
+    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+  });
+  return result;
+});
+
+/**
+ * Converts `value` to a string key if it's not a string or symbol.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+function toKey(value) {
+  if (typeof value == 'string' || isSymbol(value)) {
+    return value;
+  }
+  var result = (value + '');
+  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+  if (func != null) {
+    try {
+      return funcToString.call(func);
+    } catch (e) {}
+    try {
+      return (func + '');
+    } catch (e) {}
+  }
+  return '';
+}
+
+/**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+function memoize(func, resolver) {
+  if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  var memoized = function() {
+    var args = arguments,
+        key = resolver ? resolver.apply(this, args) : args[0],
+        cache = memoized.cache;
+
+    if (cache.has(key)) {
+      return cache.get(key);
+    }
+    var result = func.apply(this, args);
+    memoized.cache = cache.set(key, result);
+    return result;
+  };
+  memoized.cache = new (memoize.Cache || MapCache);
+  return memoized;
+}
+
+// Assign cache to `_.memoize`.
+memoize.Cache = MapCache;
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+  return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+  // The use of `Object#toString` avoids issues with the `typeof` operator
+  // in Safari 8-9 which returns 'object' for typed array and other constructors.
+  var tag = isObject(value) ? objectToString.call(value) : '';
+  return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+  var type = typeof value;
+  return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+  return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+  return typeof value == 'symbol' ||
+    (isObjectLike(value) && objectToString.call(value) == symbolTag);
+}
+
+/**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString(value) {
+  return value == null ? '' : baseToString(value);
+}
+
+/**
+ * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
+ * it's created. Arrays are created for missing index properties while objects
+ * are created for all other missing properties. Use `_.setWith` to customize
+ * `path` creation.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.set(object, 'a[0].b.c', 4);
+ * console.log(object.a[0].b.c);
+ * // => 4
+ *
+ * _.set(object, ['x', '0', 'y', 'z'], 5);
+ * console.log(object.x[0].y.z);
+ * // => 5
+ */
+function set(object, path, value) {
+  return object == null ? object : baseSet(object, path, value);
+}
+
+module.exports = set;
diff --git a/setup-maven/node_modules/lodash.set/package.json b/setup-maven/node_modules/lodash.set/package.json
new file mode 100644
index 0000000..9058e99
--- /dev/null
+++ b/setup-maven/node_modules/lodash.set/package.json
@@ -0,0 +1,69 @@
+{
+  "_from": "lodash.set@^4.3.2",
+  "_id": "lodash.set@4.3.2",
+  "_inBundle": false,
+  "_integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
+  "_location": "/lodash.set",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "lodash.set@^4.3.2",
+    "name": "lodash.set",
+    "escapedName": "lodash.set",
+    "rawSpec": "^4.3.2",
+    "saveSpec": null,
+    "fetchSpec": "^4.3.2"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+  "_shasum": "d8757b1da807dde24816b0d6a84bea1a76230b23",
+  "_spec": "lodash.set@^4.3.2",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "author": {
+    "name": "John-David Dalton",
+    "email": "john.david.dalton@gmail.com",
+    "url": "http://allyoucanleet.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/lodash/lodash/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "John-David Dalton",
+      "email": "john.david.dalton@gmail.com",
+      "url": "http://allyoucanleet.com/"
+    },
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com",
+      "url": "https://github.com/phated"
+    },
+    {
+      "name": "Mathias Bynens",
+      "email": "mathias@qiwi.be",
+      "url": "https://mathiasbynens.be/"
+    }
+  ],
+  "deprecated": false,
+  "description": "The lodash method `_.set` exported as a module.",
+  "homepage": "https://lodash.com/",
+  "icon": "https://lodash.com/icon.svg",
+  "keywords": [
+    "lodash-modularized",
+    "set"
+  ],
+  "license": "MIT",
+  "name": "lodash.set",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/lodash/lodash.git"
+  },
+  "scripts": {
+    "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+  },
+  "version": "4.3.2"
+}
diff --git a/setup-maven/node_modules/lodash.uniq/LICENSE b/setup-maven/node_modules/lodash.uniq/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/setup-maven/node_modules/lodash.uniq/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors <https://jquery.org/>
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/setup-maven/node_modules/lodash.uniq/README.md b/setup-maven/node_modules/lodash.uniq/README.md
new file mode 100644
index 0000000..a662a5e
--- /dev/null
+++ b/setup-maven/node_modules/lodash.uniq/README.md
@@ -0,0 +1,18 @@
+# lodash.uniq v4.5.0
+
+The [lodash](https://lodash.com/) method `_.uniq` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.uniq
+```
+
+In Node.js:
+```js
+var uniq = require('lodash.uniq');
+```
+
+See the [documentation](https://lodash.com/docs#uniq) or [package source](https://github.com/lodash/lodash/blob/4.5.0-npm-packages/lodash.uniq) for more details.
diff --git a/setup-maven/node_modules/lodash.uniq/index.js b/setup-maven/node_modules/lodash.uniq/index.js
new file mode 100644
index 0000000..83fce2b
--- /dev/null
+++ b/setup-maven/node_modules/lodash.uniq/index.js
@@ -0,0 +1,896 @@
+/**
+ * lodash (Custom Build) <https://lodash.com/>
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
+ * Released under MIT license <https://lodash.com/license>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+    genTag = '[object GeneratorFunction]';
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/**
+ * A specialized version of `_.includes` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludes(array, value) {
+  var length = array ? array.length : 0;
+  return !!length && baseIndexOf(array, value, 0) > -1;
+}
+
+/**
+ * This function is like `arrayIncludes` except that it accepts a comparator.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludesWith(array, value, comparator) {
+  var index = -1,
+      length = array ? array.length : 0;
+
+  while (++index < length) {
+    if (comparator(value, array[index])) {
+      return true;
+    }
+  }
+  return false;
+}
+
+/**
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
+ * support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function baseFindIndex(array, predicate, fromIndex, fromRight) {
+  var length = array.length,
+      index = fromIndex + (fromRight ? 1 : -1);
+
+  while ((fromRight ? index-- : ++index < length)) {
+    if (predicate(array[index], index, array)) {
+      return index;
+    }
+  }
+  return -1;
+}
+
+/**
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function baseIndexOf(array, value, fromIndex) {
+  if (value !== value) {
+    return baseFindIndex(array, baseIsNaN, fromIndex);
+  }
+  var index = fromIndex - 1,
+      length = array.length;
+
+  while (++index < length) {
+    if (array[index] === value) {
+      return index;
+    }
+  }
+  return -1;
+}
+
+/**
+ * The base implementation of `_.isNaN` without support for number objects.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ */
+function baseIsNaN(value) {
+  return value !== value;
+}
+
+/**
+ * Checks if a cache value for `key` exists.
+ *
+ * @private
+ * @param {Object} cache The cache to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function cacheHas(cache, key) {
+  return cache.has(key);
+}
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+  return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+  // Many host objects are `Object` objects that can coerce to strings
+  // despite having improperly defined `toString` methods.
+  var result = false;
+  if (value != null && typeof value.toString != 'function') {
+    try {
+      result = !!(value + '');
+    } catch (e) {}
+  }
+  return result;
+}
+
+/**
+ * Converts `set` to an array of its values.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the values.
+ */
+function setToArray(set) {
+  var index = -1,
+      result = Array(set.size);
+
+  set.forEach(function(value) {
+    result[++index] = value;
+  });
+  return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype,
+    funcProto = Function.prototype,
+    objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+  return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(root, 'Map'),
+    Set = getNative(root, 'Set'),
+    nativeCreate = getNative(Object, 'create');
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+  this.__data__ = nativeCreate ? nativeCreate(null) : {};
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+  return this.has(key) && delete this.__data__[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+  var data = this.__data__;
+  if (nativeCreate) {
+    var result = data[key];
+    return result === HASH_UNDEFINED ? undefined : result;
+  }
+  return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+  var data = this.__data__;
+  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+  var data = this.__data__;
+  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+  return this;
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+  this.__data__ = [];
+}
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  if (index < 0) {
+    return false;
+  }
+  var lastIndex = data.length - 1;
+  if (index == lastIndex) {
+    data.pop();
+  } else {
+    splice.call(data, index, 1);
+  }
+  return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+  return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+  var data = this.__data__,
+      index = assocIndexOf(data, key);
+
+  if (index < 0) {
+    data.push([key, value]);
+  } else {
+    data[index][1] = value;
+  }
+  return this;
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+  var index = -1,
+      length = entries ? entries.length : 0;
+
+  this.clear();
+  while (++index < length) {
+    var entry = entries[index];
+    this.set(entry[0], entry[1]);
+  }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+  this.__data__ = {
+    'hash': new Hash,
+    'map': new (Map || ListCache),
+    'string': new Hash
+  };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+  return getMapData(this, key)['delete'](key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+  return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+  return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+  getMapData(this, key).set(key, value);
+  return this;
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ *
+ * Creates an array cache object to store unique values.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [values] The values to cache.
+ */
+function SetCache(values) {
+  var index = -1,
+      length = values ? values.length : 0;
+
+  this.__data__ = new MapCache;
+  while (++index < length) {
+    this.add(values[index]);
+  }
+}
+
+/**
+ * Adds `value` to the array cache.
+ *
+ * @private
+ * @name add
+ * @memberOf SetCache
+ * @alias push
+ * @param {*} value The value to cache.
+ * @returns {Object} Returns the cache instance.
+ */
+function setCacheAdd(value) {
+  this.__data__.set(value, HASH_UNDEFINED);
+  return this;
+}
+
+/**
+ * Checks if `value` is in the array cache.
+ *
+ * @private
+ * @name has
+ * @memberOf SetCache
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+function setCacheHas(value) {
+  return this.__data__.has(value);
+}
+
+// Add methods to `SetCache`.
+SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+SetCache.prototype.has = setCacheHas;
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+  var length = array.length;
+  while (length--) {
+    if (eq(array[length][0], key)) {
+      return length;
+    }
+  }
+  return -1;
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ *  else `false`.
+ */
+function baseIsNative(value) {
+  if (!isObject(value) || isMasked(value)) {
+    return false;
+  }
+  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+  return pattern.test(toSource(value));
+}
+
+/**
+ * The base implementation of `_.uniqBy` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+function baseUniq(array, iteratee, comparator) {
+  var index = -1,
+      includes = arrayIncludes,
+      length = array.length,
+      isCommon = true,
+      result = [],
+      seen = result;
+
+  if (comparator) {
+    isCommon = false;
+    includes = arrayIncludesWith;
+  }
+  else if (length >= LARGE_ARRAY_SIZE) {
+    var set = iteratee ? null : createSet(array);
+    if (set) {
+      return setToArray(set);
+    }
+    isCommon = false;
+    includes = cacheHas;
+    seen = new SetCache;
+  }
+  else {
+    seen = iteratee ? [] : result;
+  }
+  outer:
+  while (++index < length) {
+    var value = array[index],
+        computed = iteratee ? iteratee(value) : value;
+
+    value = (comparator || value !== 0) ? value : 0;
+    if (isCommon && computed === computed) {
+      var seenIndex = seen.length;
+      while (seenIndex--) {
+        if (seen[seenIndex] === computed) {
+          continue outer;
+        }
+      }
+      if (iteratee) {
+        seen.push(computed);
+      }
+      result.push(value);
+    }
+    else if (!includes(seen, computed, comparator)) {
+      if (seen !== result) {
+        seen.push(computed);
+      }
+      result.push(value);
+    }
+  }
+  return result;
+}
+
+/**
+ * Creates a set object of `values`.
+ *
+ * @private
+ * @param {Array} values The values to add to the set.
+ * @returns {Object} Returns the new set.
+ */
+var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
+  return new Set(values);
+};
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+  var data = map.__data__;
+  return isKeyable(key)
+    ? data[typeof key == 'string' ? 'string' : 'hash']
+    : data.map;
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+  var value = getValue(object, key);
+  return baseIsNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+  var type = typeof value;
+  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+    ? (value !== '__proto__')
+    : (value === null);
+}
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+  return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+  if (func != null) {
+    try {
+      return funcToString.call(func);
+    } catch (e) {}
+    try {
+      return (func + '');
+    } catch (e) {}
+  }
+  return '';
+}
+
+/**
+ * Creates a duplicate-free version of an array, using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons, in which only the first occurrence of each
+ * element is kept.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.uniq([2, 1, 2]);
+ * // => [2, 1]
+ */
+function uniq(array) {
+  return (array && array.length)
+    ? baseUniq(array)
+    : [];
+}
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+  return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+  // The use of `Object#toString` avoids issues with the `typeof` operator
+  // in Safari 8-9 which returns 'object' for typed array and other constructors.
+  var tag = isObject(value) ? objectToString.call(value) : '';
+  return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+  var type = typeof value;
+  return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * This method returns `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.3.0
+ * @category Util
+ * @example
+ *
+ * _.times(2, _.noop);
+ * // => [undefined, undefined]
+ */
+function noop() {
+  // No operation performed.
+}
+
+module.exports = uniq;
diff --git a/setup-maven/node_modules/lodash.uniq/package.json b/setup-maven/node_modules/lodash.uniq/package.json
new file mode 100644
index 0000000..4f55ae4
--- /dev/null
+++ b/setup-maven/node_modules/lodash.uniq/package.json
@@ -0,0 +1,69 @@
+{
+  "_from": "lodash.uniq@^4.5.0",
+  "_id": "lodash.uniq@4.5.0",
+  "_inBundle": false,
+  "_integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+  "_location": "/lodash.uniq",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "lodash.uniq@^4.5.0",
+    "name": "lodash.uniq",
+    "escapedName": "lodash.uniq",
+    "rawSpec": "^4.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.5.0"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+  "_shasum": "d0225373aeb652adc1bc82e4945339a842754773",
+  "_spec": "lodash.uniq@^4.5.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "author": {
+    "name": "John-David Dalton",
+    "email": "john.david.dalton@gmail.com",
+    "url": "http://allyoucanleet.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/lodash/lodash/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "John-David Dalton",
+      "email": "john.david.dalton@gmail.com",
+      "url": "http://allyoucanleet.com/"
+    },
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com",
+      "url": "https://github.com/phated"
+    },
+    {
+      "name": "Mathias Bynens",
+      "email": "mathias@qiwi.be",
+      "url": "https://mathiasbynens.be/"
+    }
+  ],
+  "deprecated": false,
+  "description": "The lodash method `_.uniq` exported as a module.",
+  "homepage": "https://lodash.com/",
+  "icon": "https://lodash.com/icon.svg",
+  "keywords": [
+    "lodash-modularized",
+    "uniq"
+  ],
+  "license": "MIT",
+  "name": "lodash.uniq",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/lodash/lodash.git"
+  },
+  "scripts": {
+    "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+  },
+  "version": "4.5.0"
+}
diff --git a/setup-maven/node_modules/macos-release/index.d.ts b/setup-maven/node_modules/macos-release/index.d.ts
new file mode 100644
index 0000000..c4efcf4
--- /dev/null
+++ b/setup-maven/node_modules/macos-release/index.d.ts
@@ -0,0 +1,36 @@
+declare const macosRelease: {
+	/**
+	Get the name and version of a macOS release from the Darwin version.
+
+	@param release - By default, the current operating system is used, but you can supply a custom [Darwin kernel version](http://en.wikipedia.org/wiki/Darwin_%28operating_system%29#Release_history), which is the output of [`os.release()`](https://nodejs.org/api/os.html#os_os_release).
+
+	@example
+	```
+	import * as os from 'os';
+	import macosRelease = require('macos-release');
+
+	// On a macOS Sierra system
+
+	macosRelease();
+	//=> {name: 'Sierra', version: '10.12'}
+
+	os.release();
+	//=> 13.2.0
+	// This is the Darwin kernel version
+
+	macosRelease(os.release());
+	//=> {name: 'Sierra', version: '10.12'}
+
+	macosRelease('14.0.0');
+	//=> {name: 'Yosemite', version: '10.10'}
+	```
+	*/
+	(release?: string): string;
+
+	// TODO: remove this in the next major version, refactor the whole definition to:
+	// declare function macosRelease(release?: string): string;
+	// export = macosRelease;
+	default: typeof macosRelease;
+};
+
+export = macosRelease;
diff --git a/setup-maven/node_modules/macos-release/index.js b/setup-maven/node_modules/macos-release/index.js
new file mode 100644
index 0000000..b6eba6b
--- /dev/null
+++ b/setup-maven/node_modules/macos-release/index.js
@@ -0,0 +1,32 @@
+'use strict';
+const os = require('os');
+
+const nameMap = new Map([
+	[19, 'Catalina'],
+	[18, 'Mojave'],
+	[17, 'High Sierra'],
+	[16, 'Sierra'],
+	[15, 'El Capitan'],
+	[14, 'Yosemite'],
+	[13, 'Mavericks'],
+	[12, 'Mountain Lion'],
+	[11, 'Lion'],
+	[10, 'Snow Leopard'],
+	[9, 'Leopard'],
+	[8, 'Tiger'],
+	[7, 'Panther'],
+	[6, 'Jaguar'],
+	[5, 'Puma']
+]);
+
+const macosRelease = release => {
+	release = Number((release || os.release()).split('.')[0]);
+	return {
+		name: nameMap.get(release),
+		version: '10.' + (release - 4)
+	};
+};
+
+module.exports = macosRelease;
+// TODO: remove this in the next major version
+module.exports.default = macosRelease;
diff --git a/setup-maven/node_modules/macos-release/license b/setup-maven/node_modules/macos-release/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/setup-maven/node_modules/macos-release/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/macos-release/package.json b/setup-maven/node_modules/macos-release/package.json
new file mode 100644
index 0000000..143691a
--- /dev/null
+++ b/setup-maven/node_modules/macos-release/package.json
@@ -0,0 +1,71 @@
+{
+  "_from": "macos-release@^2.2.0",
+  "_id": "macos-release@2.3.0",
+  "_inBundle": false,
+  "_integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==",
+  "_location": "/macos-release",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "macos-release@^2.2.0",
+    "name": "macos-release",
+    "escapedName": "macos-release",
+    "rawSpec": "^2.2.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.2.0"
+  },
+  "_requiredBy": [
+    "/os-name"
+  ],
+  "_resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz",
+  "_shasum": "eb1930b036c0800adebccd5f17bc4c12de8bb71f",
+  "_spec": "macos-release@^2.2.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/os-name",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/macos-release/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Get the name and version of a macOS release from the Darwin version",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.1",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/macos-release#readme",
+  "keywords": [
+    "macos",
+    "os",
+    "darwin",
+    "operating",
+    "system",
+    "platform",
+    "name",
+    "title",
+    "release",
+    "version"
+  ],
+  "license": "MIT",
+  "name": "macos-release",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/macos-release.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "2.3.0"
+}
diff --git a/setup-maven/node_modules/macos-release/readme.md b/setup-maven/node_modules/macos-release/readme.md
new file mode 100644
index 0000000..2e7b907
--- /dev/null
+++ b/setup-maven/node_modules/macos-release/readme.md
@@ -0,0 +1,57 @@
+# macos-release [![Build Status](https://travis-ci.org/sindresorhus/macos-release.svg?branch=master)](https://travis-ci.org/sindresorhus/macos-release)
+
+> Get the name and version of a macOS release from the Darwin version<br>
+> Example: `13.2.0` → `{name: 'Mavericks', version: '10.9'}`
+
+
+## Install
+
+```
+$ npm install macos-release
+```
+
+
+## Usage
+
+```js
+const os = require('os');
+const macosRelease = require('macos-release');
+
+// On a macOS Sierra system
+
+macosRelease();
+//=> {name: 'Sierra', version: '10.12'}
+
+os.release();
+//=> 13.2.0
+// This is the Darwin kernel version
+
+macosRelease(os.release());
+//=> {name: 'Sierra', version: '10.12'}
+
+macosRelease('14.0.0');
+//=> {name: 'Yosemite', version: '10.10'}
+```
+
+
+## API
+
+### macosRelease([release])
+
+#### release
+
+Type: `string`
+
+By default, the current operating system is used, but you can supply a custom [Darwin kernel version](http://en.wikipedia.org/wiki/Darwin_%28operating_system%29#Release_history), which is the output of [`os.release()`](http://nodejs.org/api/os.html#os_os_release).
+
+
+## Related
+
+- [os-name](https://github.com/sindresorhus/os-name) - Get the name of the current operating system. Example: `macOS Sierra`
+- [macos-version](https://github.com/sindresorhus/macos-version) - Get the macOS version of the current system. Example: `10.9.3`
+- [win-release](https://github.com/sindresorhus/win-release) - Get the name of a Windows version from the release number: `5.1.2600` → `XP`
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/nice-try/CHANGELOG.md b/setup-maven/node_modules/nice-try/CHANGELOG.md
new file mode 100644
index 0000000..9e6baf2
--- /dev/null
+++ b/setup-maven/node_modules/nice-try/CHANGELOG.md
@@ -0,0 +1,21 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.0.5] - 2018-08-25
+
+### Changed
+
+- Removed `prepublish` script from `package.json`
+
+## [1.0.4] - 2017-08-08
+
+### New
+
+- Added a changelog
+
+### Changed
+
+- Ignore `yarn.lock` and `package-lock.json` files
\ No newline at end of file
diff --git a/setup-maven/node_modules/nice-try/LICENSE b/setup-maven/node_modules/nice-try/LICENSE
new file mode 100644
index 0000000..681c8f5
--- /dev/null
+++ b/setup-maven/node_modules/nice-try/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 Tobias Reich
+
+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/setup-maven/node_modules/nice-try/README.md b/setup-maven/node_modules/nice-try/README.md
new file mode 100644
index 0000000..5b83b78
--- /dev/null
+++ b/setup-maven/node_modules/nice-try/README.md
@@ -0,0 +1,32 @@
+# nice-try
+
+[![Travis Build Status](https://travis-ci.org/electerious/nice-try.svg?branch=master)](https://travis-ci.org/electerious/nice-try) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/8tqb09wrwci3xf8l?svg=true)](https://ci.appveyor.com/project/electerious/nice-try) [![Coverage Status](https://coveralls.io/repos/github/electerious/nice-try/badge.svg?branch=master)](https://coveralls.io/github/electerious/nice-try?branch=master) [![Dependencies](https://david-dm.org/electerious/nice-try.svg)](https://david-dm.org/electerious/nice-try#info=dependencies) [![Greenkeeper badge](https://badges.greenkeeper.io/electerious/nice-try.svg)](https://greenkeeper.io/)
+
+A function that tries to execute a function and discards any error that occurs.
+
+## Install
+
+```
+npm install nice-try
+```
+
+## Usage
+
+```js
+const niceTry = require('nice-try')
+
+niceTry(() => JSON.parse('true')) // true
+niceTry(() => JSON.parse('truee')) // undefined
+niceTry() // undefined
+niceTry(true) // undefined
+```
+
+## API
+
+### Parameters
+
+- `fn` `{Function}` Function that might or might not throw an error.
+
+### Returns
+
+- `{?*}` Return-value of the function when no error occurred.
\ No newline at end of file
diff --git a/setup-maven/node_modules/nice-try/package.json b/setup-maven/node_modules/nice-try/package.json
new file mode 100644
index 0000000..934913c
--- /dev/null
+++ b/setup-maven/node_modules/nice-try/package.json
@@ -0,0 +1,61 @@
+{
+  "_from": "nice-try@^1.0.4",
+  "_id": "nice-try@1.0.5",
+  "_inBundle": false,
+  "_integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+  "_location": "/nice-try",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "nice-try@^1.0.4",
+    "name": "nice-try",
+    "escapedName": "nice-try",
+    "rawSpec": "^1.0.4",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.4"
+  },
+  "_requiredBy": [
+    "/cross-spawn"
+  ],
+  "_resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+  "_shasum": "a3378a7696ce7d223e88fc9b764bd7ef1089e366",
+  "_spec": "nice-try@^1.0.4",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/cross-spawn",
+  "authors": [
+    "Tobias Reich <tobias@electerious.com>"
+  ],
+  "bugs": {
+    "url": "https://github.com/electerious/nice-try/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Tries to execute a function and discards any error that occurs",
+  "devDependencies": {
+    "chai": "^4.1.2",
+    "coveralls": "^3.0.0",
+    "mocha": "^5.1.1",
+    "nyc": "^12.0.1"
+  },
+  "files": [
+    "src"
+  ],
+  "homepage": "https://github.com/electerious/nice-try",
+  "keywords": [
+    "try",
+    "catch",
+    "error"
+  ],
+  "license": "MIT",
+  "main": "src/index.js",
+  "name": "nice-try",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/electerious/nice-try.git"
+  },
+  "scripts": {
+    "coveralls": "nyc report --reporter=text-lcov | coveralls",
+    "test": "nyc node_modules/mocha/bin/_mocha"
+  },
+  "version": "1.0.5"
+}
diff --git a/setup-maven/node_modules/nice-try/src/index.js b/setup-maven/node_modules/nice-try/src/index.js
new file mode 100644
index 0000000..837506f
--- /dev/null
+++ b/setup-maven/node_modules/nice-try/src/index.js
@@ -0,0 +1,12 @@
+'use strict'
+
+/**
+ * Tries to execute a function and discards any error that occurs.
+ * @param {Function} fn - Function that might or might not throw an error.
+ * @returns {?*} Return-value of the function when no error occurred.
+ */
+module.exports = function(fn) {
+
+	try { return fn() } catch (e) {}
+
+}
\ No newline at end of file
diff --git a/setup-maven/node_modules/node-fetch/CHANGELOG.md b/setup-maven/node_modules/node-fetch/CHANGELOG.md
new file mode 100644
index 0000000..188fcd3
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/CHANGELOG.md
@@ -0,0 +1,266 @@
+
+Changelog
+=========
+
+
+# 2.x release
+
+## v2.6.0
+
+- Enhance: `options.agent`, it now accepts a function that returns custom http(s).Agent instance based on current URL, see readme for more information.
+- Fix: incorrect `Content-Length` was returned for stream body in 2.5.0 release; note that `node-fetch` doesn't calculate content length for stream body.
+- Fix: `Response.url` should return empty string instead of `null` by default.
+
+## v2.5.0
+
+- Enhance: `Response` object now includes `redirected` property.
+- Enhance: `fetch()` now accepts third-party `Blob` implementation as body.
+- Other: disable `package-lock.json` generation as we never commit them.
+- Other: dev dependency update.
+- Other: readme update.
+
+## v2.4.1
+
+- Fix: `Blob` import rule for node < 10, as `Readable` isn't a named export.
+
+## v2.4.0
+
+- Enhance: added `Brotli` compression support (using node's zlib).
+- Enhance: updated `Blob` implementation per spec.
+- Fix: set content type automatically for `URLSearchParams`.
+- Fix: `Headers` now reject empty header names.
+- Fix: test cases, as node 12+ no longer accepts invalid header response.
+
+## v2.3.0
+
+- Enhance: added `AbortSignal` support, with README example.
+- Enhance: handle invalid `Location` header during redirect by rejecting them explicitly with `FetchError`.
+- Fix: update `browser.js` to support react-native environment, where `self` isn't available globally.
+
+## v2.2.1
+
+- Fix: `compress` flag shouldn't overwrite existing `Accept-Encoding` header.
+- Fix: multiple `import` rules, where `PassThrough` etc. doesn't have a named export when using node <10 and `--exerimental-modules` flag.
+- Other: Better README.
+
+## v2.2.0
+
+- Enhance: Support all `ArrayBuffer` view types
+- Enhance: Support Web Workers
+- Enhance: Support Node.js' `--experimental-modules` mode; deprecate `.es.js` file
+- Fix: Add `__esModule` property to the exports object
+- Other: Better example in README for writing response to a file
+- Other: More tests for Agent
+
+## v2.1.2
+
+- Fix: allow `Body` methods to work on `ArrayBuffer`-backed `Body` objects
+- Fix: reject promise returned by `Body` methods when the accumulated `Buffer` exceeds the maximum size
+- Fix: support custom `Host` headers with any casing
+- Fix: support importing `fetch()` from TypeScript in `browser.js`
+- Fix: handle the redirect response body properly
+
+## v2.1.1
+
+Fix packaging errors in v2.1.0.
+
+## v2.1.0
+
+- Enhance: allow using ArrayBuffer as the `body` of a `fetch()` or `Request`
+- Fix: store HTTP headers of a `Headers` object internally with the given case, for compatibility with older servers that incorrectly treated header names in a case-sensitive manner
+- Fix: silently ignore invalid HTTP headers
+- Fix: handle HTTP redirect responses without a `Location` header just like non-redirect responses
+- Fix: include bodies when following a redirection when appropriate
+
+## v2.0.0
+
+This is a major release. Check [our upgrade guide](https://github.com/bitinn/node-fetch/blob/master/UPGRADE-GUIDE.md) for an overview on some key differences between v1 and v2.
+
+### General changes
+
+- Major: Node.js 0.10.x and 0.12.x support is dropped
+- Major: `require('node-fetch/lib/response')` etc. is now unsupported; use `require('node-fetch').Response` or ES6 module imports
+- Enhance: start testing on Node.js v4.x, v6.x, v8.x LTS, as well as v9.x stable
+- Enhance: use Rollup to produce a distributed bundle (less memory overhead and faster startup)
+- Enhance: make `Object.prototype.toString()` on Headers, Requests, and Responses return correct class strings
+- Other: rewrite in ES2015 using Babel
+- Other: use Codecov for code coverage tracking
+- Other: update package.json script for npm 5
+- Other: `encoding` module is now optional (alpha.7)
+- Other: expose browser.js through package.json, avoid bundling mishaps (alpha.9)
+- Other: allow TypeScript to `import` node-fetch by exposing default (alpha.9)
+
+### HTTP requests
+
+- Major: overwrite user's `Content-Length` if we can be sure our information is correct (per spec)
+- Fix: errors in a response are caught before the body is accessed
+- Fix: support WHATWG URL objects, created by `whatwg-url` package or `require('url').URL` in Node.js 7+
+
+### Response and Request classes
+
+- Major: `response.text()` no longer attempts to detect encoding, instead always opting for UTF-8 (per spec); use `response.textConverted()` for the v1 behavior
+- Major: make `response.json()` throw error instead of returning an empty object on 204 no-content respose (per spec; reverts behavior changed in v1.6.2)
+- Major: internal methods are no longer exposed
+- Major: throw error when a `GET` or `HEAD` Request is constructed with a non-null body (per spec)
+- Enhance: add `response.arrayBuffer()` (also applies to Requests)
+- Enhance: add experimental `response.blob()` (also applies to Requests)
+- Enhance: `URLSearchParams` is now accepted as a body
+- Enhance: wrap `response.json()` json parsing error as `FetchError`
+- Fix: fix Request and Response with `null` body
+
+### Headers class
+
+- Major: remove `headers.getAll()`; make `get()` return all headers delimited by commas (per spec)
+- Enhance: make Headers iterable
+- Enhance: make Headers constructor accept an array of tuples
+- Enhance: make sure header names and values are valid in HTTP
+- Fix: coerce Headers prototype function parameters to strings, where applicable
+
+### Documentation
+
+- Enhance: more comprehensive API docs
+- Enhance: add a list of default headers in README
+
+
+# 1.x release
+
+## backport releases (v1.7.0 and beyond)
+
+See [changelog on 1.x branch](https://github.com/bitinn/node-fetch/blob/1.x/CHANGELOG.md) for details.
+
+## v1.6.3
+
+- Enhance: error handling document to explain `FetchError` design
+- Fix: support `form-data` 2.x releases (requires `form-data` >= 2.1.0)
+
+## v1.6.2
+
+- Enhance: minor document update
+- Fix: response.json() returns empty object on 204 no-content response instead of throwing a syntax error
+
+## v1.6.1
+
+- Fix: if `res.body` is a non-stream non-formdata object, we will call `body.toString` and send it as a string
+- Fix: `counter` value is incorrectly set to `follow` value when wrapping Request instance
+- Fix: documentation update
+
+## v1.6.0
+
+- Enhance: added `res.buffer()` api for convenience, it returns body as a Node.js buffer
+- Enhance: better old server support by handling raw deflate response
+- Enhance: skip encoding detection for non-HTML/XML response
+- Enhance: minor document update
+- Fix: HEAD request doesn't need decompression, as body is empty
+- Fix: `req.body` now accepts a Node.js buffer
+
+## v1.5.3
+
+- Fix: handle 204 and 304 responses when body is empty but content-encoding is gzip/deflate
+- Fix: allow resolving response and cloned response in any order
+- Fix: avoid setting `content-length` when `form-data` body use streams
+- Fix: send DELETE request with content-length when body is present
+- Fix: allow any url when calling new Request, but still reject non-http(s) url in fetch
+
+## v1.5.2
+
+- Fix: allow node.js core to handle keep-alive connection pool when passing a custom agent
+
+## v1.5.1
+
+- Fix: redirect mode `manual` should work even when there is no redirection or broken redirection
+
+## v1.5.0
+
+- Enhance: rejected promise now use custom `Error` (thx to @pekeler)
+- Enhance: `FetchError` contains `err.type` and `err.code`, allows for better error handling (thx to @pekeler)
+- Enhance: basic support for redirect mode `manual` and `error`, allows for location header extraction (thx to @jimmywarting for the initial PR)
+
+## v1.4.1
+
+- Fix: wrapping Request instance with FormData body again should preserve the body as-is
+
+## v1.4.0
+
+- Enhance: Request and Response now have `clone` method (thx to @kirill-konshin for the initial PR)
+- Enhance: Request and Response now have proper string and buffer body support (thx to @kirill-konshin)
+- Enhance: Body constructor has been refactored out (thx to @kirill-konshin)
+- Enhance: Headers now has `forEach` method (thx to @tricoder42)
+- Enhance: back to 100% code coverage
+- Fix: better form-data support (thx to @item4)
+- Fix: better character encoding detection under chunked encoding (thx to @dsuket for the initial PR)
+
+## v1.3.3
+
+- Fix: make sure `Content-Length` header is set when body is string for POST/PUT/PATCH requests
+- Fix: handle body stream error, for cases such as incorrect `Content-Encoding` header
+- Fix: when following certain redirects, use `GET` on subsequent request per Fetch Spec
+- Fix: `Request` and `Response` constructors now parse headers input using `Headers`
+
+## v1.3.2
+
+- Enhance: allow auto detect of form-data input (no `FormData` spec on node.js, this is form-data specific feature)
+
+## v1.3.1
+
+- Enhance: allow custom host header to be set (server-side only feature, as it's a forbidden header on client-side)
+
+## v1.3.0
+
+- Enhance: now `fetch.Request` is exposed as well
+
+## v1.2.1
+
+- Enhance: `Headers` now normalized `Number` value to `String`, prevent common mistakes
+
+## v1.2.0
+
+- Enhance: now fetch.Headers and fetch.Response are exposed, making testing easier
+
+## v1.1.2
+
+- Fix: `Headers` should only support `String` and `Array` properties, and ignore others
+
+## v1.1.1
+
+- Enhance: now req.headers accept both plain object and `Headers` instance
+
+## v1.1.0
+
+- Enhance: timeout now also applies to response body (in case of slow response)
+- Fix: timeout is now cleared properly when fetch is done/has failed
+
+## v1.0.6
+
+- Fix: less greedy content-type charset matching
+
+## v1.0.5
+
+- Fix: when `follow = 0`, fetch should not follow redirect
+- Enhance: update tests for better coverage
+- Enhance: code formatting
+- Enhance: clean up doc
+
+## v1.0.4
+
+- Enhance: test iojs support
+- Enhance: timeout attached to socket event only fire once per redirect
+
+## v1.0.3
+
+- Fix: response size limit should reject large chunk
+- Enhance: added character encoding detection for xml, such as rss/atom feed (encoding in DTD)
+
+## v1.0.2
+
+- Fix: added res.ok per spec change
+
+## v1.0.0
+
+- Enhance: better test coverage and doc
+
+
+# 0.x release
+
+## v0.1
+
+- Major: initial public release
diff --git a/setup-maven/node_modules/node-fetch/LICENSE.md b/setup-maven/node_modules/node-fetch/LICENSE.md
new file mode 100644
index 0000000..660ffec
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/LICENSE.md
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 David Frank
+
+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/setup-maven/node_modules/node-fetch/README.md b/setup-maven/node_modules/node-fetch/README.md
new file mode 100644
index 0000000..cb19901
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/README.md
@@ -0,0 +1,583 @@
+node-fetch
+==========
+
+[![npm version][npm-image]][npm-url]
+[![build status][travis-image]][travis-url]
+[![coverage status][codecov-image]][codecov-url]
+[![install size][install-size-image]][install-size-url]
+
+A light-weight module that brings `window.fetch` to Node.js
+
+(We are looking for [v2 maintainers and collaborators](https://github.com/bitinn/node-fetch/issues/567))
+
+<!-- TOC -->
+
+- [Motivation](#motivation)
+- [Features](#features)
+- [Difference from client-side fetch](#difference-from-client-side-fetch)
+- [Installation](#installation)
+- [Loading and configuring the module](#loading-and-configuring-the-module)
+- [Common Usage](#common-usage)
+    - [Plain text or HTML](#plain-text-or-html)
+    - [JSON](#json)
+    - [Simple Post](#simple-post)
+    - [Post with JSON](#post-with-json)
+    - [Post with form parameters](#post-with-form-parameters)
+    - [Handling exceptions](#handling-exceptions)
+    - [Handling client and server errors](#handling-client-and-server-errors)
+- [Advanced Usage](#advanced-usage)
+    - [Streams](#streams)
+    - [Buffer](#buffer)
+    - [Accessing Headers and other Meta data](#accessing-headers-and-other-meta-data)
+    - [Extract Set-Cookie Header](#extract-set-cookie-header)
+    - [Post data using a file stream](#post-data-using-a-file-stream)
+    - [Post with form-data (detect multipart)](#post-with-form-data-detect-multipart)
+    - [Request cancellation with AbortSignal](#request-cancellation-with-abortsignal)
+- [API](#api)
+    - [fetch(url[, options])](#fetchurl-options)
+    - [Options](#options)
+    - [Class: Request](#class-request)
+    - [Class: Response](#class-response)
+    - [Class: Headers](#class-headers)
+    - [Interface: Body](#interface-body)
+    - [Class: FetchError](#class-fetcherror)
+- [License](#license)
+- [Acknowledgement](#acknowledgement)
+
+<!-- /TOC -->
+
+## Motivation
+
+Instead of implementing `XMLHttpRequest` in Node.js to run browser-specific [Fetch polyfill](https://github.com/github/fetch), why not go from native `http` to `fetch` API directly? Hence `node-fetch`, minimal code for a `window.fetch` compatible API on Node.js runtime.
+
+See Matt Andrews' [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) or Leonardo Quixada's [cross-fetch](https://github.com/lquixada/cross-fetch) for isomorphic usage (exports `node-fetch` for server-side, `whatwg-fetch` for client-side).
+
+## Features
+
+- Stay consistent with `window.fetch` API.
+- Make conscious trade-off when following [WHATWG fetch spec][whatwg-fetch] and [stream spec](https://streams.spec.whatwg.org/) implementation details, document known differences.
+- Use native promise, but allow substituting it with [insert your favorite promise library].
+- Use native Node streams for body, on both request and response.
+- Decode content encoding (gzip/deflate) properly, and convert string output (such as `res.text()` and `res.json()`) to UTF-8 automatically.
+- Useful extensions such as timeout, redirect limit, response size limit, [explicit errors](ERROR-HANDLING.md) for troubleshooting.
+
+## Difference from client-side fetch
+
+- See [Known Differences](LIMITS.md) for details.
+- If you happen to use a missing feature that `window.fetch` offers, feel free to open an issue.
+- Pull requests are welcomed too!
+
+## Installation
+
+Current stable release (`2.x`)
+
+```sh
+$ npm install node-fetch --save
+```
+
+## Loading and configuring the module
+We suggest you load the module via `require`, pending the stabalizing of es modules in node:
+```js
+const fetch = require('node-fetch');
+```
+
+If you are using a Promise library other than native, set it through fetch.Promise:
+```js
+const Bluebird = require('bluebird');
+
+fetch.Promise = Bluebird;
+```
+
+## Common Usage
+
+NOTE: The documentation below is up-to-date with `2.x` releases, [see `1.x` readme](https://github.com/bitinn/node-fetch/blob/1.x/README.md), [changelog](https://github.com/bitinn/node-fetch/blob/1.x/CHANGELOG.md) and [2.x upgrade guide](UPGRADE-GUIDE.md) for the differences.
+
+#### Plain text or HTML
+```js
+fetch('https://github.com/')
+    .then(res => res.text())
+    .then(body => console.log(body));
+```
+
+#### JSON
+
+```js
+
+fetch('https://api.github.com/users/github')
+    .then(res => res.json())
+    .then(json => console.log(json));
+```
+
+#### Simple Post
+```js
+fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' })
+    .then(res => res.json()) // expecting a json response
+    .then(json => console.log(json));
+```
+
+#### Post with JSON
+
+```js
+const body = { a: 1 };
+
+fetch('https://httpbin.org/post', {
+        method: 'post',
+        body:    JSON.stringify(body),
+        headers: { 'Content-Type': 'application/json' },
+    })
+    .then(res => res.json())
+    .then(json => console.log(json));
+```
+
+#### Post with form parameters
+`URLSearchParams` is available in Node.js as of v7.5.0. See [official documentation](https://nodejs.org/api/url.html#url_class_urlsearchparams) for more usage methods.
+
+NOTE: The `Content-Type` header is only set automatically to `x-www-form-urlencoded` when an instance of `URLSearchParams` is given as such:
+
+```js
+const { URLSearchParams } = require('url');
+
+const params = new URLSearchParams();
+params.append('a', 1);
+
+fetch('https://httpbin.org/post', { method: 'POST', body: params })
+    .then(res => res.json())
+    .then(json => console.log(json));
+```
+
+#### Handling exceptions
+NOTE: 3xx-5xx responses are *NOT* exceptions, and should be handled in `then()`, see the next section.
+
+Adding a catch to the fetch promise chain will catch *all* exceptions, such as errors originating from node core libraries, like network errors, and operational errors which are instances of FetchError. See the [error handling document](ERROR-HANDLING.md)  for more details.
+
+```js
+fetch('https://domain.invalid/')
+    .catch(err => console.error(err));
+```
+
+#### Handling client and server errors
+It is common to create a helper function to check that the response contains no client (4xx) or server (5xx) error responses:
+
+```js
+function checkStatus(res) {
+    if (res.ok) { // res.status >= 200 && res.status < 300
+        return res;
+    } else {
+        throw MyCustomError(res.statusText);
+    }
+}
+
+fetch('https://httpbin.org/status/400')
+    .then(checkStatus)
+    .then(res => console.log('will not get here...'))
+```
+
+## Advanced Usage
+
+#### Streams
+The "Node.js way" is to use streams when possible:
+
+```js
+fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png')
+    .then(res => {
+        const dest = fs.createWriteStream('./octocat.png');
+        res.body.pipe(dest);
+    });
+```
+
+#### Buffer
+If you prefer to cache binary data in full, use buffer(). (NOTE: buffer() is a `node-fetch` only API)
+
+```js
+const fileType = require('file-type');
+
+fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png')
+    .then(res => res.buffer())
+    .then(buffer => fileType(buffer))
+    .then(type => { /* ... */ });
+```
+
+#### Accessing Headers and other Meta data
+```js
+fetch('https://github.com/')
+    .then(res => {
+        console.log(res.ok);
+        console.log(res.status);
+        console.log(res.statusText);
+        console.log(res.headers.raw());
+        console.log(res.headers.get('content-type'));
+    });
+```
+
+#### Extract Set-Cookie Header
+
+Unlike browsers, you can access raw `Set-Cookie` headers manually using `Headers.raw()`, this is a `node-fetch` only API.
+
+```js
+fetch(url).then(res => {
+    // returns an array of values, instead of a string of comma-separated values
+    console.log(res.headers.raw()['set-cookie']);
+});
+```
+
+#### Post data using a file stream
+
+```js
+const { createReadStream } = require('fs');
+
+const stream = createReadStream('input.txt');
+
+fetch('https://httpbin.org/post', { method: 'POST', body: stream })
+    .then(res => res.json())
+    .then(json => console.log(json));
+```
+
+#### Post with form-data (detect multipart)
+
+```js
+const FormData = require('form-data');
+
+const form = new FormData();
+form.append('a', 1);
+
+fetch('https://httpbin.org/post', { method: 'POST', body: form })
+    .then(res => res.json())
+    .then(json => console.log(json));
+
+// OR, using custom headers
+// NOTE: getHeaders() is non-standard API
+
+const form = new FormData();
+form.append('a', 1);
+
+const options = {
+    method: 'POST',
+    body: form,
+    headers: form.getHeaders()
+}
+
+fetch('https://httpbin.org/post', options)
+    .then(res => res.json())
+    .then(json => console.log(json));
+```
+
+#### Request cancellation with AbortSignal
+
+> NOTE: You may only cancel streamed requests on Node >= v8.0.0
+
+You may cancel requests with `AbortController`. A suggested implementation is [`abort-controller`](https://www.npmjs.com/package/abort-controller).
+
+An example of timing out a request after 150ms could be achieved as follows:
+
+```js
+import AbortController from 'abort-controller';
+
+const controller = new AbortController();
+const timeout = setTimeout(
+  () => { controller.abort(); },
+  150,
+);
+
+fetch(url, { signal: controller.signal })
+  .then(res => res.json())
+  .then(
+    data => {
+      useData(data)
+    },
+    err => {
+      if (err.name === 'AbortError') {
+        // request was aborted
+      }
+    },
+  )
+  .finally(() => {
+    clearTimeout(timeout);
+  });
+```
+
+See [test cases](https://github.com/bitinn/node-fetch/blob/master/test/test.js) for more examples.
+
+
+## API
+
+### fetch(url[, options])
+
+- `url` A string representing the URL for fetching
+- `options` [Options](#fetch-options) for the HTTP(S) request
+- Returns: <code>Promise&lt;[Response](#class-response)&gt;</code>
+
+Perform an HTTP(S) fetch.
+
+`url` should be an absolute url, such as `https://example.com/`. A path-relative URL (`/file/under/root`) or protocol-relative URL (`//can-be-http-or-https.com/`) will result in a rejected promise.
+
+<a id="fetch-options"></a>
+### Options
+
+The default values are shown after each option key.
+
+```js
+{
+    // These properties are part of the Fetch Standard
+    method: 'GET',
+    headers: {},        // request headers. format is the identical to that accepted by the Headers constructor (see below)
+    body: null,         // request body. can be null, a string, a Buffer, a Blob, or a Node.js Readable stream
+    redirect: 'follow', // set to `manual` to extract redirect headers, `error` to reject redirect
+    signal: null,       // pass an instance of AbortSignal to optionally abort requests
+
+    // The following properties are node-fetch extensions
+    follow: 20,         // maximum redirect count. 0 to not follow redirect
+    timeout: 0,         // req/res timeout in ms, it resets on redirect. 0 to disable (OS limit applies). Signal is recommended instead.
+    compress: true,     // support gzip/deflate content encoding. false to disable
+    size: 0,            // maximum response body size in bytes. 0 to disable
+    agent: null         // http(s).Agent instance or function that returns an instance (see below)
+}
+```
+
+##### Default Headers
+
+If no values are set, the following request headers will be sent automatically:
+
+Header              | Value
+------------------- | --------------------------------------------------------
+`Accept-Encoding`   | `gzip,deflate` _(when `options.compress === true`)_
+`Accept`            | `*/*`
+`Connection`        | `close` _(when no `options.agent` is present)_
+`Content-Length`    | _(automatically calculated, if possible)_
+`Transfer-Encoding` | `chunked` _(when `req.body` is a stream)_
+`User-Agent`        | `node-fetch/1.0 (+https://github.com/bitinn/node-fetch)`
+
+Note: when `body` is a `Stream`, `Content-Length` is not set automatically.
+
+##### Custom Agent
+
+The `agent` option allows you to specify networking related options that's out of the scope of Fetch. Including and not limit to:
+
+- Support self-signed certificate
+- Use only IPv4 or IPv6
+- Custom DNS Lookup
+
+See [`http.Agent`](https://nodejs.org/api/http.html#http_new_agent_options) for more information.
+
+In addition, `agent` option accepts a function that returns http(s).Agent instance given current [URL](https://nodejs.org/api/url.html), this is useful during a redirection chain across HTTP and HTTPS protocol.
+
+```js
+const httpAgent = new http.Agent({
+    keepAlive: true
+});
+const httpsAgent = new https.Agent({
+    keepAlive: true
+});
+
+const options = {
+    agent: function (_parsedURL) {
+        if (_parsedURL.protocol == 'http:') {
+            return httpAgent;
+        } else {
+            return httpsAgent;
+        }
+    }
+}
+```
+
+<a id="class-request"></a>
+### Class: Request
+
+An HTTP(S) request containing information about URL, method, headers, and the body. This class implements the [Body](#iface-body) interface.
+
+Due to the nature of Node.js, the following properties are not implemented at this moment:
+
+- `type`
+- `destination`
+- `referrer`
+- `referrerPolicy`
+- `mode`
+- `credentials`
+- `cache`
+- `integrity`
+- `keepalive`
+
+The following node-fetch extension properties are provided:
+
+- `follow`
+- `compress`
+- `counter`
+- `agent`
+
+See [options](#fetch-options) for exact meaning of these extensions.
+
+#### new Request(input[, options])
+
+<small>*(spec-compliant)*</small>
+
+- `input` A string representing a URL, or another `Request` (which will be cloned)
+- `options` [Options][#fetch-options] for the HTTP(S) request
+
+Constructs a new `Request` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request).
+
+In most cases, directly `fetch(url, options)` is simpler than creating a `Request` object.
+
+<a id="class-response"></a>
+### Class: Response
+
+An HTTP(S) response. This class implements the [Body](#iface-body) interface.
+
+The following properties are not implemented in node-fetch at this moment:
+
+- `Response.error()`
+- `Response.redirect()`
+- `type`
+- `trailer`
+
+#### new Response([body[, options]])
+
+<small>*(spec-compliant)*</small>
+
+- `body` A string or [Readable stream][node-readable]
+- `options` A [`ResponseInit`][response-init] options dictionary
+
+Constructs a new `Response` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response).
+
+Because Node.js does not implement service workers (for which this class was designed), one rarely has to construct a `Response` directly.
+
+#### response.ok
+
+<small>*(spec-compliant)*</small>
+
+Convenience property representing if the request ended normally. Will evaluate to true if the response status was greater than or equal to 200 but smaller than 300.
+
+#### response.redirected
+
+<small>*(spec-compliant)*</small>
+
+Convenience property representing if the request has been redirected at least once. Will evaluate to true if the internal redirect counter is greater than 0.
+
+<a id="class-headers"></a>
+### Class: Headers
+
+This class allows manipulating and iterating over a set of HTTP headers. All methods specified in the [Fetch Standard][whatwg-fetch] are implemented.
+
+#### new Headers([init])
+
+<small>*(spec-compliant)*</small>
+
+- `init` Optional argument to pre-fill the `Headers` object
+
+Construct a new `Headers` object. `init` can be either `null`, a `Headers` object, an key-value map object, or any iterable object.
+
+```js
+// Example adapted from https://fetch.spec.whatwg.org/#example-headers-class
+
+const meta = {
+  'Content-Type': 'text/xml',
+  'Breaking-Bad': '<3'
+};
+const headers = new Headers(meta);
+
+// The above is equivalent to
+const meta = [
+  [ 'Content-Type', 'text/xml' ],
+  [ 'Breaking-Bad', '<3' ]
+];
+const headers = new Headers(meta);
+
+// You can in fact use any iterable objects, like a Map or even another Headers
+const meta = new Map();
+meta.set('Content-Type', 'text/xml');
+meta.set('Breaking-Bad', '<3');
+const headers = new Headers(meta);
+const copyOfHeaders = new Headers(headers);
+```
+
+<a id="iface-body"></a>
+### Interface: Body
+
+`Body` is an abstract interface with methods that are applicable to both `Request` and `Response` classes.
+
+The following methods are not yet implemented in node-fetch at this moment:
+
+- `formData()`
+
+#### body.body
+
+<small>*(deviation from spec)*</small>
+
+* Node.js [`Readable` stream][node-readable]
+
+The data encapsulated in the `Body` object. Note that while the [Fetch Standard][whatwg-fetch] requires the property to always be a WHATWG `ReadableStream`, in node-fetch it is a Node.js [`Readable` stream][node-readable].
+
+#### body.bodyUsed
+
+<small>*(spec-compliant)*</small>
+
+* `Boolean`
+
+A boolean property for if this body has been consumed. Per spec, a consumed body cannot be used again.
+
+#### body.arrayBuffer()
+#### body.blob()
+#### body.json()
+#### body.text()
+
+<small>*(spec-compliant)*</small>
+
+* Returns: <code>Promise</code>
+
+Consume the body and return a promise that will resolve to one of these formats.
+
+#### body.buffer()
+
+<small>*(node-fetch extension)*</small>
+
+* Returns: <code>Promise&lt;Buffer&gt;</code>
+
+Consume the body and return a promise that will resolve to a Buffer.
+
+#### body.textConverted()
+
+<small>*(node-fetch extension)*</small>
+
+* Returns: <code>Promise&lt;String&gt;</code>
+
+Identical to `body.text()`, except instead of always converting to UTF-8, encoding sniffing will be performed and text converted to UTF-8, if possible.
+
+(This API requires an optional dependency on npm package [encoding](https://www.npmjs.com/package/encoding), which you need to install manually. `webpack` users may see [a warning message](https://github.com/bitinn/node-fetch/issues/412#issuecomment-379007792) due to this optional dependency.)
+
+<a id="class-fetcherror"></a>
+### Class: FetchError
+
+<small>*(node-fetch extension)*</small>
+
+An operational error in the fetching process. See [ERROR-HANDLING.md][] for more info.
+
+<a id="class-aborterror"></a>
+### Class: AbortError
+
+<small>*(node-fetch extension)*</small>
+
+An Error thrown when the request is aborted in response to an `AbortSignal`'s `abort` event. It has a `name` property of `AbortError`. See [ERROR-HANDLING.MD][] for more info.
+
+## Acknowledgement
+
+Thanks to [github/fetch](https://github.com/github/fetch) for providing a solid implementation reference.
+
+`node-fetch` v1 was maintained by [@bitinn](https://github.com/bitinn); v2 was maintained by [@TimothyGu](https://github.com/timothygu), [@bitinn](https://github.com/bitinn) and [@jimmywarting](https://github.com/jimmywarting); v2 readme is written by [@jkantr](https://github.com/jkantr).
+
+## License
+
+MIT
+
+[npm-image]: https://flat.badgen.net/npm/v/node-fetch
+[npm-url]: https://www.npmjs.com/package/node-fetch
+[travis-image]: https://flat.badgen.net/travis/bitinn/node-fetch
+[travis-url]: https://travis-ci.org/bitinn/node-fetch
+[codecov-image]: https://flat.badgen.net/codecov/c/github/bitinn/node-fetch/master
+[codecov-url]: https://codecov.io/gh/bitinn/node-fetch
+[install-size-image]: https://flat.badgen.net/packagephobia/install/node-fetch
+[install-size-url]: https://packagephobia.now.sh/result?p=node-fetch
+[whatwg-fetch]: https://fetch.spec.whatwg.org/
+[response-init]: https://fetch.spec.whatwg.org/#responseinit
+[node-readable]: https://nodejs.org/api/stream.html#stream_readable_streams
+[mdn-headers]: https://developer.mozilla.org/en-US/docs/Web/API/Headers
+[LIMITS.md]: https://github.com/bitinn/node-fetch/blob/master/LIMITS.md
+[ERROR-HANDLING.md]: https://github.com/bitinn/node-fetch/blob/master/ERROR-HANDLING.md
+[UPGRADE-GUIDE.md]: https://github.com/bitinn/node-fetch/blob/master/UPGRADE-GUIDE.md
diff --git a/setup-maven/node_modules/node-fetch/browser.js b/setup-maven/node_modules/node-fetch/browser.js
new file mode 100644
index 0000000..0ad5de0
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/browser.js
@@ -0,0 +1,23 @@
+"use strict";
+
+// ref: https://github.com/tc39/proposal-global
+var getGlobal = function () {
+	// the only reliable means to get the global object is
+	// `Function('return this')()`
+	// However, this causes CSP violations in Chrome apps.
+	if (typeof self !== 'undefined') { return self; }
+	if (typeof window !== 'undefined') { return window; }
+	if (typeof global !== 'undefined') { return global; }
+	throw new Error('unable to locate global object');
+}
+
+var global = getGlobal();
+
+module.exports = exports = global.fetch;
+
+// Needed for TypeScript and Webpack.
+exports.default = global.fetch.bind(global);
+
+exports.Headers = global.Headers;
+exports.Request = global.Request;
+exports.Response = global.Response;
\ No newline at end of file
diff --git a/setup-maven/node_modules/node-fetch/lib/index.es.js b/setup-maven/node_modules/node-fetch/lib/index.es.js
new file mode 100644
index 0000000..37d022c
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/lib/index.es.js
@@ -0,0 +1,1633 @@
+process.emitWarning("The .es.js file is deprecated. Use .mjs instead.");
+
+import Stream from 'stream';
+import http from 'http';
+import Url from 'url';
+import https from 'https';
+import zlib from 'zlib';
+
+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+
+// fix for "Readable" isn't a named export issue
+const Readable = Stream.Readable;
+
+const BUFFER = Symbol('buffer');
+const TYPE = Symbol('type');
+
+class Blob {
+	constructor() {
+		this[TYPE] = '';
+
+		const blobParts = arguments[0];
+		const options = arguments[1];
+
+		const buffers = [];
+		let size = 0;
+
+		if (blobParts) {
+			const a = blobParts;
+			const length = Number(a.length);
+			for (let i = 0; i < length; i++) {
+				const element = a[i];
+				let buffer;
+				if (element instanceof Buffer) {
+					buffer = element;
+				} else if (ArrayBuffer.isView(element)) {
+					buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
+				} else if (element instanceof ArrayBuffer) {
+					buffer = Buffer.from(element);
+				} else if (element instanceof Blob) {
+					buffer = element[BUFFER];
+				} else {
+					buffer = Buffer.from(typeof element === 'string' ? element : String(element));
+				}
+				size += buffer.length;
+				buffers.push(buffer);
+			}
+		}
+
+		this[BUFFER] = Buffer.concat(buffers);
+
+		let type = options && options.type !== undefined && String(options.type).toLowerCase();
+		if (type && !/[^\u0020-\u007E]/.test(type)) {
+			this[TYPE] = type;
+		}
+	}
+	get size() {
+		return this[BUFFER].length;
+	}
+	get type() {
+		return this[TYPE];
+	}
+	text() {
+		return Promise.resolve(this[BUFFER].toString());
+	}
+	arrayBuffer() {
+		const buf = this[BUFFER];
+		const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+		return Promise.resolve(ab);
+	}
+	stream() {
+		const readable = new Readable();
+		readable._read = function () {};
+		readable.push(this[BUFFER]);
+		readable.push(null);
+		return readable;
+	}
+	toString() {
+		return '[object Blob]';
+	}
+	slice() {
+		const size = this.size;
+
+		const start = arguments[0];
+		const end = arguments[1];
+		let relativeStart, relativeEnd;
+		if (start === undefined) {
+			relativeStart = 0;
+		} else if (start < 0) {
+			relativeStart = Math.max(size + start, 0);
+		} else {
+			relativeStart = Math.min(start, size);
+		}
+		if (end === undefined) {
+			relativeEnd = size;
+		} else if (end < 0) {
+			relativeEnd = Math.max(size + end, 0);
+		} else {
+			relativeEnd = Math.min(end, size);
+		}
+		const span = Math.max(relativeEnd - relativeStart, 0);
+
+		const buffer = this[BUFFER];
+		const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
+		const blob = new Blob([], { type: arguments[2] });
+		blob[BUFFER] = slicedBuffer;
+		return blob;
+	}
+}
+
+Object.defineProperties(Blob.prototype, {
+	size: { enumerable: true },
+	type: { enumerable: true },
+	slice: { enumerable: true }
+});
+
+Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
+	value: 'Blob',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+/**
+ * fetch-error.js
+ *
+ * FetchError interface for operational errors
+ */
+
+/**
+ * Create FetchError instance
+ *
+ * @param   String      message      Error message for human
+ * @param   String      type         Error type for machine
+ * @param   String      systemError  For Node.js system error
+ * @return  FetchError
+ */
+function FetchError(message, type, systemError) {
+  Error.call(this, message);
+
+  this.message = message;
+  this.type = type;
+
+  // when err.type is `system`, err.code contains system error code
+  if (systemError) {
+    this.code = this.errno = systemError.code;
+  }
+
+  // hide custom error implementation details from end-users
+  Error.captureStackTrace(this, this.constructor);
+}
+
+FetchError.prototype = Object.create(Error.prototype);
+FetchError.prototype.constructor = FetchError;
+FetchError.prototype.name = 'FetchError';
+
+let convert;
+try {
+	convert = require('encoding').convert;
+} catch (e) {}
+
+const INTERNALS = Symbol('Body internals');
+
+// fix an issue where "PassThrough" isn't a named export for node <10
+const PassThrough = Stream.PassThrough;
+
+/**
+ * Body mixin
+ *
+ * Ref: https://fetch.spec.whatwg.org/#body
+ *
+ * @param   Stream  body  Readable stream
+ * @param   Object  opts  Response options
+ * @return  Void
+ */
+function Body(body) {
+	var _this = this;
+
+	var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+	    _ref$size = _ref.size;
+
+	let size = _ref$size === undefined ? 0 : _ref$size;
+	var _ref$timeout = _ref.timeout;
+	let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
+
+	if (body == null) {
+		// body is undefined or null
+		body = null;
+	} else if (isURLSearchParams(body)) {
+		// body is a URLSearchParams
+		body = Buffer.from(body.toString());
+	} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+		// body is ArrayBuffer
+		body = Buffer.from(body);
+	} else if (ArrayBuffer.isView(body)) {
+		// body is ArrayBufferView
+		body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
+	} else if (body instanceof Stream) ; else {
+		// none of the above
+		// coerce to string then buffer
+		body = Buffer.from(String(body));
+	}
+	this[INTERNALS] = {
+		body,
+		disturbed: false,
+		error: null
+	};
+	this.size = size;
+	this.timeout = timeout;
+
+	if (body instanceof Stream) {
+		body.on('error', function (err) {
+			const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
+			_this[INTERNALS].error = error;
+		});
+	}
+}
+
+Body.prototype = {
+	get body() {
+		return this[INTERNALS].body;
+	},
+
+	get bodyUsed() {
+		return this[INTERNALS].disturbed;
+	},
+
+	/**
+  * Decode response as ArrayBuffer
+  *
+  * @return  Promise
+  */
+	arrayBuffer() {
+		return consumeBody.call(this).then(function (buf) {
+			return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+		});
+	},
+
+	/**
+  * Return raw response as Blob
+  *
+  * @return Promise
+  */
+	blob() {
+		let ct = this.headers && this.headers.get('content-type') || '';
+		return consumeBody.call(this).then(function (buf) {
+			return Object.assign(
+			// Prevent copying
+			new Blob([], {
+				type: ct.toLowerCase()
+			}), {
+				[BUFFER]: buf
+			});
+		});
+	},
+
+	/**
+  * Decode response as json
+  *
+  * @return  Promise
+  */
+	json() {
+		var _this2 = this;
+
+		return consumeBody.call(this).then(function (buffer) {
+			try {
+				return JSON.parse(buffer.toString());
+			} catch (err) {
+				return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
+			}
+		});
+	},
+
+	/**
+  * Decode response as text
+  *
+  * @return  Promise
+  */
+	text() {
+		return consumeBody.call(this).then(function (buffer) {
+			return buffer.toString();
+		});
+	},
+
+	/**
+  * Decode response as buffer (non-spec api)
+  *
+  * @return  Promise
+  */
+	buffer() {
+		return consumeBody.call(this);
+	},
+
+	/**
+  * Decode response as text, while automatically detecting the encoding and
+  * trying to decode to UTF-8 (non-spec api)
+  *
+  * @return  Promise
+  */
+	textConverted() {
+		var _this3 = this;
+
+		return consumeBody.call(this).then(function (buffer) {
+			return convertBody(buffer, _this3.headers);
+		});
+	}
+};
+
+// In browsers, all properties are enumerable.
+Object.defineProperties(Body.prototype, {
+	body: { enumerable: true },
+	bodyUsed: { enumerable: true },
+	arrayBuffer: { enumerable: true },
+	blob: { enumerable: true },
+	json: { enumerable: true },
+	text: { enumerable: true }
+});
+
+Body.mixIn = function (proto) {
+	for (const name of Object.getOwnPropertyNames(Body.prototype)) {
+		// istanbul ignore else: future proof
+		if (!(name in proto)) {
+			const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
+			Object.defineProperty(proto, name, desc);
+		}
+	}
+};
+
+/**
+ * Consume and convert an entire Body to a Buffer.
+ *
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
+ *
+ * @return  Promise
+ */
+function consumeBody() {
+	var _this4 = this;
+
+	if (this[INTERNALS].disturbed) {
+		return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
+	}
+
+	this[INTERNALS].disturbed = true;
+
+	if (this[INTERNALS].error) {
+		return Body.Promise.reject(this[INTERNALS].error);
+	}
+
+	let body = this.body;
+
+	// body is null
+	if (body === null) {
+		return Body.Promise.resolve(Buffer.alloc(0));
+	}
+
+	// body is blob
+	if (isBlob(body)) {
+		body = body.stream();
+	}
+
+	// body is buffer
+	if (Buffer.isBuffer(body)) {
+		return Body.Promise.resolve(body);
+	}
+
+	// istanbul ignore if: should never happen
+	if (!(body instanceof Stream)) {
+		return Body.Promise.resolve(Buffer.alloc(0));
+	}
+
+	// body is stream
+	// get ready to actually consume the body
+	let accum = [];
+	let accumBytes = 0;
+	let abort = false;
+
+	return new Body.Promise(function (resolve, reject) {
+		let resTimeout;
+
+		// allow timeout on slow response body
+		if (_this4.timeout) {
+			resTimeout = setTimeout(function () {
+				abort = true;
+				reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
+			}, _this4.timeout);
+		}
+
+		// handle stream errors
+		body.on('error', function (err) {
+			if (err.name === 'AbortError') {
+				// if the request was aborted, reject with this Error
+				abort = true;
+				reject(err);
+			} else {
+				// other errors, such as incorrect content-encoding
+				reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
+			}
+		});
+
+		body.on('data', function (chunk) {
+			if (abort || chunk === null) {
+				return;
+			}
+
+			if (_this4.size && accumBytes + chunk.length > _this4.size) {
+				abort = true;
+				reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
+				return;
+			}
+
+			accumBytes += chunk.length;
+			accum.push(chunk);
+		});
+
+		body.on('end', function () {
+			if (abort) {
+				return;
+			}
+
+			clearTimeout(resTimeout);
+
+			try {
+				resolve(Buffer.concat(accum, accumBytes));
+			} catch (err) {
+				// handle streams that have accumulated too much data (issue #414)
+				reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
+			}
+		});
+	});
+}
+
+/**
+ * Detect buffer encoding and convert to target encoding
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
+ *
+ * @param   Buffer  buffer    Incoming buffer
+ * @param   String  encoding  Target encoding
+ * @return  String
+ */
+function convertBody(buffer, headers) {
+	if (typeof convert !== 'function') {
+		throw new Error('The package `encoding` must be installed to use the textConverted() function');
+	}
+
+	const ct = headers.get('content-type');
+	let charset = 'utf-8';
+	let res, str;
+
+	// header
+	if (ct) {
+		res = /charset=([^;]*)/i.exec(ct);
+	}
+
+	// no charset in content type, peek at response body for at most 1024 bytes
+	str = buffer.slice(0, 1024).toString();
+
+	// html5
+	if (!res && str) {
+		res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
+	}
+
+	// html4
+	if (!res && str) {
+		res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
+
+		if (res) {
+			res = /charset=(.*)/i.exec(res.pop());
+		}
+	}
+
+	// xml
+	if (!res && str) {
+		res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
+	}
+
+	// found charset
+	if (res) {
+		charset = res.pop();
+
+		// prevent decode issues when sites use incorrect encoding
+		// ref: https://hsivonen.fi/encoding-menu/
+		if (charset === 'gb2312' || charset === 'gbk') {
+			charset = 'gb18030';
+		}
+	}
+
+	// turn raw buffers into a single utf-8 buffer
+	return convert(buffer, 'UTF-8', charset).toString();
+}
+
+/**
+ * Detect a URLSearchParams object
+ * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
+ *
+ * @param   Object  obj     Object to detect by type or brand
+ * @return  String
+ */
+function isURLSearchParams(obj) {
+	// Duck-typing as a necessary condition.
+	if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
+		return false;
+	}
+
+	// Brand-checking and more duck-typing as optional condition.
+	return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
+}
+
+/**
+ * Check if `obj` is a W3C `Blob` object (which `File` inherits from)
+ * @param  {*} obj
+ * @return {boolean}
+ */
+function isBlob(obj) {
+	return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
+}
+
+/**
+ * Clone body given Res/Req instance
+ *
+ * @param   Mixed  instance  Response or Request instance
+ * @return  Mixed
+ */
+function clone(instance) {
+	let p1, p2;
+	let body = instance.body;
+
+	// don't allow cloning a used body
+	if (instance.bodyUsed) {
+		throw new Error('cannot clone body after it is used');
+	}
+
+	// check that body is a stream and not form-data object
+	// note: we can't clone the form-data object without having it as a dependency
+	if (body instanceof Stream && typeof body.getBoundary !== 'function') {
+		// tee instance body
+		p1 = new PassThrough();
+		p2 = new PassThrough();
+		body.pipe(p1);
+		body.pipe(p2);
+		// set instance body to teed body and return the other teed body
+		instance[INTERNALS].body = p1;
+		body = p2;
+	}
+
+	return body;
+}
+
+/**
+ * Performs the operation "extract a `Content-Type` value from |object|" as
+ * specified in the specification:
+ * https://fetch.spec.whatwg.org/#concept-bodyinit-extract
+ *
+ * This function assumes that instance.body is present.
+ *
+ * @param   Mixed  instance  Any options.body input
+ */
+function extractContentType(body) {
+	if (body === null) {
+		// body is null
+		return null;
+	} else if (typeof body === 'string') {
+		// body is string
+		return 'text/plain;charset=UTF-8';
+	} else if (isURLSearchParams(body)) {
+		// body is a URLSearchParams
+		return 'application/x-www-form-urlencoded;charset=UTF-8';
+	} else if (isBlob(body)) {
+		// body is blob
+		return body.type || null;
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		return null;
+	} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+		// body is ArrayBuffer
+		return null;
+	} else if (ArrayBuffer.isView(body)) {
+		// body is ArrayBufferView
+		return null;
+	} else if (typeof body.getBoundary === 'function') {
+		// detect form data input from form-data module
+		return `multipart/form-data;boundary=${body.getBoundary()}`;
+	} else if (body instanceof Stream) {
+		// body is stream
+		// can't really do much about this
+		return null;
+	} else {
+		// Body constructor defaults other things to string
+		return 'text/plain;charset=UTF-8';
+	}
+}
+
+/**
+ * The Fetch Standard treats this as if "total bytes" is a property on the body.
+ * For us, we have to explicitly get it with a function.
+ *
+ * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
+ *
+ * @param   Body    instance   Instance of Body
+ * @return  Number?            Number of bytes, or null if not possible
+ */
+function getTotalBytes(instance) {
+	const body = instance.body;
+
+
+	if (body === null) {
+		// body is null
+		return 0;
+	} else if (isBlob(body)) {
+		return body.size;
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		return body.length;
+	} else if (body && typeof body.getLengthSync === 'function') {
+		// detect form data input from form-data module
+		if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
+		body.hasKnownLength && body.hasKnownLength()) {
+			// 2.x
+			return body.getLengthSync();
+		}
+		return null;
+	} else {
+		// body is stream
+		return null;
+	}
+}
+
+/**
+ * Write a Body to a Node.js WritableStream (e.g. http.Request) object.
+ *
+ * @param   Body    instance   Instance of Body
+ * @return  Void
+ */
+function writeToStream(dest, instance) {
+	const body = instance.body;
+
+
+	if (body === null) {
+		// body is null
+		dest.end();
+	} else if (isBlob(body)) {
+		body.stream().pipe(dest);
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		dest.write(body);
+		dest.end();
+	} else {
+		// body is stream
+		body.pipe(dest);
+	}
+}
+
+// expose Promise
+Body.Promise = global.Promise;
+
+/**
+ * headers.js
+ *
+ * Headers class offers convenient helpers
+ */
+
+const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
+const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+
+function validateName(name) {
+	name = `${name}`;
+	if (invalidTokenRegex.test(name) || name === '') {
+		throw new TypeError(`${name} is not a legal HTTP header name`);
+	}
+}
+
+function validateValue(value) {
+	value = `${value}`;
+	if (invalidHeaderCharRegex.test(value)) {
+		throw new TypeError(`${value} is not a legal HTTP header value`);
+	}
+}
+
+/**
+ * Find the key in the map object given a header name.
+ *
+ * Returns undefined if not found.
+ *
+ * @param   String  name  Header name
+ * @return  String|Undefined
+ */
+function find(map, name) {
+	name = name.toLowerCase();
+	for (const key in map) {
+		if (key.toLowerCase() === name) {
+			return key;
+		}
+	}
+	return undefined;
+}
+
+const MAP = Symbol('map');
+class Headers {
+	/**
+  * Headers class
+  *
+  * @param   Object  headers  Response headers
+  * @return  Void
+  */
+	constructor() {
+		let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
+
+		this[MAP] = Object.create(null);
+
+		if (init instanceof Headers) {
+			const rawHeaders = init.raw();
+			const headerNames = Object.keys(rawHeaders);
+
+			for (const headerName of headerNames) {
+				for (const value of rawHeaders[headerName]) {
+					this.append(headerName, value);
+				}
+			}
+
+			return;
+		}
+
+		// We don't worry about converting prop to ByteString here as append()
+		// will handle it.
+		if (init == null) ; else if (typeof init === 'object') {
+			const method = init[Symbol.iterator];
+			if (method != null) {
+				if (typeof method !== 'function') {
+					throw new TypeError('Header pairs must be iterable');
+				}
+
+				// sequence<sequence<ByteString>>
+				// Note: per spec we have to first exhaust the lists then process them
+				const pairs = [];
+				for (const pair of init) {
+					if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
+						throw new TypeError('Each header pair must be iterable');
+					}
+					pairs.push(Array.from(pair));
+				}
+
+				for (const pair of pairs) {
+					if (pair.length !== 2) {
+						throw new TypeError('Each header pair must be a name/value tuple');
+					}
+					this.append(pair[0], pair[1]);
+				}
+			} else {
+				// record<ByteString, ByteString>
+				for (const key of Object.keys(init)) {
+					const value = init[key];
+					this.append(key, value);
+				}
+			}
+		} else {
+			throw new TypeError('Provided initializer must be an object');
+		}
+	}
+
+	/**
+  * Return combined header value given name
+  *
+  * @param   String  name  Header name
+  * @return  Mixed
+  */
+	get(name) {
+		name = `${name}`;
+		validateName(name);
+		const key = find(this[MAP], name);
+		if (key === undefined) {
+			return null;
+		}
+
+		return this[MAP][key].join(', ');
+	}
+
+	/**
+  * Iterate over all headers
+  *
+  * @param   Function  callback  Executed for each item with parameters (value, name, thisArg)
+  * @param   Boolean   thisArg   `this` context for callback function
+  * @return  Void
+  */
+	forEach(callback) {
+		let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+
+		let pairs = getHeaders(this);
+		let i = 0;
+		while (i < pairs.length) {
+			var _pairs$i = pairs[i];
+			const name = _pairs$i[0],
+			      value = _pairs$i[1];
+
+			callback.call(thisArg, value, name, this);
+			pairs = getHeaders(this);
+			i++;
+		}
+	}
+
+	/**
+  * Overwrite header values given name
+  *
+  * @param   String  name   Header name
+  * @param   String  value  Header value
+  * @return  Void
+  */
+	set(name, value) {
+		name = `${name}`;
+		value = `${value}`;
+		validateName(name);
+		validateValue(value);
+		const key = find(this[MAP], name);
+		this[MAP][key !== undefined ? key : name] = [value];
+	}
+
+	/**
+  * Append a value onto existing header
+  *
+  * @param   String  name   Header name
+  * @param   String  value  Header value
+  * @return  Void
+  */
+	append(name, value) {
+		name = `${name}`;
+		value = `${value}`;
+		validateName(name);
+		validateValue(value);
+		const key = find(this[MAP], name);
+		if (key !== undefined) {
+			this[MAP][key].push(value);
+		} else {
+			this[MAP][name] = [value];
+		}
+	}
+
+	/**
+  * Check for header name existence
+  *
+  * @param   String   name  Header name
+  * @return  Boolean
+  */
+	has(name) {
+		name = `${name}`;
+		validateName(name);
+		return find(this[MAP], name) !== undefined;
+	}
+
+	/**
+  * Delete all header values given name
+  *
+  * @param   String  name  Header name
+  * @return  Void
+  */
+	delete(name) {
+		name = `${name}`;
+		validateName(name);
+		const key = find(this[MAP], name);
+		if (key !== undefined) {
+			delete this[MAP][key];
+		}
+	}
+
+	/**
+  * Return raw headers (non-spec api)
+  *
+  * @return  Object
+  */
+	raw() {
+		return this[MAP];
+	}
+
+	/**
+  * Get an iterator on keys.
+  *
+  * @return  Iterator
+  */
+	keys() {
+		return createHeadersIterator(this, 'key');
+	}
+
+	/**
+  * Get an iterator on values.
+  *
+  * @return  Iterator
+  */
+	values() {
+		return createHeadersIterator(this, 'value');
+	}
+
+	/**
+  * Get an iterator on entries.
+  *
+  * This is the default iterator of the Headers object.
+  *
+  * @return  Iterator
+  */
+	[Symbol.iterator]() {
+		return createHeadersIterator(this, 'key+value');
+	}
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+	value: 'Headers',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+Object.defineProperties(Headers.prototype, {
+	get: { enumerable: true },
+	forEach: { enumerable: true },
+	set: { enumerable: true },
+	append: { enumerable: true },
+	has: { enumerable: true },
+	delete: { enumerable: true },
+	keys: { enumerable: true },
+	values: { enumerable: true },
+	entries: { enumerable: true }
+});
+
+function getHeaders(headers) {
+	let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+
+	const keys = Object.keys(headers[MAP]).sort();
+	return keys.map(kind === 'key' ? function (k) {
+		return k.toLowerCase();
+	} : kind === 'value' ? function (k) {
+		return headers[MAP][k].join(', ');
+	} : function (k) {
+		return [k.toLowerCase(), headers[MAP][k].join(', ')];
+	});
+}
+
+const INTERNAL = Symbol('internal');
+
+function createHeadersIterator(target, kind) {
+	const iterator = Object.create(HeadersIteratorPrototype);
+	iterator[INTERNAL] = {
+		target,
+		kind,
+		index: 0
+	};
+	return iterator;
+}
+
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+	next() {
+		// istanbul ignore if
+		if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+			throw new TypeError('Value of `this` is not a HeadersIterator');
+		}
+
+		var _INTERNAL = this[INTERNAL];
+		const target = _INTERNAL.target,
+		      kind = _INTERNAL.kind,
+		      index = _INTERNAL.index;
+
+		const values = getHeaders(target, kind);
+		const len = values.length;
+		if (index >= len) {
+			return {
+				value: undefined,
+				done: true
+			};
+		}
+
+		this[INTERNAL].index = index + 1;
+
+		return {
+			value: values[index],
+			done: false
+		};
+	}
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+	value: 'HeadersIterator',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param   Headers  headers
+ * @return  Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+	const obj = Object.assign({ __proto__: null }, headers[MAP]);
+
+	// http.request() only supports string as Host header. This hack makes
+	// specifying custom Host header possible.
+	const hostHeaderKey = find(headers[MAP], 'Host');
+	if (hostHeaderKey !== undefined) {
+		obj[hostHeaderKey] = obj[hostHeaderKey][0];
+	}
+
+	return obj;
+}
+
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param   Object  obj  Object of headers
+ * @return  Headers
+ */
+function createHeadersLenient(obj) {
+	const headers = new Headers();
+	for (const name of Object.keys(obj)) {
+		if (invalidTokenRegex.test(name)) {
+			continue;
+		}
+		if (Array.isArray(obj[name])) {
+			for (const val of obj[name]) {
+				if (invalidHeaderCharRegex.test(val)) {
+					continue;
+				}
+				if (headers[MAP][name] === undefined) {
+					headers[MAP][name] = [val];
+				} else {
+					headers[MAP][name].push(val);
+				}
+			}
+		} else if (!invalidHeaderCharRegex.test(obj[name])) {
+			headers[MAP][name] = [obj[name]];
+		}
+	}
+	return headers;
+}
+
+const INTERNALS$1 = Symbol('Response internals');
+
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
+
+/**
+ * Response class
+ *
+ * @param   Stream  body  Readable stream
+ * @param   Object  opts  Response options
+ * @return  Void
+ */
+class Response {
+	constructor() {
+		let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+		let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+		Body.call(this, body, opts);
+
+		const status = opts.status || 200;
+		const headers = new Headers(opts.headers);
+
+		if (body != null && !headers.has('Content-Type')) {
+			const contentType = extractContentType(body);
+			if (contentType) {
+				headers.append('Content-Type', contentType);
+			}
+		}
+
+		this[INTERNALS$1] = {
+			url: opts.url,
+			status,
+			statusText: opts.statusText || STATUS_CODES[status],
+			headers,
+			counter: opts.counter
+		};
+	}
+
+	get url() {
+		return this[INTERNALS$1].url || '';
+	}
+
+	get status() {
+		return this[INTERNALS$1].status;
+	}
+
+	/**
+  * Convenience property representing if the request ended normally
+  */
+	get ok() {
+		return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+	}
+
+	get redirected() {
+		return this[INTERNALS$1].counter > 0;
+	}
+
+	get statusText() {
+		return this[INTERNALS$1].statusText;
+	}
+
+	get headers() {
+		return this[INTERNALS$1].headers;
+	}
+
+	/**
+  * Clone this response
+  *
+  * @return  Response
+  */
+	clone() {
+		return new Response(clone(this), {
+			url: this.url,
+			status: this.status,
+			statusText: this.statusText,
+			headers: this.headers,
+			ok: this.ok,
+			redirected: this.redirected
+		});
+	}
+}
+
+Body.mixIn(Response.prototype);
+
+Object.defineProperties(Response.prototype, {
+	url: { enumerable: true },
+	status: { enumerable: true },
+	ok: { enumerable: true },
+	redirected: { enumerable: true },
+	statusText: { enumerable: true },
+	headers: { enumerable: true },
+	clone: { enumerable: true }
+});
+
+Object.defineProperty(Response.prototype, Symbol.toStringTag, {
+	value: 'Response',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+const INTERNALS$2 = Symbol('Request internals');
+
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url.parse;
+const format_url = Url.format;
+
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param   Mixed   input
+ * @return  Boolean
+ */
+function isRequest(input) {
+	return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
+
+function isAbortSignal(signal) {
+	const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+	return !!(proto && proto.constructor.name === 'AbortSignal');
+}
+
+/**
+ * Request class
+ *
+ * @param   Mixed   input  Url or Request instance
+ * @param   Object  init   Custom options
+ * @return  Void
+ */
+class Request {
+	constructor(input) {
+		let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+		let parsedURL;
+
+		// normalize input
+		if (!isRequest(input)) {
+			if (input && input.href) {
+				// in order to support Node.js' Url objects; though WHATWG's URL objects
+				// will fall into this branch also (since their `toString()` will return
+				// `href` property anyway)
+				parsedURL = parse_url(input.href);
+			} else {
+				// coerce input to a string before attempting to parse
+				parsedURL = parse_url(`${input}`);
+			}
+			input = {};
+		} else {
+			parsedURL = parse_url(input.url);
+		}
+
+		let method = init.method || input.method || 'GET';
+		method = method.toUpperCase();
+
+		if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+			throw new TypeError('Request with GET/HEAD method cannot have body');
+		}
+
+		let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
+
+		Body.call(this, inputBody, {
+			timeout: init.timeout || input.timeout || 0,
+			size: init.size || input.size || 0
+		});
+
+		const headers = new Headers(init.headers || input.headers || {});
+
+		if (inputBody != null && !headers.has('Content-Type')) {
+			const contentType = extractContentType(inputBody);
+			if (contentType) {
+				headers.append('Content-Type', contentType);
+			}
+		}
+
+		let signal = isRequest(input) ? input.signal : null;
+		if ('signal' in init) signal = init.signal;
+
+		if (signal != null && !isAbortSignal(signal)) {
+			throw new TypeError('Expected signal to be an instanceof AbortSignal');
+		}
+
+		this[INTERNALS$2] = {
+			method,
+			redirect: init.redirect || input.redirect || 'follow',
+			headers,
+			parsedURL,
+			signal
+		};
+
+		// node-fetch-only options
+		this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+		this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+		this.counter = init.counter || input.counter || 0;
+		this.agent = init.agent || input.agent;
+	}
+
+	get method() {
+		return this[INTERNALS$2].method;
+	}
+
+	get url() {
+		return format_url(this[INTERNALS$2].parsedURL);
+	}
+
+	get headers() {
+		return this[INTERNALS$2].headers;
+	}
+
+	get redirect() {
+		return this[INTERNALS$2].redirect;
+	}
+
+	get signal() {
+		return this[INTERNALS$2].signal;
+	}
+
+	/**
+  * Clone this request
+  *
+  * @return  Request
+  */
+	clone() {
+		return new Request(this);
+	}
+}
+
+Body.mixIn(Request.prototype);
+
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+	value: 'Request',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+Object.defineProperties(Request.prototype, {
+	method: { enumerable: true },
+	url: { enumerable: true },
+	headers: { enumerable: true },
+	redirect: { enumerable: true },
+	clone: { enumerable: true },
+	signal: { enumerable: true }
+});
+
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param   Request  A Request instance
+ * @return  Object   The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+	const parsedURL = request[INTERNALS$2].parsedURL;
+	const headers = new Headers(request[INTERNALS$2].headers);
+
+	// fetch step 1.3
+	if (!headers.has('Accept')) {
+		headers.set('Accept', '*/*');
+	}
+
+	// Basic fetch
+	if (!parsedURL.protocol || !parsedURL.hostname) {
+		throw new TypeError('Only absolute URLs are supported');
+	}
+
+	if (!/^https?:$/.test(parsedURL.protocol)) {
+		throw new TypeError('Only HTTP(S) protocols are supported');
+	}
+
+	if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+		throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+	}
+
+	// HTTP-network-or-cache fetch steps 2.4-2.7
+	let contentLengthValue = null;
+	if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+		contentLengthValue = '0';
+	}
+	if (request.body != null) {
+		const totalBytes = getTotalBytes(request);
+		if (typeof totalBytes === 'number') {
+			contentLengthValue = String(totalBytes);
+		}
+	}
+	if (contentLengthValue) {
+		headers.set('Content-Length', contentLengthValue);
+	}
+
+	// HTTP-network-or-cache fetch step 2.11
+	if (!headers.has('User-Agent')) {
+		headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+	}
+
+	// HTTP-network-or-cache fetch step 2.15
+	if (request.compress && !headers.has('Accept-Encoding')) {
+		headers.set('Accept-Encoding', 'gzip,deflate');
+	}
+
+	let agent = request.agent;
+	if (typeof agent === 'function') {
+		agent = agent(parsedURL);
+	}
+
+	if (!headers.has('Connection') && !agent) {
+		headers.set('Connection', 'close');
+	}
+
+	// HTTP-network fetch step 4.2
+	// chunked encoding is handled by Node.js
+
+	return Object.assign({}, parsedURL, {
+		method: request.method,
+		headers: exportNodeCompatibleHeaders(headers),
+		agent
+	});
+}
+
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
+
+/**
+ * Create AbortError instance
+ *
+ * @param   String      message      Error message for human
+ * @return  AbortError
+ */
+function AbortError(message) {
+  Error.call(this, message);
+
+  this.type = 'aborted';
+  this.message = message;
+
+  // hide custom error implementation details from end-users
+  Error.captureStackTrace(this, this.constructor);
+}
+
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
+
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+const resolve_url = Url.resolve;
+
+/**
+ * Fetch function
+ *
+ * @param   Mixed    url   Absolute url or Request instance
+ * @param   Object   opts  Fetch options
+ * @return  Promise
+ */
+function fetch(url, opts) {
+
+	// allow custom promise
+	if (!fetch.Promise) {
+		throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
+	}
+
+	Body.Promise = fetch.Promise;
+
+	// wrap http.request into fetch
+	return new fetch.Promise(function (resolve, reject) {
+		// build request object
+		const request = new Request(url, opts);
+		const options = getNodeRequestOptions(request);
+
+		const send = (options.protocol === 'https:' ? https : http).request;
+		const signal = request.signal;
+
+		let response = null;
+
+		const abort = function abort() {
+			let error = new AbortError('The user aborted a request.');
+			reject(error);
+			if (request.body && request.body instanceof Stream.Readable) {
+				request.body.destroy(error);
+			}
+			if (!response || !response.body) return;
+			response.body.emit('error', error);
+		};
+
+		if (signal && signal.aborted) {
+			abort();
+			return;
+		}
+
+		const abortAndFinalize = function abortAndFinalize() {
+			abort();
+			finalize();
+		};
+
+		// send request
+		const req = send(options);
+		let reqTimeout;
+
+		if (signal) {
+			signal.addEventListener('abort', abortAndFinalize);
+		}
+
+		function finalize() {
+			req.abort();
+			if (signal) signal.removeEventListener('abort', abortAndFinalize);
+			clearTimeout(reqTimeout);
+		}
+
+		if (request.timeout) {
+			req.once('socket', function (socket) {
+				reqTimeout = setTimeout(function () {
+					reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+					finalize();
+				}, request.timeout);
+			});
+		}
+
+		req.on('error', function (err) {
+			reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+			finalize();
+		});
+
+		req.on('response', function (res) {
+			clearTimeout(reqTimeout);
+
+			const headers = createHeadersLenient(res.headers);
+
+			// HTTP fetch step 5
+			if (fetch.isRedirect(res.statusCode)) {
+				// HTTP fetch step 5.2
+				const location = headers.get('Location');
+
+				// HTTP fetch step 5.3
+				const locationURL = location === null ? null : resolve_url(request.url, location);
+
+				// HTTP fetch step 5.5
+				switch (request.redirect) {
+					case 'error':
+						reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));
+						finalize();
+						return;
+					case 'manual':
+						// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
+						if (locationURL !== null) {
+							// handle corrupted header
+							try {
+								headers.set('Location', locationURL);
+							} catch (err) {
+								// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
+								reject(err);
+							}
+						}
+						break;
+					case 'follow':
+						// HTTP-redirect fetch step 2
+						if (locationURL === null) {
+							break;
+						}
+
+						// HTTP-redirect fetch step 5
+						if (request.counter >= request.follow) {
+							reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
+							finalize();
+							return;
+						}
+
+						// HTTP-redirect fetch step 6 (counter increment)
+						// Create a new Request object.
+						const requestOpts = {
+							headers: new Headers(request.headers),
+							follow: request.follow,
+							counter: request.counter + 1,
+							agent: request.agent,
+							compress: request.compress,
+							method: request.method,
+							body: request.body,
+							signal: request.signal,
+							timeout: request.timeout
+						};
+
+						// HTTP-redirect fetch step 9
+						if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+							reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
+							finalize();
+							return;
+						}
+
+						// HTTP-redirect fetch step 11
+						if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
+							requestOpts.method = 'GET';
+							requestOpts.body = undefined;
+							requestOpts.headers.delete('content-length');
+						}
+
+						// HTTP-redirect fetch step 15
+						resolve(fetch(new Request(locationURL, requestOpts)));
+						finalize();
+						return;
+				}
+			}
+
+			// prepare response
+			res.once('end', function () {
+				if (signal) signal.removeEventListener('abort', abortAndFinalize);
+			});
+			let body = res.pipe(new PassThrough$1());
+
+			const response_options = {
+				url: request.url,
+				status: res.statusCode,
+				statusText: res.statusMessage,
+				headers: headers,
+				size: request.size,
+				timeout: request.timeout,
+				counter: request.counter
+			};
+
+			// HTTP-network fetch step 12.1.1.3
+			const codings = headers.get('Content-Encoding');
+
+			// HTTP-network fetch step 12.1.1.4: handle content codings
+
+			// in following scenarios we ignore compression support
+			// 1. compression support is disabled
+			// 2. HEAD request
+			// 3. no Content-Encoding header
+			// 4. no content response (204)
+			// 5. content not modified response (304)
+			if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// For Node v6+
+			// Be less strict when decoding compressed responses, since sometimes
+			// servers send slightly invalid responses that are still accepted
+			// by common browsers.
+			// Always using Z_SYNC_FLUSH is what cURL does.
+			const zlibOptions = {
+				flush: zlib.Z_SYNC_FLUSH,
+				finishFlush: zlib.Z_SYNC_FLUSH
+			};
+
+			// for gzip
+			if (codings == 'gzip' || codings == 'x-gzip') {
+				body = body.pipe(zlib.createGunzip(zlibOptions));
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// for deflate
+			if (codings == 'deflate' || codings == 'x-deflate') {
+				// handle the infamous raw deflate response from old servers
+				// a hack for old IIS and Apache servers
+				const raw = res.pipe(new PassThrough$1());
+				raw.once('data', function (chunk) {
+					// see http://stackoverflow.com/questions/37519828
+					if ((chunk[0] & 0x0F) === 0x08) {
+						body = body.pipe(zlib.createInflate());
+					} else {
+						body = body.pipe(zlib.createInflateRaw());
+					}
+					response = new Response(body, response_options);
+					resolve(response);
+				});
+				return;
+			}
+
+			// for br
+			if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
+				body = body.pipe(zlib.createBrotliDecompress());
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// otherwise, use response as-is
+			response = new Response(body, response_options);
+			resolve(response);
+		});
+
+		writeToStream(req, request);
+	});
+}
+/**
+ * Redirect code matching
+ *
+ * @param   Number   code  Status code
+ * @return  Boolean
+ */
+fetch.isRedirect = function (code) {
+	return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+};
+
+// expose Promise
+fetch.Promise = global.Promise;
+
+export default fetch;
+export { Headers, Request, Response, FetchError };
diff --git a/setup-maven/node_modules/node-fetch/lib/index.js b/setup-maven/node_modules/node-fetch/lib/index.js
new file mode 100644
index 0000000..daa44bc
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/lib/index.js
@@ -0,0 +1,1642 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var Stream = _interopDefault(require('stream'));
+var http = _interopDefault(require('http'));
+var Url = _interopDefault(require('url'));
+var https = _interopDefault(require('https'));
+var zlib = _interopDefault(require('zlib'));
+
+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+
+// fix for "Readable" isn't a named export issue
+const Readable = Stream.Readable;
+
+const BUFFER = Symbol('buffer');
+const TYPE = Symbol('type');
+
+class Blob {
+	constructor() {
+		this[TYPE] = '';
+
+		const blobParts = arguments[0];
+		const options = arguments[1];
+
+		const buffers = [];
+		let size = 0;
+
+		if (blobParts) {
+			const a = blobParts;
+			const length = Number(a.length);
+			for (let i = 0; i < length; i++) {
+				const element = a[i];
+				let buffer;
+				if (element instanceof Buffer) {
+					buffer = element;
+				} else if (ArrayBuffer.isView(element)) {
+					buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
+				} else if (element instanceof ArrayBuffer) {
+					buffer = Buffer.from(element);
+				} else if (element instanceof Blob) {
+					buffer = element[BUFFER];
+				} else {
+					buffer = Buffer.from(typeof element === 'string' ? element : String(element));
+				}
+				size += buffer.length;
+				buffers.push(buffer);
+			}
+		}
+
+		this[BUFFER] = Buffer.concat(buffers);
+
+		let type = options && options.type !== undefined && String(options.type).toLowerCase();
+		if (type && !/[^\u0020-\u007E]/.test(type)) {
+			this[TYPE] = type;
+		}
+	}
+	get size() {
+		return this[BUFFER].length;
+	}
+	get type() {
+		return this[TYPE];
+	}
+	text() {
+		return Promise.resolve(this[BUFFER].toString());
+	}
+	arrayBuffer() {
+		const buf = this[BUFFER];
+		const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+		return Promise.resolve(ab);
+	}
+	stream() {
+		const readable = new Readable();
+		readable._read = function () {};
+		readable.push(this[BUFFER]);
+		readable.push(null);
+		return readable;
+	}
+	toString() {
+		return '[object Blob]';
+	}
+	slice() {
+		const size = this.size;
+
+		const start = arguments[0];
+		const end = arguments[1];
+		let relativeStart, relativeEnd;
+		if (start === undefined) {
+			relativeStart = 0;
+		} else if (start < 0) {
+			relativeStart = Math.max(size + start, 0);
+		} else {
+			relativeStart = Math.min(start, size);
+		}
+		if (end === undefined) {
+			relativeEnd = size;
+		} else if (end < 0) {
+			relativeEnd = Math.max(size + end, 0);
+		} else {
+			relativeEnd = Math.min(end, size);
+		}
+		const span = Math.max(relativeEnd - relativeStart, 0);
+
+		const buffer = this[BUFFER];
+		const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
+		const blob = new Blob([], { type: arguments[2] });
+		blob[BUFFER] = slicedBuffer;
+		return blob;
+	}
+}
+
+Object.defineProperties(Blob.prototype, {
+	size: { enumerable: true },
+	type: { enumerable: true },
+	slice: { enumerable: true }
+});
+
+Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
+	value: 'Blob',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+/**
+ * fetch-error.js
+ *
+ * FetchError interface for operational errors
+ */
+
+/**
+ * Create FetchError instance
+ *
+ * @param   String      message      Error message for human
+ * @param   String      type         Error type for machine
+ * @param   String      systemError  For Node.js system error
+ * @return  FetchError
+ */
+function FetchError(message, type, systemError) {
+  Error.call(this, message);
+
+  this.message = message;
+  this.type = type;
+
+  // when err.type is `system`, err.code contains system error code
+  if (systemError) {
+    this.code = this.errno = systemError.code;
+  }
+
+  // hide custom error implementation details from end-users
+  Error.captureStackTrace(this, this.constructor);
+}
+
+FetchError.prototype = Object.create(Error.prototype);
+FetchError.prototype.constructor = FetchError;
+FetchError.prototype.name = 'FetchError';
+
+let convert;
+try {
+	convert = require('encoding').convert;
+} catch (e) {}
+
+const INTERNALS = Symbol('Body internals');
+
+// fix an issue where "PassThrough" isn't a named export for node <10
+const PassThrough = Stream.PassThrough;
+
+/**
+ * Body mixin
+ *
+ * Ref: https://fetch.spec.whatwg.org/#body
+ *
+ * @param   Stream  body  Readable stream
+ * @param   Object  opts  Response options
+ * @return  Void
+ */
+function Body(body) {
+	var _this = this;
+
+	var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+	    _ref$size = _ref.size;
+
+	let size = _ref$size === undefined ? 0 : _ref$size;
+	var _ref$timeout = _ref.timeout;
+	let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
+
+	if (body == null) {
+		// body is undefined or null
+		body = null;
+	} else if (isURLSearchParams(body)) {
+		// body is a URLSearchParams
+		body = Buffer.from(body.toString());
+	} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+		// body is ArrayBuffer
+		body = Buffer.from(body);
+	} else if (ArrayBuffer.isView(body)) {
+		// body is ArrayBufferView
+		body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
+	} else if (body instanceof Stream) ; else {
+		// none of the above
+		// coerce to string then buffer
+		body = Buffer.from(String(body));
+	}
+	this[INTERNALS] = {
+		body,
+		disturbed: false,
+		error: null
+	};
+	this.size = size;
+	this.timeout = timeout;
+
+	if (body instanceof Stream) {
+		body.on('error', function (err) {
+			const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
+			_this[INTERNALS].error = error;
+		});
+	}
+}
+
+Body.prototype = {
+	get body() {
+		return this[INTERNALS].body;
+	},
+
+	get bodyUsed() {
+		return this[INTERNALS].disturbed;
+	},
+
+	/**
+  * Decode response as ArrayBuffer
+  *
+  * @return  Promise
+  */
+	arrayBuffer() {
+		return consumeBody.call(this).then(function (buf) {
+			return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+		});
+	},
+
+	/**
+  * Return raw response as Blob
+  *
+  * @return Promise
+  */
+	blob() {
+		let ct = this.headers && this.headers.get('content-type') || '';
+		return consumeBody.call(this).then(function (buf) {
+			return Object.assign(
+			// Prevent copying
+			new Blob([], {
+				type: ct.toLowerCase()
+			}), {
+				[BUFFER]: buf
+			});
+		});
+	},
+
+	/**
+  * Decode response as json
+  *
+  * @return  Promise
+  */
+	json() {
+		var _this2 = this;
+
+		return consumeBody.call(this).then(function (buffer) {
+			try {
+				return JSON.parse(buffer.toString());
+			} catch (err) {
+				return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
+			}
+		});
+	},
+
+	/**
+  * Decode response as text
+  *
+  * @return  Promise
+  */
+	text() {
+		return consumeBody.call(this).then(function (buffer) {
+			return buffer.toString();
+		});
+	},
+
+	/**
+  * Decode response as buffer (non-spec api)
+  *
+  * @return  Promise
+  */
+	buffer() {
+		return consumeBody.call(this);
+	},
+
+	/**
+  * Decode response as text, while automatically detecting the encoding and
+  * trying to decode to UTF-8 (non-spec api)
+  *
+  * @return  Promise
+  */
+	textConverted() {
+		var _this3 = this;
+
+		return consumeBody.call(this).then(function (buffer) {
+			return convertBody(buffer, _this3.headers);
+		});
+	}
+};
+
+// In browsers, all properties are enumerable.
+Object.defineProperties(Body.prototype, {
+	body: { enumerable: true },
+	bodyUsed: { enumerable: true },
+	arrayBuffer: { enumerable: true },
+	blob: { enumerable: true },
+	json: { enumerable: true },
+	text: { enumerable: true }
+});
+
+Body.mixIn = function (proto) {
+	for (const name of Object.getOwnPropertyNames(Body.prototype)) {
+		// istanbul ignore else: future proof
+		if (!(name in proto)) {
+			const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
+			Object.defineProperty(proto, name, desc);
+		}
+	}
+};
+
+/**
+ * Consume and convert an entire Body to a Buffer.
+ *
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
+ *
+ * @return  Promise
+ */
+function consumeBody() {
+	var _this4 = this;
+
+	if (this[INTERNALS].disturbed) {
+		return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
+	}
+
+	this[INTERNALS].disturbed = true;
+
+	if (this[INTERNALS].error) {
+		return Body.Promise.reject(this[INTERNALS].error);
+	}
+
+	let body = this.body;
+
+	// body is null
+	if (body === null) {
+		return Body.Promise.resolve(Buffer.alloc(0));
+	}
+
+	// body is blob
+	if (isBlob(body)) {
+		body = body.stream();
+	}
+
+	// body is buffer
+	if (Buffer.isBuffer(body)) {
+		return Body.Promise.resolve(body);
+	}
+
+	// istanbul ignore if: should never happen
+	if (!(body instanceof Stream)) {
+		return Body.Promise.resolve(Buffer.alloc(0));
+	}
+
+	// body is stream
+	// get ready to actually consume the body
+	let accum = [];
+	let accumBytes = 0;
+	let abort = false;
+
+	return new Body.Promise(function (resolve, reject) {
+		let resTimeout;
+
+		// allow timeout on slow response body
+		if (_this4.timeout) {
+			resTimeout = setTimeout(function () {
+				abort = true;
+				reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
+			}, _this4.timeout);
+		}
+
+		// handle stream errors
+		body.on('error', function (err) {
+			if (err.name === 'AbortError') {
+				// if the request was aborted, reject with this Error
+				abort = true;
+				reject(err);
+			} else {
+				// other errors, such as incorrect content-encoding
+				reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
+			}
+		});
+
+		body.on('data', function (chunk) {
+			if (abort || chunk === null) {
+				return;
+			}
+
+			if (_this4.size && accumBytes + chunk.length > _this4.size) {
+				abort = true;
+				reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
+				return;
+			}
+
+			accumBytes += chunk.length;
+			accum.push(chunk);
+		});
+
+		body.on('end', function () {
+			if (abort) {
+				return;
+			}
+
+			clearTimeout(resTimeout);
+
+			try {
+				resolve(Buffer.concat(accum, accumBytes));
+			} catch (err) {
+				// handle streams that have accumulated too much data (issue #414)
+				reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
+			}
+		});
+	});
+}
+
+/**
+ * Detect buffer encoding and convert to target encoding
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
+ *
+ * @param   Buffer  buffer    Incoming buffer
+ * @param   String  encoding  Target encoding
+ * @return  String
+ */
+function convertBody(buffer, headers) {
+	if (typeof convert !== 'function') {
+		throw new Error('The package `encoding` must be installed to use the textConverted() function');
+	}
+
+	const ct = headers.get('content-type');
+	let charset = 'utf-8';
+	let res, str;
+
+	// header
+	if (ct) {
+		res = /charset=([^;]*)/i.exec(ct);
+	}
+
+	// no charset in content type, peek at response body for at most 1024 bytes
+	str = buffer.slice(0, 1024).toString();
+
+	// html5
+	if (!res && str) {
+		res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
+	}
+
+	// html4
+	if (!res && str) {
+		res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
+
+		if (res) {
+			res = /charset=(.*)/i.exec(res.pop());
+		}
+	}
+
+	// xml
+	if (!res && str) {
+		res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
+	}
+
+	// found charset
+	if (res) {
+		charset = res.pop();
+
+		// prevent decode issues when sites use incorrect encoding
+		// ref: https://hsivonen.fi/encoding-menu/
+		if (charset === 'gb2312' || charset === 'gbk') {
+			charset = 'gb18030';
+		}
+	}
+
+	// turn raw buffers into a single utf-8 buffer
+	return convert(buffer, 'UTF-8', charset).toString();
+}
+
+/**
+ * Detect a URLSearchParams object
+ * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
+ *
+ * @param   Object  obj     Object to detect by type or brand
+ * @return  String
+ */
+function isURLSearchParams(obj) {
+	// Duck-typing as a necessary condition.
+	if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
+		return false;
+	}
+
+	// Brand-checking and more duck-typing as optional condition.
+	return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
+}
+
+/**
+ * Check if `obj` is a W3C `Blob` object (which `File` inherits from)
+ * @param  {*} obj
+ * @return {boolean}
+ */
+function isBlob(obj) {
+	return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
+}
+
+/**
+ * Clone body given Res/Req instance
+ *
+ * @param   Mixed  instance  Response or Request instance
+ * @return  Mixed
+ */
+function clone(instance) {
+	let p1, p2;
+	let body = instance.body;
+
+	// don't allow cloning a used body
+	if (instance.bodyUsed) {
+		throw new Error('cannot clone body after it is used');
+	}
+
+	// check that body is a stream and not form-data object
+	// note: we can't clone the form-data object without having it as a dependency
+	if (body instanceof Stream && typeof body.getBoundary !== 'function') {
+		// tee instance body
+		p1 = new PassThrough();
+		p2 = new PassThrough();
+		body.pipe(p1);
+		body.pipe(p2);
+		// set instance body to teed body and return the other teed body
+		instance[INTERNALS].body = p1;
+		body = p2;
+	}
+
+	return body;
+}
+
+/**
+ * Performs the operation "extract a `Content-Type` value from |object|" as
+ * specified in the specification:
+ * https://fetch.spec.whatwg.org/#concept-bodyinit-extract
+ *
+ * This function assumes that instance.body is present.
+ *
+ * @param   Mixed  instance  Any options.body input
+ */
+function extractContentType(body) {
+	if (body === null) {
+		// body is null
+		return null;
+	} else if (typeof body === 'string') {
+		// body is string
+		return 'text/plain;charset=UTF-8';
+	} else if (isURLSearchParams(body)) {
+		// body is a URLSearchParams
+		return 'application/x-www-form-urlencoded;charset=UTF-8';
+	} else if (isBlob(body)) {
+		// body is blob
+		return body.type || null;
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		return null;
+	} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+		// body is ArrayBuffer
+		return null;
+	} else if (ArrayBuffer.isView(body)) {
+		// body is ArrayBufferView
+		return null;
+	} else if (typeof body.getBoundary === 'function') {
+		// detect form data input from form-data module
+		return `multipart/form-data;boundary=${body.getBoundary()}`;
+	} else if (body instanceof Stream) {
+		// body is stream
+		// can't really do much about this
+		return null;
+	} else {
+		// Body constructor defaults other things to string
+		return 'text/plain;charset=UTF-8';
+	}
+}
+
+/**
+ * The Fetch Standard treats this as if "total bytes" is a property on the body.
+ * For us, we have to explicitly get it with a function.
+ *
+ * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
+ *
+ * @param   Body    instance   Instance of Body
+ * @return  Number?            Number of bytes, or null if not possible
+ */
+function getTotalBytes(instance) {
+	const body = instance.body;
+
+
+	if (body === null) {
+		// body is null
+		return 0;
+	} else if (isBlob(body)) {
+		return body.size;
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		return body.length;
+	} else if (body && typeof body.getLengthSync === 'function') {
+		// detect form data input from form-data module
+		if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
+		body.hasKnownLength && body.hasKnownLength()) {
+			// 2.x
+			return body.getLengthSync();
+		}
+		return null;
+	} else {
+		// body is stream
+		return null;
+	}
+}
+
+/**
+ * Write a Body to a Node.js WritableStream (e.g. http.Request) object.
+ *
+ * @param   Body    instance   Instance of Body
+ * @return  Void
+ */
+function writeToStream(dest, instance) {
+	const body = instance.body;
+
+
+	if (body === null) {
+		// body is null
+		dest.end();
+	} else if (isBlob(body)) {
+		body.stream().pipe(dest);
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		dest.write(body);
+		dest.end();
+	} else {
+		// body is stream
+		body.pipe(dest);
+	}
+}
+
+// expose Promise
+Body.Promise = global.Promise;
+
+/**
+ * headers.js
+ *
+ * Headers class offers convenient helpers
+ */
+
+const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
+const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+
+function validateName(name) {
+	name = `${name}`;
+	if (invalidTokenRegex.test(name) || name === '') {
+		throw new TypeError(`${name} is not a legal HTTP header name`);
+	}
+}
+
+function validateValue(value) {
+	value = `${value}`;
+	if (invalidHeaderCharRegex.test(value)) {
+		throw new TypeError(`${value} is not a legal HTTP header value`);
+	}
+}
+
+/**
+ * Find the key in the map object given a header name.
+ *
+ * Returns undefined if not found.
+ *
+ * @param   String  name  Header name
+ * @return  String|Undefined
+ */
+function find(map, name) {
+	name = name.toLowerCase();
+	for (const key in map) {
+		if (key.toLowerCase() === name) {
+			return key;
+		}
+	}
+	return undefined;
+}
+
+const MAP = Symbol('map');
+class Headers {
+	/**
+  * Headers class
+  *
+  * @param   Object  headers  Response headers
+  * @return  Void
+  */
+	constructor() {
+		let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
+
+		this[MAP] = Object.create(null);
+
+		if (init instanceof Headers) {
+			const rawHeaders = init.raw();
+			const headerNames = Object.keys(rawHeaders);
+
+			for (const headerName of headerNames) {
+				for (const value of rawHeaders[headerName]) {
+					this.append(headerName, value);
+				}
+			}
+
+			return;
+		}
+
+		// We don't worry about converting prop to ByteString here as append()
+		// will handle it.
+		if (init == null) ; else if (typeof init === 'object') {
+			const method = init[Symbol.iterator];
+			if (method != null) {
+				if (typeof method !== 'function') {
+					throw new TypeError('Header pairs must be iterable');
+				}
+
+				// sequence<sequence<ByteString>>
+				// Note: per spec we have to first exhaust the lists then process them
+				const pairs = [];
+				for (const pair of init) {
+					if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
+						throw new TypeError('Each header pair must be iterable');
+					}
+					pairs.push(Array.from(pair));
+				}
+
+				for (const pair of pairs) {
+					if (pair.length !== 2) {
+						throw new TypeError('Each header pair must be a name/value tuple');
+					}
+					this.append(pair[0], pair[1]);
+				}
+			} else {
+				// record<ByteString, ByteString>
+				for (const key of Object.keys(init)) {
+					const value = init[key];
+					this.append(key, value);
+				}
+			}
+		} else {
+			throw new TypeError('Provided initializer must be an object');
+		}
+	}
+
+	/**
+  * Return combined header value given name
+  *
+  * @param   String  name  Header name
+  * @return  Mixed
+  */
+	get(name) {
+		name = `${name}`;
+		validateName(name);
+		const key = find(this[MAP], name);
+		if (key === undefined) {
+			return null;
+		}
+
+		return this[MAP][key].join(', ');
+	}
+
+	/**
+  * Iterate over all headers
+  *
+  * @param   Function  callback  Executed for each item with parameters (value, name, thisArg)
+  * @param   Boolean   thisArg   `this` context for callback function
+  * @return  Void
+  */
+	forEach(callback) {
+		let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+
+		let pairs = getHeaders(this);
+		let i = 0;
+		while (i < pairs.length) {
+			var _pairs$i = pairs[i];
+			const name = _pairs$i[0],
+			      value = _pairs$i[1];
+
+			callback.call(thisArg, value, name, this);
+			pairs = getHeaders(this);
+			i++;
+		}
+	}
+
+	/**
+  * Overwrite header values given name
+  *
+  * @param   String  name   Header name
+  * @param   String  value  Header value
+  * @return  Void
+  */
+	set(name, value) {
+		name = `${name}`;
+		value = `${value}`;
+		validateName(name);
+		validateValue(value);
+		const key = find(this[MAP], name);
+		this[MAP][key !== undefined ? key : name] = [value];
+	}
+
+	/**
+  * Append a value onto existing header
+  *
+  * @param   String  name   Header name
+  * @param   String  value  Header value
+  * @return  Void
+  */
+	append(name, value) {
+		name = `${name}`;
+		value = `${value}`;
+		validateName(name);
+		validateValue(value);
+		const key = find(this[MAP], name);
+		if (key !== undefined) {
+			this[MAP][key].push(value);
+		} else {
+			this[MAP][name] = [value];
+		}
+	}
+
+	/**
+  * Check for header name existence
+  *
+  * @param   String   name  Header name
+  * @return  Boolean
+  */
+	has(name) {
+		name = `${name}`;
+		validateName(name);
+		return find(this[MAP], name) !== undefined;
+	}
+
+	/**
+  * Delete all header values given name
+  *
+  * @param   String  name  Header name
+  * @return  Void
+  */
+	delete(name) {
+		name = `${name}`;
+		validateName(name);
+		const key = find(this[MAP], name);
+		if (key !== undefined) {
+			delete this[MAP][key];
+		}
+	}
+
+	/**
+  * Return raw headers (non-spec api)
+  *
+  * @return  Object
+  */
+	raw() {
+		return this[MAP];
+	}
+
+	/**
+  * Get an iterator on keys.
+  *
+  * @return  Iterator
+  */
+	keys() {
+		return createHeadersIterator(this, 'key');
+	}
+
+	/**
+  * Get an iterator on values.
+  *
+  * @return  Iterator
+  */
+	values() {
+		return createHeadersIterator(this, 'value');
+	}
+
+	/**
+  * Get an iterator on entries.
+  *
+  * This is the default iterator of the Headers object.
+  *
+  * @return  Iterator
+  */
+	[Symbol.iterator]() {
+		return createHeadersIterator(this, 'key+value');
+	}
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+	value: 'Headers',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+Object.defineProperties(Headers.prototype, {
+	get: { enumerable: true },
+	forEach: { enumerable: true },
+	set: { enumerable: true },
+	append: { enumerable: true },
+	has: { enumerable: true },
+	delete: { enumerable: true },
+	keys: { enumerable: true },
+	values: { enumerable: true },
+	entries: { enumerable: true }
+});
+
+function getHeaders(headers) {
+	let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+
+	const keys = Object.keys(headers[MAP]).sort();
+	return keys.map(kind === 'key' ? function (k) {
+		return k.toLowerCase();
+	} : kind === 'value' ? function (k) {
+		return headers[MAP][k].join(', ');
+	} : function (k) {
+		return [k.toLowerCase(), headers[MAP][k].join(', ')];
+	});
+}
+
+const INTERNAL = Symbol('internal');
+
+function createHeadersIterator(target, kind) {
+	const iterator = Object.create(HeadersIteratorPrototype);
+	iterator[INTERNAL] = {
+		target,
+		kind,
+		index: 0
+	};
+	return iterator;
+}
+
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+	next() {
+		// istanbul ignore if
+		if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+			throw new TypeError('Value of `this` is not a HeadersIterator');
+		}
+
+		var _INTERNAL = this[INTERNAL];
+		const target = _INTERNAL.target,
+		      kind = _INTERNAL.kind,
+		      index = _INTERNAL.index;
+
+		const values = getHeaders(target, kind);
+		const len = values.length;
+		if (index >= len) {
+			return {
+				value: undefined,
+				done: true
+			};
+		}
+
+		this[INTERNAL].index = index + 1;
+
+		return {
+			value: values[index],
+			done: false
+		};
+	}
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+	value: 'HeadersIterator',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param   Headers  headers
+ * @return  Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+	const obj = Object.assign({ __proto__: null }, headers[MAP]);
+
+	// http.request() only supports string as Host header. This hack makes
+	// specifying custom Host header possible.
+	const hostHeaderKey = find(headers[MAP], 'Host');
+	if (hostHeaderKey !== undefined) {
+		obj[hostHeaderKey] = obj[hostHeaderKey][0];
+	}
+
+	return obj;
+}
+
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param   Object  obj  Object of headers
+ * @return  Headers
+ */
+function createHeadersLenient(obj) {
+	const headers = new Headers();
+	for (const name of Object.keys(obj)) {
+		if (invalidTokenRegex.test(name)) {
+			continue;
+		}
+		if (Array.isArray(obj[name])) {
+			for (const val of obj[name]) {
+				if (invalidHeaderCharRegex.test(val)) {
+					continue;
+				}
+				if (headers[MAP][name] === undefined) {
+					headers[MAP][name] = [val];
+				} else {
+					headers[MAP][name].push(val);
+				}
+			}
+		} else if (!invalidHeaderCharRegex.test(obj[name])) {
+			headers[MAP][name] = [obj[name]];
+		}
+	}
+	return headers;
+}
+
+const INTERNALS$1 = Symbol('Response internals');
+
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
+
+/**
+ * Response class
+ *
+ * @param   Stream  body  Readable stream
+ * @param   Object  opts  Response options
+ * @return  Void
+ */
+class Response {
+	constructor() {
+		let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+		let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+		Body.call(this, body, opts);
+
+		const status = opts.status || 200;
+		const headers = new Headers(opts.headers);
+
+		if (body != null && !headers.has('Content-Type')) {
+			const contentType = extractContentType(body);
+			if (contentType) {
+				headers.append('Content-Type', contentType);
+			}
+		}
+
+		this[INTERNALS$1] = {
+			url: opts.url,
+			status,
+			statusText: opts.statusText || STATUS_CODES[status],
+			headers,
+			counter: opts.counter
+		};
+	}
+
+	get url() {
+		return this[INTERNALS$1].url || '';
+	}
+
+	get status() {
+		return this[INTERNALS$1].status;
+	}
+
+	/**
+  * Convenience property representing if the request ended normally
+  */
+	get ok() {
+		return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+	}
+
+	get redirected() {
+		return this[INTERNALS$1].counter > 0;
+	}
+
+	get statusText() {
+		return this[INTERNALS$1].statusText;
+	}
+
+	get headers() {
+		return this[INTERNALS$1].headers;
+	}
+
+	/**
+  * Clone this response
+  *
+  * @return  Response
+  */
+	clone() {
+		return new Response(clone(this), {
+			url: this.url,
+			status: this.status,
+			statusText: this.statusText,
+			headers: this.headers,
+			ok: this.ok,
+			redirected: this.redirected
+		});
+	}
+}
+
+Body.mixIn(Response.prototype);
+
+Object.defineProperties(Response.prototype, {
+	url: { enumerable: true },
+	status: { enumerable: true },
+	ok: { enumerable: true },
+	redirected: { enumerable: true },
+	statusText: { enumerable: true },
+	headers: { enumerable: true },
+	clone: { enumerable: true }
+});
+
+Object.defineProperty(Response.prototype, Symbol.toStringTag, {
+	value: 'Response',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+const INTERNALS$2 = Symbol('Request internals');
+
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url.parse;
+const format_url = Url.format;
+
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param   Mixed   input
+ * @return  Boolean
+ */
+function isRequest(input) {
+	return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
+
+function isAbortSignal(signal) {
+	const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+	return !!(proto && proto.constructor.name === 'AbortSignal');
+}
+
+/**
+ * Request class
+ *
+ * @param   Mixed   input  Url or Request instance
+ * @param   Object  init   Custom options
+ * @return  Void
+ */
+class Request {
+	constructor(input) {
+		let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+		let parsedURL;
+
+		// normalize input
+		if (!isRequest(input)) {
+			if (input && input.href) {
+				// in order to support Node.js' Url objects; though WHATWG's URL objects
+				// will fall into this branch also (since their `toString()` will return
+				// `href` property anyway)
+				parsedURL = parse_url(input.href);
+			} else {
+				// coerce input to a string before attempting to parse
+				parsedURL = parse_url(`${input}`);
+			}
+			input = {};
+		} else {
+			parsedURL = parse_url(input.url);
+		}
+
+		let method = init.method || input.method || 'GET';
+		method = method.toUpperCase();
+
+		if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+			throw new TypeError('Request with GET/HEAD method cannot have body');
+		}
+
+		let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
+
+		Body.call(this, inputBody, {
+			timeout: init.timeout || input.timeout || 0,
+			size: init.size || input.size || 0
+		});
+
+		const headers = new Headers(init.headers || input.headers || {});
+
+		if (inputBody != null && !headers.has('Content-Type')) {
+			const contentType = extractContentType(inputBody);
+			if (contentType) {
+				headers.append('Content-Type', contentType);
+			}
+		}
+
+		let signal = isRequest(input) ? input.signal : null;
+		if ('signal' in init) signal = init.signal;
+
+		if (signal != null && !isAbortSignal(signal)) {
+			throw new TypeError('Expected signal to be an instanceof AbortSignal');
+		}
+
+		this[INTERNALS$2] = {
+			method,
+			redirect: init.redirect || input.redirect || 'follow',
+			headers,
+			parsedURL,
+			signal
+		};
+
+		// node-fetch-only options
+		this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+		this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+		this.counter = init.counter || input.counter || 0;
+		this.agent = init.agent || input.agent;
+	}
+
+	get method() {
+		return this[INTERNALS$2].method;
+	}
+
+	get url() {
+		return format_url(this[INTERNALS$2].parsedURL);
+	}
+
+	get headers() {
+		return this[INTERNALS$2].headers;
+	}
+
+	get redirect() {
+		return this[INTERNALS$2].redirect;
+	}
+
+	get signal() {
+		return this[INTERNALS$2].signal;
+	}
+
+	/**
+  * Clone this request
+  *
+  * @return  Request
+  */
+	clone() {
+		return new Request(this);
+	}
+}
+
+Body.mixIn(Request.prototype);
+
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+	value: 'Request',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+Object.defineProperties(Request.prototype, {
+	method: { enumerable: true },
+	url: { enumerable: true },
+	headers: { enumerable: true },
+	redirect: { enumerable: true },
+	clone: { enumerable: true },
+	signal: { enumerable: true }
+});
+
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param   Request  A Request instance
+ * @return  Object   The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+	const parsedURL = request[INTERNALS$2].parsedURL;
+	const headers = new Headers(request[INTERNALS$2].headers);
+
+	// fetch step 1.3
+	if (!headers.has('Accept')) {
+		headers.set('Accept', '*/*');
+	}
+
+	// Basic fetch
+	if (!parsedURL.protocol || !parsedURL.hostname) {
+		throw new TypeError('Only absolute URLs are supported');
+	}
+
+	if (!/^https?:$/.test(parsedURL.protocol)) {
+		throw new TypeError('Only HTTP(S) protocols are supported');
+	}
+
+	if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+		throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+	}
+
+	// HTTP-network-or-cache fetch steps 2.4-2.7
+	let contentLengthValue = null;
+	if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+		contentLengthValue = '0';
+	}
+	if (request.body != null) {
+		const totalBytes = getTotalBytes(request);
+		if (typeof totalBytes === 'number') {
+			contentLengthValue = String(totalBytes);
+		}
+	}
+	if (contentLengthValue) {
+		headers.set('Content-Length', contentLengthValue);
+	}
+
+	// HTTP-network-or-cache fetch step 2.11
+	if (!headers.has('User-Agent')) {
+		headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+	}
+
+	// HTTP-network-or-cache fetch step 2.15
+	if (request.compress && !headers.has('Accept-Encoding')) {
+		headers.set('Accept-Encoding', 'gzip,deflate');
+	}
+
+	let agent = request.agent;
+	if (typeof agent === 'function') {
+		agent = agent(parsedURL);
+	}
+
+	if (!headers.has('Connection') && !agent) {
+		headers.set('Connection', 'close');
+	}
+
+	// HTTP-network fetch step 4.2
+	// chunked encoding is handled by Node.js
+
+	return Object.assign({}, parsedURL, {
+		method: request.method,
+		headers: exportNodeCompatibleHeaders(headers),
+		agent
+	});
+}
+
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
+
+/**
+ * Create AbortError instance
+ *
+ * @param   String      message      Error message for human
+ * @return  AbortError
+ */
+function AbortError(message) {
+  Error.call(this, message);
+
+  this.type = 'aborted';
+  this.message = message;
+
+  // hide custom error implementation details from end-users
+  Error.captureStackTrace(this, this.constructor);
+}
+
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
+
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+const resolve_url = Url.resolve;
+
+/**
+ * Fetch function
+ *
+ * @param   Mixed    url   Absolute url or Request instance
+ * @param   Object   opts  Fetch options
+ * @return  Promise
+ */
+function fetch(url, opts) {
+
+	// allow custom promise
+	if (!fetch.Promise) {
+		throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
+	}
+
+	Body.Promise = fetch.Promise;
+
+	// wrap http.request into fetch
+	return new fetch.Promise(function (resolve, reject) {
+		// build request object
+		const request = new Request(url, opts);
+		const options = getNodeRequestOptions(request);
+
+		const send = (options.protocol === 'https:' ? https : http).request;
+		const signal = request.signal;
+
+		let response = null;
+
+		const abort = function abort() {
+			let error = new AbortError('The user aborted a request.');
+			reject(error);
+			if (request.body && request.body instanceof Stream.Readable) {
+				request.body.destroy(error);
+			}
+			if (!response || !response.body) return;
+			response.body.emit('error', error);
+		};
+
+		if (signal && signal.aborted) {
+			abort();
+			return;
+		}
+
+		const abortAndFinalize = function abortAndFinalize() {
+			abort();
+			finalize();
+		};
+
+		// send request
+		const req = send(options);
+		let reqTimeout;
+
+		if (signal) {
+			signal.addEventListener('abort', abortAndFinalize);
+		}
+
+		function finalize() {
+			req.abort();
+			if (signal) signal.removeEventListener('abort', abortAndFinalize);
+			clearTimeout(reqTimeout);
+		}
+
+		if (request.timeout) {
+			req.once('socket', function (socket) {
+				reqTimeout = setTimeout(function () {
+					reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+					finalize();
+				}, request.timeout);
+			});
+		}
+
+		req.on('error', function (err) {
+			reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+			finalize();
+		});
+
+		req.on('response', function (res) {
+			clearTimeout(reqTimeout);
+
+			const headers = createHeadersLenient(res.headers);
+
+			// HTTP fetch step 5
+			if (fetch.isRedirect(res.statusCode)) {
+				// HTTP fetch step 5.2
+				const location = headers.get('Location');
+
+				// HTTP fetch step 5.3
+				const locationURL = location === null ? null : resolve_url(request.url, location);
+
+				// HTTP fetch step 5.5
+				switch (request.redirect) {
+					case 'error':
+						reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));
+						finalize();
+						return;
+					case 'manual':
+						// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
+						if (locationURL !== null) {
+							// handle corrupted header
+							try {
+								headers.set('Location', locationURL);
+							} catch (err) {
+								// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
+								reject(err);
+							}
+						}
+						break;
+					case 'follow':
+						// HTTP-redirect fetch step 2
+						if (locationURL === null) {
+							break;
+						}
+
+						// HTTP-redirect fetch step 5
+						if (request.counter >= request.follow) {
+							reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
+							finalize();
+							return;
+						}
+
+						// HTTP-redirect fetch step 6 (counter increment)
+						// Create a new Request object.
+						const requestOpts = {
+							headers: new Headers(request.headers),
+							follow: request.follow,
+							counter: request.counter + 1,
+							agent: request.agent,
+							compress: request.compress,
+							method: request.method,
+							body: request.body,
+							signal: request.signal,
+							timeout: request.timeout
+						};
+
+						// HTTP-redirect fetch step 9
+						if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+							reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
+							finalize();
+							return;
+						}
+
+						// HTTP-redirect fetch step 11
+						if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
+							requestOpts.method = 'GET';
+							requestOpts.body = undefined;
+							requestOpts.headers.delete('content-length');
+						}
+
+						// HTTP-redirect fetch step 15
+						resolve(fetch(new Request(locationURL, requestOpts)));
+						finalize();
+						return;
+				}
+			}
+
+			// prepare response
+			res.once('end', function () {
+				if (signal) signal.removeEventListener('abort', abortAndFinalize);
+			});
+			let body = res.pipe(new PassThrough$1());
+
+			const response_options = {
+				url: request.url,
+				status: res.statusCode,
+				statusText: res.statusMessage,
+				headers: headers,
+				size: request.size,
+				timeout: request.timeout,
+				counter: request.counter
+			};
+
+			// HTTP-network fetch step 12.1.1.3
+			const codings = headers.get('Content-Encoding');
+
+			// HTTP-network fetch step 12.1.1.4: handle content codings
+
+			// in following scenarios we ignore compression support
+			// 1. compression support is disabled
+			// 2. HEAD request
+			// 3. no Content-Encoding header
+			// 4. no content response (204)
+			// 5. content not modified response (304)
+			if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// For Node v6+
+			// Be less strict when decoding compressed responses, since sometimes
+			// servers send slightly invalid responses that are still accepted
+			// by common browsers.
+			// Always using Z_SYNC_FLUSH is what cURL does.
+			const zlibOptions = {
+				flush: zlib.Z_SYNC_FLUSH,
+				finishFlush: zlib.Z_SYNC_FLUSH
+			};
+
+			// for gzip
+			if (codings == 'gzip' || codings == 'x-gzip') {
+				body = body.pipe(zlib.createGunzip(zlibOptions));
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// for deflate
+			if (codings == 'deflate' || codings == 'x-deflate') {
+				// handle the infamous raw deflate response from old servers
+				// a hack for old IIS and Apache servers
+				const raw = res.pipe(new PassThrough$1());
+				raw.once('data', function (chunk) {
+					// see http://stackoverflow.com/questions/37519828
+					if ((chunk[0] & 0x0F) === 0x08) {
+						body = body.pipe(zlib.createInflate());
+					} else {
+						body = body.pipe(zlib.createInflateRaw());
+					}
+					response = new Response(body, response_options);
+					resolve(response);
+				});
+				return;
+			}
+
+			// for br
+			if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
+				body = body.pipe(zlib.createBrotliDecompress());
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// otherwise, use response as-is
+			response = new Response(body, response_options);
+			resolve(response);
+		});
+
+		writeToStream(req, request);
+	});
+}
+/**
+ * Redirect code matching
+ *
+ * @param   Number   code  Status code
+ * @return  Boolean
+ */
+fetch.isRedirect = function (code) {
+	return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+};
+
+// expose Promise
+fetch.Promise = global.Promise;
+
+module.exports = exports = fetch;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = exports;
+exports.Headers = Headers;
+exports.Request = Request;
+exports.Response = Response;
+exports.FetchError = FetchError;
diff --git a/setup-maven/node_modules/node-fetch/lib/index.mjs b/setup-maven/node_modules/node-fetch/lib/index.mjs
new file mode 100644
index 0000000..e571ea6
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/lib/index.mjs
@@ -0,0 +1,1631 @@
+import Stream from 'stream';
+import http from 'http';
+import Url from 'url';
+import https from 'https';
+import zlib from 'zlib';
+
+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+
+// fix for "Readable" isn't a named export issue
+const Readable = Stream.Readable;
+
+const BUFFER = Symbol('buffer');
+const TYPE = Symbol('type');
+
+class Blob {
+	constructor() {
+		this[TYPE] = '';
+
+		const blobParts = arguments[0];
+		const options = arguments[1];
+
+		const buffers = [];
+		let size = 0;
+
+		if (blobParts) {
+			const a = blobParts;
+			const length = Number(a.length);
+			for (let i = 0; i < length; i++) {
+				const element = a[i];
+				let buffer;
+				if (element instanceof Buffer) {
+					buffer = element;
+				} else if (ArrayBuffer.isView(element)) {
+					buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
+				} else if (element instanceof ArrayBuffer) {
+					buffer = Buffer.from(element);
+				} else if (element instanceof Blob) {
+					buffer = element[BUFFER];
+				} else {
+					buffer = Buffer.from(typeof element === 'string' ? element : String(element));
+				}
+				size += buffer.length;
+				buffers.push(buffer);
+			}
+		}
+
+		this[BUFFER] = Buffer.concat(buffers);
+
+		let type = options && options.type !== undefined && String(options.type).toLowerCase();
+		if (type && !/[^\u0020-\u007E]/.test(type)) {
+			this[TYPE] = type;
+		}
+	}
+	get size() {
+		return this[BUFFER].length;
+	}
+	get type() {
+		return this[TYPE];
+	}
+	text() {
+		return Promise.resolve(this[BUFFER].toString());
+	}
+	arrayBuffer() {
+		const buf = this[BUFFER];
+		const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+		return Promise.resolve(ab);
+	}
+	stream() {
+		const readable = new Readable();
+		readable._read = function () {};
+		readable.push(this[BUFFER]);
+		readable.push(null);
+		return readable;
+	}
+	toString() {
+		return '[object Blob]';
+	}
+	slice() {
+		const size = this.size;
+
+		const start = arguments[0];
+		const end = arguments[1];
+		let relativeStart, relativeEnd;
+		if (start === undefined) {
+			relativeStart = 0;
+		} else if (start < 0) {
+			relativeStart = Math.max(size + start, 0);
+		} else {
+			relativeStart = Math.min(start, size);
+		}
+		if (end === undefined) {
+			relativeEnd = size;
+		} else if (end < 0) {
+			relativeEnd = Math.max(size + end, 0);
+		} else {
+			relativeEnd = Math.min(end, size);
+		}
+		const span = Math.max(relativeEnd - relativeStart, 0);
+
+		const buffer = this[BUFFER];
+		const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
+		const blob = new Blob([], { type: arguments[2] });
+		blob[BUFFER] = slicedBuffer;
+		return blob;
+	}
+}
+
+Object.defineProperties(Blob.prototype, {
+	size: { enumerable: true },
+	type: { enumerable: true },
+	slice: { enumerable: true }
+});
+
+Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
+	value: 'Blob',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+/**
+ * fetch-error.js
+ *
+ * FetchError interface for operational errors
+ */
+
+/**
+ * Create FetchError instance
+ *
+ * @param   String      message      Error message for human
+ * @param   String      type         Error type for machine
+ * @param   String      systemError  For Node.js system error
+ * @return  FetchError
+ */
+function FetchError(message, type, systemError) {
+  Error.call(this, message);
+
+  this.message = message;
+  this.type = type;
+
+  // when err.type is `system`, err.code contains system error code
+  if (systemError) {
+    this.code = this.errno = systemError.code;
+  }
+
+  // hide custom error implementation details from end-users
+  Error.captureStackTrace(this, this.constructor);
+}
+
+FetchError.prototype = Object.create(Error.prototype);
+FetchError.prototype.constructor = FetchError;
+FetchError.prototype.name = 'FetchError';
+
+let convert;
+try {
+	convert = require('encoding').convert;
+} catch (e) {}
+
+const INTERNALS = Symbol('Body internals');
+
+// fix an issue where "PassThrough" isn't a named export for node <10
+const PassThrough = Stream.PassThrough;
+
+/**
+ * Body mixin
+ *
+ * Ref: https://fetch.spec.whatwg.org/#body
+ *
+ * @param   Stream  body  Readable stream
+ * @param   Object  opts  Response options
+ * @return  Void
+ */
+function Body(body) {
+	var _this = this;
+
+	var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+	    _ref$size = _ref.size;
+
+	let size = _ref$size === undefined ? 0 : _ref$size;
+	var _ref$timeout = _ref.timeout;
+	let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
+
+	if (body == null) {
+		// body is undefined or null
+		body = null;
+	} else if (isURLSearchParams(body)) {
+		// body is a URLSearchParams
+		body = Buffer.from(body.toString());
+	} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+		// body is ArrayBuffer
+		body = Buffer.from(body);
+	} else if (ArrayBuffer.isView(body)) {
+		// body is ArrayBufferView
+		body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
+	} else if (body instanceof Stream) ; else {
+		// none of the above
+		// coerce to string then buffer
+		body = Buffer.from(String(body));
+	}
+	this[INTERNALS] = {
+		body,
+		disturbed: false,
+		error: null
+	};
+	this.size = size;
+	this.timeout = timeout;
+
+	if (body instanceof Stream) {
+		body.on('error', function (err) {
+			const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
+			_this[INTERNALS].error = error;
+		});
+	}
+}
+
+Body.prototype = {
+	get body() {
+		return this[INTERNALS].body;
+	},
+
+	get bodyUsed() {
+		return this[INTERNALS].disturbed;
+	},
+
+	/**
+  * Decode response as ArrayBuffer
+  *
+  * @return  Promise
+  */
+	arrayBuffer() {
+		return consumeBody.call(this).then(function (buf) {
+			return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+		});
+	},
+
+	/**
+  * Return raw response as Blob
+  *
+  * @return Promise
+  */
+	blob() {
+		let ct = this.headers && this.headers.get('content-type') || '';
+		return consumeBody.call(this).then(function (buf) {
+			return Object.assign(
+			// Prevent copying
+			new Blob([], {
+				type: ct.toLowerCase()
+			}), {
+				[BUFFER]: buf
+			});
+		});
+	},
+
+	/**
+  * Decode response as json
+  *
+  * @return  Promise
+  */
+	json() {
+		var _this2 = this;
+
+		return consumeBody.call(this).then(function (buffer) {
+			try {
+				return JSON.parse(buffer.toString());
+			} catch (err) {
+				return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
+			}
+		});
+	},
+
+	/**
+  * Decode response as text
+  *
+  * @return  Promise
+  */
+	text() {
+		return consumeBody.call(this).then(function (buffer) {
+			return buffer.toString();
+		});
+	},
+
+	/**
+  * Decode response as buffer (non-spec api)
+  *
+  * @return  Promise
+  */
+	buffer() {
+		return consumeBody.call(this);
+	},
+
+	/**
+  * Decode response as text, while automatically detecting the encoding and
+  * trying to decode to UTF-8 (non-spec api)
+  *
+  * @return  Promise
+  */
+	textConverted() {
+		var _this3 = this;
+
+		return consumeBody.call(this).then(function (buffer) {
+			return convertBody(buffer, _this3.headers);
+		});
+	}
+};
+
+// In browsers, all properties are enumerable.
+Object.defineProperties(Body.prototype, {
+	body: { enumerable: true },
+	bodyUsed: { enumerable: true },
+	arrayBuffer: { enumerable: true },
+	blob: { enumerable: true },
+	json: { enumerable: true },
+	text: { enumerable: true }
+});
+
+Body.mixIn = function (proto) {
+	for (const name of Object.getOwnPropertyNames(Body.prototype)) {
+		// istanbul ignore else: future proof
+		if (!(name in proto)) {
+			const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
+			Object.defineProperty(proto, name, desc);
+		}
+	}
+};
+
+/**
+ * Consume and convert an entire Body to a Buffer.
+ *
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
+ *
+ * @return  Promise
+ */
+function consumeBody() {
+	var _this4 = this;
+
+	if (this[INTERNALS].disturbed) {
+		return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
+	}
+
+	this[INTERNALS].disturbed = true;
+
+	if (this[INTERNALS].error) {
+		return Body.Promise.reject(this[INTERNALS].error);
+	}
+
+	let body = this.body;
+
+	// body is null
+	if (body === null) {
+		return Body.Promise.resolve(Buffer.alloc(0));
+	}
+
+	// body is blob
+	if (isBlob(body)) {
+		body = body.stream();
+	}
+
+	// body is buffer
+	if (Buffer.isBuffer(body)) {
+		return Body.Promise.resolve(body);
+	}
+
+	// istanbul ignore if: should never happen
+	if (!(body instanceof Stream)) {
+		return Body.Promise.resolve(Buffer.alloc(0));
+	}
+
+	// body is stream
+	// get ready to actually consume the body
+	let accum = [];
+	let accumBytes = 0;
+	let abort = false;
+
+	return new Body.Promise(function (resolve, reject) {
+		let resTimeout;
+
+		// allow timeout on slow response body
+		if (_this4.timeout) {
+			resTimeout = setTimeout(function () {
+				abort = true;
+				reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
+			}, _this4.timeout);
+		}
+
+		// handle stream errors
+		body.on('error', function (err) {
+			if (err.name === 'AbortError') {
+				// if the request was aborted, reject with this Error
+				abort = true;
+				reject(err);
+			} else {
+				// other errors, such as incorrect content-encoding
+				reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
+			}
+		});
+
+		body.on('data', function (chunk) {
+			if (abort || chunk === null) {
+				return;
+			}
+
+			if (_this4.size && accumBytes + chunk.length > _this4.size) {
+				abort = true;
+				reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
+				return;
+			}
+
+			accumBytes += chunk.length;
+			accum.push(chunk);
+		});
+
+		body.on('end', function () {
+			if (abort) {
+				return;
+			}
+
+			clearTimeout(resTimeout);
+
+			try {
+				resolve(Buffer.concat(accum, accumBytes));
+			} catch (err) {
+				// handle streams that have accumulated too much data (issue #414)
+				reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
+			}
+		});
+	});
+}
+
+/**
+ * Detect buffer encoding and convert to target encoding
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
+ *
+ * @param   Buffer  buffer    Incoming buffer
+ * @param   String  encoding  Target encoding
+ * @return  String
+ */
+function convertBody(buffer, headers) {
+	if (typeof convert !== 'function') {
+		throw new Error('The package `encoding` must be installed to use the textConverted() function');
+	}
+
+	const ct = headers.get('content-type');
+	let charset = 'utf-8';
+	let res, str;
+
+	// header
+	if (ct) {
+		res = /charset=([^;]*)/i.exec(ct);
+	}
+
+	// no charset in content type, peek at response body for at most 1024 bytes
+	str = buffer.slice(0, 1024).toString();
+
+	// html5
+	if (!res && str) {
+		res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
+	}
+
+	// html4
+	if (!res && str) {
+		res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
+
+		if (res) {
+			res = /charset=(.*)/i.exec(res.pop());
+		}
+	}
+
+	// xml
+	if (!res && str) {
+		res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
+	}
+
+	// found charset
+	if (res) {
+		charset = res.pop();
+
+		// prevent decode issues when sites use incorrect encoding
+		// ref: https://hsivonen.fi/encoding-menu/
+		if (charset === 'gb2312' || charset === 'gbk') {
+			charset = 'gb18030';
+		}
+	}
+
+	// turn raw buffers into a single utf-8 buffer
+	return convert(buffer, 'UTF-8', charset).toString();
+}
+
+/**
+ * Detect a URLSearchParams object
+ * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
+ *
+ * @param   Object  obj     Object to detect by type or brand
+ * @return  String
+ */
+function isURLSearchParams(obj) {
+	// Duck-typing as a necessary condition.
+	if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
+		return false;
+	}
+
+	// Brand-checking and more duck-typing as optional condition.
+	return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
+}
+
+/**
+ * Check if `obj` is a W3C `Blob` object (which `File` inherits from)
+ * @param  {*} obj
+ * @return {boolean}
+ */
+function isBlob(obj) {
+	return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
+}
+
+/**
+ * Clone body given Res/Req instance
+ *
+ * @param   Mixed  instance  Response or Request instance
+ * @return  Mixed
+ */
+function clone(instance) {
+	let p1, p2;
+	let body = instance.body;
+
+	// don't allow cloning a used body
+	if (instance.bodyUsed) {
+		throw new Error('cannot clone body after it is used');
+	}
+
+	// check that body is a stream and not form-data object
+	// note: we can't clone the form-data object without having it as a dependency
+	if (body instanceof Stream && typeof body.getBoundary !== 'function') {
+		// tee instance body
+		p1 = new PassThrough();
+		p2 = new PassThrough();
+		body.pipe(p1);
+		body.pipe(p2);
+		// set instance body to teed body and return the other teed body
+		instance[INTERNALS].body = p1;
+		body = p2;
+	}
+
+	return body;
+}
+
+/**
+ * Performs the operation "extract a `Content-Type` value from |object|" as
+ * specified in the specification:
+ * https://fetch.spec.whatwg.org/#concept-bodyinit-extract
+ *
+ * This function assumes that instance.body is present.
+ *
+ * @param   Mixed  instance  Any options.body input
+ */
+function extractContentType(body) {
+	if (body === null) {
+		// body is null
+		return null;
+	} else if (typeof body === 'string') {
+		// body is string
+		return 'text/plain;charset=UTF-8';
+	} else if (isURLSearchParams(body)) {
+		// body is a URLSearchParams
+		return 'application/x-www-form-urlencoded;charset=UTF-8';
+	} else if (isBlob(body)) {
+		// body is blob
+		return body.type || null;
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		return null;
+	} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+		// body is ArrayBuffer
+		return null;
+	} else if (ArrayBuffer.isView(body)) {
+		// body is ArrayBufferView
+		return null;
+	} else if (typeof body.getBoundary === 'function') {
+		// detect form data input from form-data module
+		return `multipart/form-data;boundary=${body.getBoundary()}`;
+	} else if (body instanceof Stream) {
+		// body is stream
+		// can't really do much about this
+		return null;
+	} else {
+		// Body constructor defaults other things to string
+		return 'text/plain;charset=UTF-8';
+	}
+}
+
+/**
+ * The Fetch Standard treats this as if "total bytes" is a property on the body.
+ * For us, we have to explicitly get it with a function.
+ *
+ * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
+ *
+ * @param   Body    instance   Instance of Body
+ * @return  Number?            Number of bytes, or null if not possible
+ */
+function getTotalBytes(instance) {
+	const body = instance.body;
+
+
+	if (body === null) {
+		// body is null
+		return 0;
+	} else if (isBlob(body)) {
+		return body.size;
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		return body.length;
+	} else if (body && typeof body.getLengthSync === 'function') {
+		// detect form data input from form-data module
+		if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
+		body.hasKnownLength && body.hasKnownLength()) {
+			// 2.x
+			return body.getLengthSync();
+		}
+		return null;
+	} else {
+		// body is stream
+		return null;
+	}
+}
+
+/**
+ * Write a Body to a Node.js WritableStream (e.g. http.Request) object.
+ *
+ * @param   Body    instance   Instance of Body
+ * @return  Void
+ */
+function writeToStream(dest, instance) {
+	const body = instance.body;
+
+
+	if (body === null) {
+		// body is null
+		dest.end();
+	} else if (isBlob(body)) {
+		body.stream().pipe(dest);
+	} else if (Buffer.isBuffer(body)) {
+		// body is buffer
+		dest.write(body);
+		dest.end();
+	} else {
+		// body is stream
+		body.pipe(dest);
+	}
+}
+
+// expose Promise
+Body.Promise = global.Promise;
+
+/**
+ * headers.js
+ *
+ * Headers class offers convenient helpers
+ */
+
+const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
+const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+
+function validateName(name) {
+	name = `${name}`;
+	if (invalidTokenRegex.test(name) || name === '') {
+		throw new TypeError(`${name} is not a legal HTTP header name`);
+	}
+}
+
+function validateValue(value) {
+	value = `${value}`;
+	if (invalidHeaderCharRegex.test(value)) {
+		throw new TypeError(`${value} is not a legal HTTP header value`);
+	}
+}
+
+/**
+ * Find the key in the map object given a header name.
+ *
+ * Returns undefined if not found.
+ *
+ * @param   String  name  Header name
+ * @return  String|Undefined
+ */
+function find(map, name) {
+	name = name.toLowerCase();
+	for (const key in map) {
+		if (key.toLowerCase() === name) {
+			return key;
+		}
+	}
+	return undefined;
+}
+
+const MAP = Symbol('map');
+class Headers {
+	/**
+  * Headers class
+  *
+  * @param   Object  headers  Response headers
+  * @return  Void
+  */
+	constructor() {
+		let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
+
+		this[MAP] = Object.create(null);
+
+		if (init instanceof Headers) {
+			const rawHeaders = init.raw();
+			const headerNames = Object.keys(rawHeaders);
+
+			for (const headerName of headerNames) {
+				for (const value of rawHeaders[headerName]) {
+					this.append(headerName, value);
+				}
+			}
+
+			return;
+		}
+
+		// We don't worry about converting prop to ByteString here as append()
+		// will handle it.
+		if (init == null) ; else if (typeof init === 'object') {
+			const method = init[Symbol.iterator];
+			if (method != null) {
+				if (typeof method !== 'function') {
+					throw new TypeError('Header pairs must be iterable');
+				}
+
+				// sequence<sequence<ByteString>>
+				// Note: per spec we have to first exhaust the lists then process them
+				const pairs = [];
+				for (const pair of init) {
+					if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
+						throw new TypeError('Each header pair must be iterable');
+					}
+					pairs.push(Array.from(pair));
+				}
+
+				for (const pair of pairs) {
+					if (pair.length !== 2) {
+						throw new TypeError('Each header pair must be a name/value tuple');
+					}
+					this.append(pair[0], pair[1]);
+				}
+			} else {
+				// record<ByteString, ByteString>
+				for (const key of Object.keys(init)) {
+					const value = init[key];
+					this.append(key, value);
+				}
+			}
+		} else {
+			throw new TypeError('Provided initializer must be an object');
+		}
+	}
+
+	/**
+  * Return combined header value given name
+  *
+  * @param   String  name  Header name
+  * @return  Mixed
+  */
+	get(name) {
+		name = `${name}`;
+		validateName(name);
+		const key = find(this[MAP], name);
+		if (key === undefined) {
+			return null;
+		}
+
+		return this[MAP][key].join(', ');
+	}
+
+	/**
+  * Iterate over all headers
+  *
+  * @param   Function  callback  Executed for each item with parameters (value, name, thisArg)
+  * @param   Boolean   thisArg   `this` context for callback function
+  * @return  Void
+  */
+	forEach(callback) {
+		let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+
+		let pairs = getHeaders(this);
+		let i = 0;
+		while (i < pairs.length) {
+			var _pairs$i = pairs[i];
+			const name = _pairs$i[0],
+			      value = _pairs$i[1];
+
+			callback.call(thisArg, value, name, this);
+			pairs = getHeaders(this);
+			i++;
+		}
+	}
+
+	/**
+  * Overwrite header values given name
+  *
+  * @param   String  name   Header name
+  * @param   String  value  Header value
+  * @return  Void
+  */
+	set(name, value) {
+		name = `${name}`;
+		value = `${value}`;
+		validateName(name);
+		validateValue(value);
+		const key = find(this[MAP], name);
+		this[MAP][key !== undefined ? key : name] = [value];
+	}
+
+	/**
+  * Append a value onto existing header
+  *
+  * @param   String  name   Header name
+  * @param   String  value  Header value
+  * @return  Void
+  */
+	append(name, value) {
+		name = `${name}`;
+		value = `${value}`;
+		validateName(name);
+		validateValue(value);
+		const key = find(this[MAP], name);
+		if (key !== undefined) {
+			this[MAP][key].push(value);
+		} else {
+			this[MAP][name] = [value];
+		}
+	}
+
+	/**
+  * Check for header name existence
+  *
+  * @param   String   name  Header name
+  * @return  Boolean
+  */
+	has(name) {
+		name = `${name}`;
+		validateName(name);
+		return find(this[MAP], name) !== undefined;
+	}
+
+	/**
+  * Delete all header values given name
+  *
+  * @param   String  name  Header name
+  * @return  Void
+  */
+	delete(name) {
+		name = `${name}`;
+		validateName(name);
+		const key = find(this[MAP], name);
+		if (key !== undefined) {
+			delete this[MAP][key];
+		}
+	}
+
+	/**
+  * Return raw headers (non-spec api)
+  *
+  * @return  Object
+  */
+	raw() {
+		return this[MAP];
+	}
+
+	/**
+  * Get an iterator on keys.
+  *
+  * @return  Iterator
+  */
+	keys() {
+		return createHeadersIterator(this, 'key');
+	}
+
+	/**
+  * Get an iterator on values.
+  *
+  * @return  Iterator
+  */
+	values() {
+		return createHeadersIterator(this, 'value');
+	}
+
+	/**
+  * Get an iterator on entries.
+  *
+  * This is the default iterator of the Headers object.
+  *
+  * @return  Iterator
+  */
+	[Symbol.iterator]() {
+		return createHeadersIterator(this, 'key+value');
+	}
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+	value: 'Headers',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+Object.defineProperties(Headers.prototype, {
+	get: { enumerable: true },
+	forEach: { enumerable: true },
+	set: { enumerable: true },
+	append: { enumerable: true },
+	has: { enumerable: true },
+	delete: { enumerable: true },
+	keys: { enumerable: true },
+	values: { enumerable: true },
+	entries: { enumerable: true }
+});
+
+function getHeaders(headers) {
+	let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+
+	const keys = Object.keys(headers[MAP]).sort();
+	return keys.map(kind === 'key' ? function (k) {
+		return k.toLowerCase();
+	} : kind === 'value' ? function (k) {
+		return headers[MAP][k].join(', ');
+	} : function (k) {
+		return [k.toLowerCase(), headers[MAP][k].join(', ')];
+	});
+}
+
+const INTERNAL = Symbol('internal');
+
+function createHeadersIterator(target, kind) {
+	const iterator = Object.create(HeadersIteratorPrototype);
+	iterator[INTERNAL] = {
+		target,
+		kind,
+		index: 0
+	};
+	return iterator;
+}
+
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+	next() {
+		// istanbul ignore if
+		if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+			throw new TypeError('Value of `this` is not a HeadersIterator');
+		}
+
+		var _INTERNAL = this[INTERNAL];
+		const target = _INTERNAL.target,
+		      kind = _INTERNAL.kind,
+		      index = _INTERNAL.index;
+
+		const values = getHeaders(target, kind);
+		const len = values.length;
+		if (index >= len) {
+			return {
+				value: undefined,
+				done: true
+			};
+		}
+
+		this[INTERNAL].index = index + 1;
+
+		return {
+			value: values[index],
+			done: false
+		};
+	}
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+	value: 'HeadersIterator',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param   Headers  headers
+ * @return  Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+	const obj = Object.assign({ __proto__: null }, headers[MAP]);
+
+	// http.request() only supports string as Host header. This hack makes
+	// specifying custom Host header possible.
+	const hostHeaderKey = find(headers[MAP], 'Host');
+	if (hostHeaderKey !== undefined) {
+		obj[hostHeaderKey] = obj[hostHeaderKey][0];
+	}
+
+	return obj;
+}
+
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param   Object  obj  Object of headers
+ * @return  Headers
+ */
+function createHeadersLenient(obj) {
+	const headers = new Headers();
+	for (const name of Object.keys(obj)) {
+		if (invalidTokenRegex.test(name)) {
+			continue;
+		}
+		if (Array.isArray(obj[name])) {
+			for (const val of obj[name]) {
+				if (invalidHeaderCharRegex.test(val)) {
+					continue;
+				}
+				if (headers[MAP][name] === undefined) {
+					headers[MAP][name] = [val];
+				} else {
+					headers[MAP][name].push(val);
+				}
+			}
+		} else if (!invalidHeaderCharRegex.test(obj[name])) {
+			headers[MAP][name] = [obj[name]];
+		}
+	}
+	return headers;
+}
+
+const INTERNALS$1 = Symbol('Response internals');
+
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
+
+/**
+ * Response class
+ *
+ * @param   Stream  body  Readable stream
+ * @param   Object  opts  Response options
+ * @return  Void
+ */
+class Response {
+	constructor() {
+		let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+		let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+		Body.call(this, body, opts);
+
+		const status = opts.status || 200;
+		const headers = new Headers(opts.headers);
+
+		if (body != null && !headers.has('Content-Type')) {
+			const contentType = extractContentType(body);
+			if (contentType) {
+				headers.append('Content-Type', contentType);
+			}
+		}
+
+		this[INTERNALS$1] = {
+			url: opts.url,
+			status,
+			statusText: opts.statusText || STATUS_CODES[status],
+			headers,
+			counter: opts.counter
+		};
+	}
+
+	get url() {
+		return this[INTERNALS$1].url || '';
+	}
+
+	get status() {
+		return this[INTERNALS$1].status;
+	}
+
+	/**
+  * Convenience property representing if the request ended normally
+  */
+	get ok() {
+		return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+	}
+
+	get redirected() {
+		return this[INTERNALS$1].counter > 0;
+	}
+
+	get statusText() {
+		return this[INTERNALS$1].statusText;
+	}
+
+	get headers() {
+		return this[INTERNALS$1].headers;
+	}
+
+	/**
+  * Clone this response
+  *
+  * @return  Response
+  */
+	clone() {
+		return new Response(clone(this), {
+			url: this.url,
+			status: this.status,
+			statusText: this.statusText,
+			headers: this.headers,
+			ok: this.ok,
+			redirected: this.redirected
+		});
+	}
+}
+
+Body.mixIn(Response.prototype);
+
+Object.defineProperties(Response.prototype, {
+	url: { enumerable: true },
+	status: { enumerable: true },
+	ok: { enumerable: true },
+	redirected: { enumerable: true },
+	statusText: { enumerable: true },
+	headers: { enumerable: true },
+	clone: { enumerable: true }
+});
+
+Object.defineProperty(Response.prototype, Symbol.toStringTag, {
+	value: 'Response',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+const INTERNALS$2 = Symbol('Request internals');
+
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url.parse;
+const format_url = Url.format;
+
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param   Mixed   input
+ * @return  Boolean
+ */
+function isRequest(input) {
+	return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
+
+function isAbortSignal(signal) {
+	const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+	return !!(proto && proto.constructor.name === 'AbortSignal');
+}
+
+/**
+ * Request class
+ *
+ * @param   Mixed   input  Url or Request instance
+ * @param   Object  init   Custom options
+ * @return  Void
+ */
+class Request {
+	constructor(input) {
+		let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+		let parsedURL;
+
+		// normalize input
+		if (!isRequest(input)) {
+			if (input && input.href) {
+				// in order to support Node.js' Url objects; though WHATWG's URL objects
+				// will fall into this branch also (since their `toString()` will return
+				// `href` property anyway)
+				parsedURL = parse_url(input.href);
+			} else {
+				// coerce input to a string before attempting to parse
+				parsedURL = parse_url(`${input}`);
+			}
+			input = {};
+		} else {
+			parsedURL = parse_url(input.url);
+		}
+
+		let method = init.method || input.method || 'GET';
+		method = method.toUpperCase();
+
+		if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+			throw new TypeError('Request with GET/HEAD method cannot have body');
+		}
+
+		let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
+
+		Body.call(this, inputBody, {
+			timeout: init.timeout || input.timeout || 0,
+			size: init.size || input.size || 0
+		});
+
+		const headers = new Headers(init.headers || input.headers || {});
+
+		if (inputBody != null && !headers.has('Content-Type')) {
+			const contentType = extractContentType(inputBody);
+			if (contentType) {
+				headers.append('Content-Type', contentType);
+			}
+		}
+
+		let signal = isRequest(input) ? input.signal : null;
+		if ('signal' in init) signal = init.signal;
+
+		if (signal != null && !isAbortSignal(signal)) {
+			throw new TypeError('Expected signal to be an instanceof AbortSignal');
+		}
+
+		this[INTERNALS$2] = {
+			method,
+			redirect: init.redirect || input.redirect || 'follow',
+			headers,
+			parsedURL,
+			signal
+		};
+
+		// node-fetch-only options
+		this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+		this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+		this.counter = init.counter || input.counter || 0;
+		this.agent = init.agent || input.agent;
+	}
+
+	get method() {
+		return this[INTERNALS$2].method;
+	}
+
+	get url() {
+		return format_url(this[INTERNALS$2].parsedURL);
+	}
+
+	get headers() {
+		return this[INTERNALS$2].headers;
+	}
+
+	get redirect() {
+		return this[INTERNALS$2].redirect;
+	}
+
+	get signal() {
+		return this[INTERNALS$2].signal;
+	}
+
+	/**
+  * Clone this request
+  *
+  * @return  Request
+  */
+	clone() {
+		return new Request(this);
+	}
+}
+
+Body.mixIn(Request.prototype);
+
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+	value: 'Request',
+	writable: false,
+	enumerable: false,
+	configurable: true
+});
+
+Object.defineProperties(Request.prototype, {
+	method: { enumerable: true },
+	url: { enumerable: true },
+	headers: { enumerable: true },
+	redirect: { enumerable: true },
+	clone: { enumerable: true },
+	signal: { enumerable: true }
+});
+
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param   Request  A Request instance
+ * @return  Object   The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+	const parsedURL = request[INTERNALS$2].parsedURL;
+	const headers = new Headers(request[INTERNALS$2].headers);
+
+	// fetch step 1.3
+	if (!headers.has('Accept')) {
+		headers.set('Accept', '*/*');
+	}
+
+	// Basic fetch
+	if (!parsedURL.protocol || !parsedURL.hostname) {
+		throw new TypeError('Only absolute URLs are supported');
+	}
+
+	if (!/^https?:$/.test(parsedURL.protocol)) {
+		throw new TypeError('Only HTTP(S) protocols are supported');
+	}
+
+	if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+		throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+	}
+
+	// HTTP-network-or-cache fetch steps 2.4-2.7
+	let contentLengthValue = null;
+	if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+		contentLengthValue = '0';
+	}
+	if (request.body != null) {
+		const totalBytes = getTotalBytes(request);
+		if (typeof totalBytes === 'number') {
+			contentLengthValue = String(totalBytes);
+		}
+	}
+	if (contentLengthValue) {
+		headers.set('Content-Length', contentLengthValue);
+	}
+
+	// HTTP-network-or-cache fetch step 2.11
+	if (!headers.has('User-Agent')) {
+		headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+	}
+
+	// HTTP-network-or-cache fetch step 2.15
+	if (request.compress && !headers.has('Accept-Encoding')) {
+		headers.set('Accept-Encoding', 'gzip,deflate');
+	}
+
+	let agent = request.agent;
+	if (typeof agent === 'function') {
+		agent = agent(parsedURL);
+	}
+
+	if (!headers.has('Connection') && !agent) {
+		headers.set('Connection', 'close');
+	}
+
+	// HTTP-network fetch step 4.2
+	// chunked encoding is handled by Node.js
+
+	return Object.assign({}, parsedURL, {
+		method: request.method,
+		headers: exportNodeCompatibleHeaders(headers),
+		agent
+	});
+}
+
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
+
+/**
+ * Create AbortError instance
+ *
+ * @param   String      message      Error message for human
+ * @return  AbortError
+ */
+function AbortError(message) {
+  Error.call(this, message);
+
+  this.type = 'aborted';
+  this.message = message;
+
+  // hide custom error implementation details from end-users
+  Error.captureStackTrace(this, this.constructor);
+}
+
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
+
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+const resolve_url = Url.resolve;
+
+/**
+ * Fetch function
+ *
+ * @param   Mixed    url   Absolute url or Request instance
+ * @param   Object   opts  Fetch options
+ * @return  Promise
+ */
+function fetch(url, opts) {
+
+	// allow custom promise
+	if (!fetch.Promise) {
+		throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
+	}
+
+	Body.Promise = fetch.Promise;
+
+	// wrap http.request into fetch
+	return new fetch.Promise(function (resolve, reject) {
+		// build request object
+		const request = new Request(url, opts);
+		const options = getNodeRequestOptions(request);
+
+		const send = (options.protocol === 'https:' ? https : http).request;
+		const signal = request.signal;
+
+		let response = null;
+
+		const abort = function abort() {
+			let error = new AbortError('The user aborted a request.');
+			reject(error);
+			if (request.body && request.body instanceof Stream.Readable) {
+				request.body.destroy(error);
+			}
+			if (!response || !response.body) return;
+			response.body.emit('error', error);
+		};
+
+		if (signal && signal.aborted) {
+			abort();
+			return;
+		}
+
+		const abortAndFinalize = function abortAndFinalize() {
+			abort();
+			finalize();
+		};
+
+		// send request
+		const req = send(options);
+		let reqTimeout;
+
+		if (signal) {
+			signal.addEventListener('abort', abortAndFinalize);
+		}
+
+		function finalize() {
+			req.abort();
+			if (signal) signal.removeEventListener('abort', abortAndFinalize);
+			clearTimeout(reqTimeout);
+		}
+
+		if (request.timeout) {
+			req.once('socket', function (socket) {
+				reqTimeout = setTimeout(function () {
+					reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+					finalize();
+				}, request.timeout);
+			});
+		}
+
+		req.on('error', function (err) {
+			reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+			finalize();
+		});
+
+		req.on('response', function (res) {
+			clearTimeout(reqTimeout);
+
+			const headers = createHeadersLenient(res.headers);
+
+			// HTTP fetch step 5
+			if (fetch.isRedirect(res.statusCode)) {
+				// HTTP fetch step 5.2
+				const location = headers.get('Location');
+
+				// HTTP fetch step 5.3
+				const locationURL = location === null ? null : resolve_url(request.url, location);
+
+				// HTTP fetch step 5.5
+				switch (request.redirect) {
+					case 'error':
+						reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));
+						finalize();
+						return;
+					case 'manual':
+						// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
+						if (locationURL !== null) {
+							// handle corrupted header
+							try {
+								headers.set('Location', locationURL);
+							} catch (err) {
+								// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
+								reject(err);
+							}
+						}
+						break;
+					case 'follow':
+						// HTTP-redirect fetch step 2
+						if (locationURL === null) {
+							break;
+						}
+
+						// HTTP-redirect fetch step 5
+						if (request.counter >= request.follow) {
+							reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
+							finalize();
+							return;
+						}
+
+						// HTTP-redirect fetch step 6 (counter increment)
+						// Create a new Request object.
+						const requestOpts = {
+							headers: new Headers(request.headers),
+							follow: request.follow,
+							counter: request.counter + 1,
+							agent: request.agent,
+							compress: request.compress,
+							method: request.method,
+							body: request.body,
+							signal: request.signal,
+							timeout: request.timeout
+						};
+
+						// HTTP-redirect fetch step 9
+						if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+							reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
+							finalize();
+							return;
+						}
+
+						// HTTP-redirect fetch step 11
+						if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
+							requestOpts.method = 'GET';
+							requestOpts.body = undefined;
+							requestOpts.headers.delete('content-length');
+						}
+
+						// HTTP-redirect fetch step 15
+						resolve(fetch(new Request(locationURL, requestOpts)));
+						finalize();
+						return;
+				}
+			}
+
+			// prepare response
+			res.once('end', function () {
+				if (signal) signal.removeEventListener('abort', abortAndFinalize);
+			});
+			let body = res.pipe(new PassThrough$1());
+
+			const response_options = {
+				url: request.url,
+				status: res.statusCode,
+				statusText: res.statusMessage,
+				headers: headers,
+				size: request.size,
+				timeout: request.timeout,
+				counter: request.counter
+			};
+
+			// HTTP-network fetch step 12.1.1.3
+			const codings = headers.get('Content-Encoding');
+
+			// HTTP-network fetch step 12.1.1.4: handle content codings
+
+			// in following scenarios we ignore compression support
+			// 1. compression support is disabled
+			// 2. HEAD request
+			// 3. no Content-Encoding header
+			// 4. no content response (204)
+			// 5. content not modified response (304)
+			if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// For Node v6+
+			// Be less strict when decoding compressed responses, since sometimes
+			// servers send slightly invalid responses that are still accepted
+			// by common browsers.
+			// Always using Z_SYNC_FLUSH is what cURL does.
+			const zlibOptions = {
+				flush: zlib.Z_SYNC_FLUSH,
+				finishFlush: zlib.Z_SYNC_FLUSH
+			};
+
+			// for gzip
+			if (codings == 'gzip' || codings == 'x-gzip') {
+				body = body.pipe(zlib.createGunzip(zlibOptions));
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// for deflate
+			if (codings == 'deflate' || codings == 'x-deflate') {
+				// handle the infamous raw deflate response from old servers
+				// a hack for old IIS and Apache servers
+				const raw = res.pipe(new PassThrough$1());
+				raw.once('data', function (chunk) {
+					// see http://stackoverflow.com/questions/37519828
+					if ((chunk[0] & 0x0F) === 0x08) {
+						body = body.pipe(zlib.createInflate());
+					} else {
+						body = body.pipe(zlib.createInflateRaw());
+					}
+					response = new Response(body, response_options);
+					resolve(response);
+				});
+				return;
+			}
+
+			// for br
+			if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
+				body = body.pipe(zlib.createBrotliDecompress());
+				response = new Response(body, response_options);
+				resolve(response);
+				return;
+			}
+
+			// otherwise, use response as-is
+			response = new Response(body, response_options);
+			resolve(response);
+		});
+
+		writeToStream(req, request);
+	});
+}
+/**
+ * Redirect code matching
+ *
+ * @param   Number   code  Status code
+ * @return  Boolean
+ */
+fetch.isRedirect = function (code) {
+	return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+};
+
+// expose Promise
+fetch.Promise = global.Promise;
+
+export default fetch;
+export { Headers, Request, Response, FetchError };
diff --git a/setup-maven/node_modules/node-fetch/package.json b/setup-maven/node_modules/node-fetch/package.json
new file mode 100644
index 0000000..e573fdc
--- /dev/null
+++ b/setup-maven/node_modules/node-fetch/package.json
@@ -0,0 +1,93 @@
+{
+  "_from": "node-fetch@^2.3.0",
+  "_id": "node-fetch@2.6.0",
+  "_inBundle": false,
+  "_integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
+  "_location": "/node-fetch",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "node-fetch@^2.3.0",
+    "name": "node-fetch",
+    "escapedName": "node-fetch",
+    "rawSpec": "^2.3.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.3.0"
+  },
+  "_requiredBy": [
+    "/@octokit/request"
+  ],
+  "_resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+  "_shasum": "e633456386d4aa55863f676a7ab0daa8fdecb0fd",
+  "_spec": "node-fetch@^2.3.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "author": {
+    "name": "David Frank"
+  },
+  "browser": "./browser.js",
+  "bugs": {
+    "url": "https://github.com/bitinn/node-fetch/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "A light-weight module that brings window.fetch to node.js",
+  "devDependencies": {
+    "@ungap/url-search-params": "^0.1.2",
+    "abort-controller": "^1.1.0",
+    "abortcontroller-polyfill": "^1.3.0",
+    "babel-core": "^6.26.3",
+    "babel-plugin-istanbul": "^4.1.6",
+    "babel-preset-env": "^1.6.1",
+    "babel-register": "^6.16.3",
+    "chai": "^3.5.0",
+    "chai-as-promised": "^7.1.1",
+    "chai-iterator": "^1.1.1",
+    "chai-string": "~1.3.0",
+    "codecov": "^3.3.0",
+    "cross-env": "^5.2.0",
+    "form-data": "^2.3.3",
+    "is-builtin-module": "^1.0.0",
+    "mocha": "^5.0.0",
+    "nyc": "11.9.0",
+    "parted": "^0.1.1",
+    "promise": "^8.0.3",
+    "resumer": "0.0.0",
+    "rollup": "^0.63.4",
+    "rollup-plugin-babel": "^3.0.7",
+    "string-to-arraybuffer": "^1.0.2",
+    "whatwg-url": "^5.0.0"
+  },
+  "engines": {
+    "node": "4.x || >=6.0.0"
+  },
+  "files": [
+    "lib/index.js",
+    "lib/index.mjs",
+    "lib/index.es.js",
+    "browser.js"
+  ],
+  "homepage": "https://github.com/bitinn/node-fetch",
+  "keywords": [
+    "fetch",
+    "http",
+    "promise"
+  ],
+  "license": "MIT",
+  "main": "lib/index",
+  "module": "lib/index.mjs",
+  "name": "node-fetch",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/bitinn/node-fetch.git"
+  },
+  "scripts": {
+    "build": "cross-env BABEL_ENV=rollup rollup -c",
+    "coverage": "cross-env BABEL_ENV=coverage nyc --reporter json --reporter text mocha -R spec test/test.js && codecov -f coverage/coverage-final.json",
+    "prepare": "npm run build",
+    "report": "cross-env BABEL_ENV=coverage nyc --reporter lcov --reporter text mocha -R spec test/test.js",
+    "test": "cross-env BABEL_ENV=test mocha --require babel-register --throw-deprecation test/test.js"
+  },
+  "version": "2.6.0"
+}
diff --git a/setup-maven/node_modules/npm-run-path/index.js b/setup-maven/node_modules/npm-run-path/index.js
new file mode 100644
index 0000000..56f31e4
--- /dev/null
+++ b/setup-maven/node_modules/npm-run-path/index.js
@@ -0,0 +1,39 @@
+'use strict';
+const path = require('path');
+const pathKey = require('path-key');
+
+module.exports = opts => {
+	opts = Object.assign({
+		cwd: process.cwd(),
+		path: process.env[pathKey()]
+	}, opts);
+
+	let prev;
+	let pth = path.resolve(opts.cwd);
+	const ret = [];
+
+	while (prev !== pth) {
+		ret.push(path.join(pth, 'node_modules/.bin'));
+		prev = pth;
+		pth = path.resolve(pth, '..');
+	}
+
+	// ensure the running `node` binary is used
+	ret.push(path.dirname(process.execPath));
+
+	return ret.concat(opts.path).join(path.delimiter);
+};
+
+module.exports.env = opts => {
+	opts = Object.assign({
+		env: process.env
+	}, opts);
+
+	const env = Object.assign({}, opts.env);
+	const path = pathKey({env});
+
+	opts.path = env[path];
+	env[path] = module.exports(opts);
+
+	return env;
+};
diff --git a/setup-maven/node_modules/npm-run-path/license b/setup-maven/node_modules/npm-run-path/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/setup-maven/node_modules/npm-run-path/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/npm-run-path/package.json b/setup-maven/node_modules/npm-run-path/package.json
new file mode 100644
index 0000000..0d64a95
--- /dev/null
+++ b/setup-maven/node_modules/npm-run-path/package.json
@@ -0,0 +1,77 @@
+{
+  "_from": "npm-run-path@^2.0.0",
+  "_id": "npm-run-path@2.0.2",
+  "_inBundle": false,
+  "_integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+  "_location": "/npm-run-path",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "npm-run-path@^2.0.0",
+    "name": "npm-run-path",
+    "escapedName": "npm-run-path",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/execa"
+  ],
+  "_resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+  "_shasum": "35a9232dfa35d7067b4cb2ddf2357b1871536c5f",
+  "_spec": "npm-run-path@^2.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/execa",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/npm-run-path/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "path-key": "^2.0.0"
+  },
+  "deprecated": false,
+  "description": "Get your PATH prepended with locally installed binaries",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/npm-run-path#readme",
+  "keywords": [
+    "npm",
+    "run",
+    "path",
+    "package",
+    "bin",
+    "binary",
+    "binaries",
+    "script",
+    "cli",
+    "command-line",
+    "execute",
+    "executable"
+  ],
+  "license": "MIT",
+  "name": "npm-run-path",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/npm-run-path.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "2.0.2",
+  "xo": {
+    "esnext": true
+  }
+}
diff --git a/setup-maven/node_modules/npm-run-path/readme.md b/setup-maven/node_modules/npm-run-path/readme.md
new file mode 100644
index 0000000..4ff4722
--- /dev/null
+++ b/setup-maven/node_modules/npm-run-path/readme.md
@@ -0,0 +1,81 @@
+# npm-run-path [![Build Status](https://travis-ci.org/sindresorhus/npm-run-path.svg?branch=master)](https://travis-ci.org/sindresorhus/npm-run-path)
+
+> Get your [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) prepended with locally installed binaries
+
+In [npm run scripts](https://docs.npmjs.com/cli/run-script) you can execute locally installed binaries by name. This enables the same outside npm.
+
+
+## Install
+
+```
+$ npm install --save npm-run-path
+```
+
+
+## Usage
+
+```js
+const childProcess = require('child_process');
+const npmRunPath = require('npm-run-path');
+
+console.log(process.env.PATH);
+//=> '/usr/local/bin'
+
+console.log(npmRunPath());
+//=> '/Users/sindresorhus/dev/foo/node_modules/.bin:/Users/sindresorhus/dev/node_modules/.bin:/Users/sindresorhus/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/usr/local/bin'
+
+// `foo` is a locally installed binary
+childProcess.execFileSync('foo', {
+	env: npmRunPath.env()
+});
+```
+
+
+## API
+
+### npmRunPath([options])
+
+#### options
+
+##### cwd
+
+Type: `string`<br>
+Default: `process.cwd()`
+
+Working directory.
+
+##### path
+
+Type: `string`<br>
+Default: [`PATH`](https://github.com/sindresorhus/path-key)
+
+PATH to be appended.<br>
+Set it to an empty string to exclude the default PATH.
+
+### npmRunPath.env([options])
+
+#### options
+
+##### cwd
+
+Type: `string`<br>
+Default: `process.cwd()`
+
+Working directory.
+
+##### env
+
+Type: `Object`
+
+Accepts an object of environment variables, like `process.env`, and modifies the PATH using the correct [PATH key](https://github.com/sindresorhus/path-key). Use this if you're modifying the PATH for use in the `child_process` options.
+
+
+## Related
+
+- [npm-run-path-cli](https://github.com/sindresorhus/npm-run-path-cli) - CLI for this module
+- [execa](https://github.com/sindresorhus/execa) - Execute a locally installed binary
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/octokit-pagination-methods/.travis.yml b/setup-maven/node_modules/octokit-pagination-methods/.travis.yml
new file mode 100644
index 0000000..7241e46
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/.travis.yml
@@ -0,0 +1,36 @@
+language: node_js
+cache:
+  directories:
+    - ~/.npm
+
+# Trigger a push build on master and greenkeeper branches + PRs build on every branches
+# Avoid double build on PRs (See https://github.com/travis-ci/travis-ci/issues/1147)
+branches:
+  only:
+    - master
+    - /^greenkeeper.*$/
+
+branches:
+  except:
+    - /^v\d+\.\d+\.\d+$/
+
+jobs:
+  include:
+    - stage: test
+      node_js: 6
+    - node_js: 8
+      install: npm ci
+    - node_js: 10
+      install: npm ci
+    - node_js: lts/*
+      script: npm run coverage:upload
+    - stage: release
+      env: semantic-release
+      node_js: lts/*
+      install: npm ci
+      script: npm run semantic-release
+
+stages:
+  - test
+  - name: release
+    if: branch = master AND type IN (push)
diff --git a/setup-maven/node_modules/octokit-pagination-methods/CODE_OF_CONDUCT.md b/setup-maven/node_modules/octokit-pagination-methods/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..8124607
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/CODE_OF_CONDUCT.md
@@ -0,0 +1,46 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at opensource+octokit@github.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/setup-maven/node_modules/octokit-pagination-methods/LICENSE b/setup-maven/node_modules/octokit-pagination-methods/LICENSE
new file mode 100644
index 0000000..4c0d268
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/LICENSE
@@ -0,0 +1,22 @@
+The MIT License
+
+Copyright (c) 2012 Cloud9 IDE, Inc. (Mike de Boer)
+Copyright (c) 2017-2018 Octokit contributors
+
+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/setup-maven/node_modules/octokit-pagination-methods/README.md b/setup-maven/node_modules/octokit-pagination-methods/README.md
new file mode 100644
index 0000000..0dd6341
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/README.md
@@ -0,0 +1,42 @@
+# octokit-pagination-methods
+
+> Legacy Octokit pagination methods from v15
+
+[![Build Status](https://travis-ci.com/gr2m/octokit-pagination-methods.svg?branch=master)](https://travis-ci.com/gr2m/octokit-pagination-methods)
+[![Coverage Status](https://coveralls.io/repos/gr2m/octokit-pagination-methods/badge.svg?branch=master)](https://coveralls.io/github/gr2m/octokit-pagination-methods?branch=master)
+[![Greenkeeper badge](https://badges.greenkeeper.io/gr2m/octokit-pagination-methods.svg)](https://greenkeeper.io/)
+
+Several pagination methods such as `octokit.hasNextPage()` and `octokit.getNextPage()` have been removed from `@octokit/request` in v16.0.0 in favor of `octokit.paginate()`. This plugin brings back the methods to ease the upgrade to v16.
+
+## Usage
+
+```js
+const Octokit = require('@octokit/rest')
+  .plugin('octokit-pagination-methods')
+const octokit = new Octokit()
+
+octokit.issues.getForRepo()
+
+  .then(async response => {
+    // returns true/false
+    octokit.hasNextPage(response)
+    octokit.hasPreviousPage(response)
+    octokit.hasFirstPage(response)
+    octokit.hasLastPage(response)
+
+    // fetch other pages
+    const nextPage = await octokit.getNextPage(response)
+    const previousPage = await octokit.getPreviousPage(response)
+    const firstPage = await octokit.getFirstPage(response)
+    const lastPage = await octokit.getLastPage(response)
+  })
+```
+
+## Credit
+
+These methods have originally been created for `node-github` by [@mikedeboer](https://github.com/mikedeboer)
+while working at Cloud9 IDE, Inc. It was adopted and renamed by GitHub in 2017.
+
+## LICENSE
+
+[MIT](LICENSE)
diff --git a/setup-maven/node_modules/octokit-pagination-methods/index.js b/setup-maven/node_modules/octokit-pagination-methods/index.js
new file mode 100644
index 0000000..f7474a7
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/index.js
@@ -0,0 +1,12 @@
+module.exports = paginationMethodsPlugin
+
+function paginationMethodsPlugin (octokit) {
+  octokit.getFirstPage = require('./lib/get-first-page').bind(null, octokit)
+  octokit.getLastPage = require('./lib/get-last-page').bind(null, octokit)
+  octokit.getNextPage = require('./lib/get-next-page').bind(null, octokit)
+  octokit.getPreviousPage = require('./lib/get-previous-page').bind(null, octokit)
+  octokit.hasFirstPage = require('./lib/has-first-page')
+  octokit.hasLastPage = require('./lib/has-last-page')
+  octokit.hasNextPage = require('./lib/has-next-page')
+  octokit.hasPreviousPage = require('./lib/has-previous-page')
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/deprecate.js b/setup-maven/node_modules/octokit-pagination-methods/lib/deprecate.js
new file mode 100644
index 0000000..c56f7ab
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/deprecate.js
@@ -0,0 +1,12 @@
+module.exports = deprecate
+
+const loggedMessages = {}
+
+function deprecate (message) {
+  if (loggedMessages[message]) {
+    return
+  }
+
+  console.warn(`DEPRECATED (@octokit/rest): ${message}`)
+  loggedMessages[message] = 1
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/get-first-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/get-first-page.js
new file mode 100644
index 0000000..5f2dff9
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/get-first-page.js
@@ -0,0 +1,7 @@
+module.exports = getFirstPage
+
+const getPage = require('./get-page')
+
+function getFirstPage (octokit, link, headers) {
+  return getPage(octokit, link, 'first', headers)
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/get-last-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/get-last-page.js
new file mode 100644
index 0000000..9f86246
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/get-last-page.js
@@ -0,0 +1,7 @@
+module.exports = getLastPage
+
+const getPage = require('./get-page')
+
+function getLastPage (octokit, link, headers) {
+  return getPage(octokit, link, 'last', headers)
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/get-next-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/get-next-page.js
new file mode 100644
index 0000000..fbd5e94
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/get-next-page.js
@@ -0,0 +1,7 @@
+module.exports = getNextPage
+
+const getPage = require('./get-page')
+
+function getNextPage (octokit, link, headers) {
+  return getPage(octokit, link, 'next', headers)
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/get-page-links.js b/setup-maven/node_modules/octokit-pagination-methods/lib/get-page-links.js
new file mode 100644
index 0000000..585eadb
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/get-page-links.js
@@ -0,0 +1,15 @@
+module.exports = getPageLinks
+
+function getPageLinks (link) {
+  link = link.link || link.headers.link || ''
+
+  const links = {}
+
+  // link format:
+  // '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"'
+  link.replace(/<([^>]*)>;\s*rel="([\w]*)"/g, (m, uri, type) => {
+    links[type] = uri
+  })
+
+  return links
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/get-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/get-page.js
new file mode 100644
index 0000000..d60fe73
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/get-page.js
@@ -0,0 +1,38 @@
+module.exports = getPage
+
+const deprecate = require('./deprecate')
+const getPageLinks = require('./get-page-links')
+const HttpError = require('./http-error')
+
+function getPage (octokit, link, which, headers) {
+  deprecate(`octokit.get${which.charAt(0).toUpperCase() + which.slice(1)}Page() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
+  const url = getPageLinks(link)[which]
+
+  if (!url) {
+    const urlError = new HttpError(`No ${which} page found`, 404)
+    return Promise.reject(urlError)
+  }
+
+  const requestOptions = {
+    url,
+    headers: applyAcceptHeader(link, headers)
+  }
+
+  const promise = octokit.request(requestOptions)
+
+  return promise
+}
+
+function applyAcceptHeader (res, headers) {
+  const previous = res.headers && res.headers['x-github-media-type']
+
+  if (!previous || (headers && headers.accept)) {
+    return headers
+  }
+  headers = headers || {}
+  headers.accept = 'application/vnd.' + previous
+    .replace('; param=', '.')
+    .replace('; format=', '+')
+
+  return headers
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/get-previous-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/get-previous-page.js
new file mode 100644
index 0000000..0477eeb
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/get-previous-page.js
@@ -0,0 +1,7 @@
+module.exports = getPreviousPage
+
+const getPage = require('./get-page')
+
+function getPreviousPage (octokit, link, headers) {
+  return getPage(octokit, link, 'prev', headers)
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/has-first-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/has-first-page.js
new file mode 100644
index 0000000..3814b1f
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/has-first-page.js
@@ -0,0 +1,9 @@
+module.exports = hasFirstPage
+
+const deprecate = require('./deprecate')
+const getPageLinks = require('./get-page-links')
+
+function hasFirstPage (link) {
+  deprecate(`octokit.hasFirstPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
+  return getPageLinks(link).first
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/has-last-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/has-last-page.js
new file mode 100644
index 0000000..10c12e3
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/has-last-page.js
@@ -0,0 +1,9 @@
+module.exports = hasLastPage
+
+const deprecate = require('./deprecate')
+const getPageLinks = require('./get-page-links')
+
+function hasLastPage (link) {
+  deprecate(`octokit.hasLastPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
+  return getPageLinks(link).last
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/has-next-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/has-next-page.js
new file mode 100644
index 0000000..1015ccd
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/has-next-page.js
@@ -0,0 +1,9 @@
+module.exports = hasNextPage
+
+const deprecate = require('./deprecate')
+const getPageLinks = require('./get-page-links')
+
+function hasNextPage (link) {
+  deprecate(`octokit.hasNextPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
+  return getPageLinks(link).next
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/has-previous-page.js b/setup-maven/node_modules/octokit-pagination-methods/lib/has-previous-page.js
new file mode 100644
index 0000000..49e0926
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/has-previous-page.js
@@ -0,0 +1,9 @@
+module.exports = hasPreviousPage
+
+const deprecate = require('./deprecate')
+const getPageLinks = require('./get-page-links')
+
+function hasPreviousPage (link) {
+  deprecate(`octokit.hasPreviousPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
+  return getPageLinks(link).prev
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/lib/http-error.js b/setup-maven/node_modules/octokit-pagination-methods/lib/http-error.js
new file mode 100644
index 0000000..8eb9f2f
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/lib/http-error.js
@@ -0,0 +1,15 @@
+module.exports = class HttpError extends Error {
+  constructor (message, code, headers) {
+    super(message)
+
+    // Maintains proper stack trace (only available on V8)
+    /* istanbul ignore next */
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, this.constructor)
+    }
+
+    this.name = 'HttpError'
+    this.code = code
+    this.headers = headers
+  }
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/package.json b/setup-maven/node_modules/octokit-pagination-methods/package.json
new file mode 100644
index 0000000..ce81d5c
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/package.json
@@ -0,0 +1,76 @@
+{
+  "_from": "octokit-pagination-methods@^1.1.0",
+  "_id": "octokit-pagination-methods@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==",
+  "_location": "/octokit-pagination-methods",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "octokit-pagination-methods@^1.1.0",
+    "name": "octokit-pagination-methods",
+    "escapedName": "octokit-pagination-methods",
+    "rawSpec": "^1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.0"
+  },
+  "_requiredBy": [
+    "/@octokit/rest"
+  ],
+  "_resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz",
+  "_shasum": "cf472edc9d551055f9ef73f6e42b4dbb4c80bea4",
+  "_spec": "octokit-pagination-methods@^1.1.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/rest",
+  "author": {
+    "name": "Gregor Martynus",
+    "url": "https://github.com/gr2m"
+  },
+  "bugs": {
+    "url": "https://github.com/gr2m/octokit-pagination-methods/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Legacy Octokit pagination methods from v15",
+  "devDependencies": {
+    "@octokit/rest": "github:octokit/rest.js#next",
+    "coveralls": "^3.0.2",
+    "nock": "^10.0.2",
+    "semantic-release": "^15.10.8",
+    "simple-mock": "^0.8.0",
+    "standard": "^12.0.1",
+    "standard-markdown": "^5.0.1",
+    "tap": "^12.0.1"
+  },
+  "directories": {
+    "test": "test"
+  },
+  "homepage": "https://github.com/gr2m/octokit-pagination-methods#readme",
+  "keywords": [
+    "octokit",
+    "github",
+    "api",
+    "rest",
+    "plugin"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "octokit-pagination-methods",
+  "publishConfig": {
+    "access": "public",
+    "tag": "latest"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gr2m/octokit-pagination-methods.git"
+  },
+  "scripts": {
+    "coverage": "tap --coverage-report=html",
+    "coverage:upload": "npm run test && tap --coverage-report=text-lcov | coveralls",
+    "pretest": "standard && standard-markdown *.md",
+    "semantic-release": "semantic-release",
+    "test": "tap --coverage test.js"
+  },
+  "version": "1.1.0"
+}
diff --git a/setup-maven/node_modules/octokit-pagination-methods/test.js b/setup-maven/node_modules/octokit-pagination-methods/test.js
new file mode 100644
index 0000000..d16f4a2
--- /dev/null
+++ b/setup-maven/node_modules/octokit-pagination-methods/test.js
@@ -0,0 +1,93 @@
+const test = require('tap').test
+const nock = require('nock')
+
+const Octokit = require('@octokit/rest')
+  .plugin(require('.'))
+
+test('@octokit/pagination-methods', (t) => {
+  nock('https://api.github.com', {
+    reqheaders: {
+      authorization: 'token secrettoken123'
+    }
+  })
+    .get('/organizations')
+    .query({ page: 3, per_page: 1 })
+    .reply(200, [{}], {
+      'Link': '<https://api.github.com/organizations?page=4&per_page=1>; rel="next", <https://api.github.com/organizations?page=1&per_page=1>; rel="first", <https://api.github.com/organizations?page=2&per_page=1>; rel="prev"',
+      'X-GitHub-Media-Type': 'octokit.v3; format=json'
+    })
+    .get('/organizations')
+    .query({ page: 1, per_page: 1 })
+    .reply(200, [{}])
+    .get('/organizations')
+    .query({ page: 2, per_page: 1 })
+    .reply(200, [{}])
+    .get('/organizations')
+    .query({ page: 4, per_page: 1 })
+    .reply(404, {})
+
+  const octokit = new Octokit()
+
+  octokit.authenticate({
+    type: 'token',
+    token: 'secrettoken123'
+  })
+
+  return octokit.orgs.getAll({
+    page: 3,
+    per_page: 1
+  })
+
+    .then((response) => {
+      t.ok(octokit.hasNextPage(response))
+      t.ok(octokit.hasPreviousPage(response))
+      t.ok(octokit.hasFirstPage(response))
+      t.notOk(octokit.hasLastPage(response))
+
+      const noop = () => {}
+
+      return Promise.all([
+        octokit.getFirstPage(response)
+          .then(response => {
+            t.doesNotThrow(() => {
+              octokit.hasPreviousPage(response)
+            })
+            t.notOk(octokit.hasPreviousPage(response))
+          }),
+        octokit.getPreviousPage(response, { foo: 'bar', accept: 'application/vnd.octokit.v3+json' }),
+        octokit.getNextPage(response).catch(noop),
+        octokit.getLastPage(response, { foo: 'bar' })
+          .catch(error => {
+            t.equals(error.code, 404)
+          }),
+        // test error with promise
+        octokit.getLastPage(response).catch(noop)
+      ])
+    })
+
+    .catch(t.error)
+})
+
+test('carries accept header correctly', () => {
+  nock('https://api.github.com', {
+    reqheaders: {
+      accept: 'application/vnd.github.hellcat-preview+json'
+    }
+  })
+    .get('/user/teams')
+    .query({ per_page: 1 })
+    .reply(200, [{}], {
+      'Link': '<https://api.github.com/user/teams?page=2&per_page=1>; rel="next"',
+      'X-GitHub-Media-Type': 'github; param=hellcat-preview; format=json'
+    })
+    .get('/user/teams')
+    .query({ page: 2, per_page: 1 })
+    .reply(200, [])
+
+  const octokit = new Octokit()
+
+  return octokit.users.getTeams({ per_page: 1 })
+    .then(response => {
+      return octokit.getNextPage(response)
+    })
+})
diff --git a/setup-maven/node_modules/once/LICENSE b/setup-maven/node_modules/once/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/setup-maven/node_modules/once/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/once/README.md b/setup-maven/node_modules/once/README.md
new file mode 100644
index 0000000..1f1ffca
--- /dev/null
+++ b/setup-maven/node_modules/once/README.md
@@ -0,0 +1,79 @@
+# once
+
+Only call a function once.
+
+## usage
+
+```javascript
+var once = require('once')
+
+function load (file, cb) {
+  cb = once(cb)
+  loader.load('file')
+  loader.once('load', cb)
+  loader.once('error', cb)
+}
+```
+
+Or add to the Function.prototype in a responsible way:
+
+```javascript
+// only has to be done once
+require('once').proto()
+
+function load (file, cb) {
+  cb = cb.once()
+  loader.load('file')
+  loader.once('load', cb)
+  loader.once('error', cb)
+}
+```
+
+Ironically, the prototype feature makes this module twice as
+complicated as necessary.
+
+To check whether you function has been called, use `fn.called`. Once the
+function is called for the first time the return value of the original
+function is saved in `fn.value` and subsequent calls will continue to
+return this value.
+
+```javascript
+var once = require('once')
+
+function load (cb) {
+  cb = once(cb)
+  var stream = createStream()
+  stream.once('data', cb)
+  stream.once('end', function () {
+    if (!cb.called) cb(new Error('not found'))
+  })
+}
+```
+
+## `once.strict(func)`
+
+Throw an error if the function is called twice.
+
+Some functions are expected to be called only once. Using `once` for them would
+potentially hide logical errors.
+
+In the example below, the `greet` function has to call the callback only once:
+
+```javascript
+function greet (name, cb) {
+  // return is missing from the if statement
+  // when no name is passed, the callback is called twice
+  if (!name) cb('Hello anonymous')
+  cb('Hello ' + name)
+}
+
+function log (msg) {
+  console.log(msg)
+}
+
+// this will print 'Hello anonymous' but the logical error will be missed
+greet(null, once(msg))
+
+// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time
+greet(null, once.strict(msg))
+```
diff --git a/setup-maven/node_modules/once/once.js b/setup-maven/node_modules/once/once.js
new file mode 100644
index 0000000..2354067
--- /dev/null
+++ b/setup-maven/node_modules/once/once.js
@@ -0,0 +1,42 @@
+var wrappy = require('wrappy')
+module.exports = wrappy(once)
+module.exports.strict = wrappy(onceStrict)
+
+once.proto = once(function () {
+  Object.defineProperty(Function.prototype, 'once', {
+    value: function () {
+      return once(this)
+    },
+    configurable: true
+  })
+
+  Object.defineProperty(Function.prototype, 'onceStrict', {
+    value: function () {
+      return onceStrict(this)
+    },
+    configurable: true
+  })
+})
+
+function once (fn) {
+  var f = function () {
+    if (f.called) return f.value
+    f.called = true
+    return f.value = fn.apply(this, arguments)
+  }
+  f.called = false
+  return f
+}
+
+function onceStrict (fn) {
+  var f = function () {
+    if (f.called)
+      throw new Error(f.onceError)
+    f.called = true
+    return f.value = fn.apply(this, arguments)
+  }
+  var name = fn.name || 'Function wrapped with `once`'
+  f.onceError = name + " shouldn't be called more than once"
+  f.called = false
+  return f
+}
diff --git a/setup-maven/node_modules/once/package.json b/setup-maven/node_modules/once/package.json
new file mode 100644
index 0000000..634a1c0
--- /dev/null
+++ b/setup-maven/node_modules/once/package.json
@@ -0,0 +1,70 @@
+{
+  "_from": "once@^1.4.0",
+  "_id": "once@1.4.0",
+  "_inBundle": false,
+  "_integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+  "_location": "/once",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "once@^1.4.0",
+    "name": "once",
+    "escapedName": "once",
+    "rawSpec": "^1.4.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.4.0"
+  },
+  "_requiredBy": [
+    "/@octokit/request",
+    "/@octokit/request-error",
+    "/@octokit/rest",
+    "/end-of-stream",
+    "/pump"
+  ],
+  "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+  "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1",
+  "_spec": "once@^1.4.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/request",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me/"
+  },
+  "bugs": {
+    "url": "https://github.com/isaacs/once/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "wrappy": "1"
+  },
+  "deprecated": false,
+  "description": "Run a function exactly one time",
+  "devDependencies": {
+    "tap": "^7.0.1"
+  },
+  "directories": {
+    "test": "test"
+  },
+  "files": [
+    "once.js"
+  ],
+  "homepage": "https://github.com/isaacs/once#readme",
+  "keywords": [
+    "once",
+    "function",
+    "one",
+    "single"
+  ],
+  "license": "ISC",
+  "main": "once.js",
+  "name": "once",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/once.git"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "version": "1.4.0"
+}
diff --git a/setup-maven/node_modules/os-name/index.d.ts b/setup-maven/node_modules/os-name/index.d.ts
new file mode 100644
index 0000000..b1246ac
--- /dev/null
+++ b/setup-maven/node_modules/os-name/index.d.ts
@@ -0,0 +1,37 @@
+/// <reference types="node"/>
+
+/**
+Get the name of the current operating system.
+
+By default, the name of the current operating system is returned.
+
+@param platform - Custom platform name.
+@param release - Custom release name.
+
+@example
+```
+import * as os fron 'os';
+import osName = require('os-name');
+
+// On a macOS Sierra system
+
+osName();
+//=> 'macOS Sierra'
+
+osName(os.platform(), os.release());
+//=> 'macOS Sierra'
+
+osName('darwin', '14.0.0');
+//=> 'OS X Yosemite'
+
+osName('linux', '3.13.0-24-generic');
+//=> 'Linux 3.13'
+
+osName('win32', '6.3.9600');
+//=> 'Windows 8.1'
+```
+*/
+declare function osName(): string;
+declare function osName(platform: NodeJS.Platform, release: string): string;
+
+export = osName;
diff --git a/setup-maven/node_modules/os-name/index.js b/setup-maven/node_modules/os-name/index.js
new file mode 100644
index 0000000..f1287d5
--- /dev/null
+++ b/setup-maven/node_modules/os-name/index.js
@@ -0,0 +1,46 @@
+'use strict';
+const os = require('os');
+const macosRelease = require('macos-release');
+const winRelease = require('windows-release');
+
+const osName = (platform, release) => {
+	if (!platform && release) {
+		throw new Error('You can\'t specify a `release` without specifying `platform`');
+	}
+
+	platform = platform || os.platform();
+
+	let id;
+
+	if (platform === 'darwin') {
+		if (!release && os.platform() === 'darwin') {
+			release = os.release();
+		}
+
+		const prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS';
+		id = release ? macosRelease(release).name : '';
+		return prefix + (id ? ' ' + id : '');
+	}
+
+	if (platform === 'linux') {
+		if (!release && os.platform() === 'linux') {
+			release = os.release();
+		}
+
+		id = release ? release.replace(/^(\d+\.\d+).*/, '$1') : '';
+		return 'Linux' + (id ? ' ' + id : '');
+	}
+
+	if (platform === 'win32') {
+		if (!release && os.platform() === 'win32') {
+			release = os.release();
+		}
+
+		id = release ? winRelease(release) : '';
+		return 'Windows' + (id ? ' ' + id : '');
+	}
+
+	return platform;
+};
+
+module.exports = osName;
diff --git a/setup-maven/node_modules/os-name/license b/setup-maven/node_modules/os-name/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/setup-maven/node_modules/os-name/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/os-name/package.json b/setup-maven/node_modules/os-name/package.json
new file mode 100644
index 0000000..a402a61
--- /dev/null
+++ b/setup-maven/node_modules/os-name/package.json
@@ -0,0 +1,80 @@
+{
+  "_from": "os-name@^3.1.0",
+  "_id": "os-name@3.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==",
+  "_location": "/os-name",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "os-name@^3.1.0",
+    "name": "os-name",
+    "escapedName": "os-name",
+    "rawSpec": "^3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.1.0"
+  },
+  "_requiredBy": [
+    "/@octokit/endpoint/universal-user-agent",
+    "/@octokit/request/universal-user-agent",
+    "/@octokit/rest/universal-user-agent",
+    "/universal-user-agent"
+  ],
+  "_resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz",
+  "_shasum": "dec19d966296e1cd62d701a5a66ee1ddeae70801",
+  "_spec": "os-name@^3.1.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/endpoint/node_modules/universal-user-agent",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/os-name/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "macos-release": "^2.2.0",
+    "windows-release": "^3.1.0"
+  },
+  "deprecated": false,
+  "description": "Get the name of the current operating system. Example: macOS Sierra",
+  "devDependencies": {
+    "@types/node": "^11.13.0",
+    "ava": "^1.4.1",
+    "tsd": "^0.7.2",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/os-name#readme",
+  "keywords": [
+    "os",
+    "operating",
+    "system",
+    "platform",
+    "name",
+    "title",
+    "release",
+    "version",
+    "macos",
+    "windows",
+    "linux"
+  ],
+  "license": "MIT",
+  "name": "os-name",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/os-name.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "3.1.0"
+}
diff --git a/setup-maven/node_modules/os-name/readme.md b/setup-maven/node_modules/os-name/readme.md
new file mode 100644
index 0000000..35812b2
--- /dev/null
+++ b/setup-maven/node_modules/os-name/readme.md
@@ -0,0 +1,64 @@
+# os-name [![Build Status](https://travis-ci.org/sindresorhus/os-name.svg?branch=master)](https://travis-ci.org/sindresorhus/os-name)
+
+> Get the name of the current operating system<br>
+> Example: `macOS Sierra`
+
+Useful for analytics and debugging.
+
+
+## Install
+
+```
+$ npm install os-name
+```
+
+
+## Usage
+
+```js
+const os = require('os');
+const osName = require('os-name');
+
+// On a macOS Sierra system
+
+osName();
+//=> 'macOS Sierra'
+
+osName(os.platform(), os.release());
+//=> 'macOS Sierra'
+
+osName('darwin', '14.0.0');
+//=> 'OS X Yosemite'
+
+osName('linux', '3.13.0-24-generic');
+//=> 'Linux 3.13'
+
+osName('win32', '6.3.9600');
+//=> 'Windows 8.1'
+```
+
+
+## API
+
+### osName([platform, release])
+
+By default, the name of the current operating system is returned.
+
+You can optionally supply a custom [`os.platform()`](https://nodejs.org/api/os.html#os_os_platform) and [`os.release()`](https://nodejs.org/api/os.html#os_os_release).
+
+Check out [`getos`](https://github.com/wblankenship/getos) if you need the Linux distribution name.
+
+
+## Contributing
+
+Production systems depend on this package for logging / tracking. Please be careful when introducing new output, and adhere to existing output format (whitespace, capitalization, etc.).
+
+
+## Related
+
+- [os-name-cli](https://github.com/sindresorhus/os-name-cli) - CLI for this module
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/p-finally/index.js b/setup-maven/node_modules/p-finally/index.js
new file mode 100644
index 0000000..52b7b49
--- /dev/null
+++ b/setup-maven/node_modules/p-finally/index.js
@@ -0,0 +1,15 @@
+'use strict';
+module.exports = (promise, onFinally) => {
+	onFinally = onFinally || (() => {});
+
+	return promise.then(
+		val => new Promise(resolve => {
+			resolve(onFinally());
+		}).then(() => val),
+		err => new Promise(resolve => {
+			resolve(onFinally());
+		}).then(() => {
+			throw err;
+		})
+	);
+};
diff --git a/setup-maven/node_modules/p-finally/license b/setup-maven/node_modules/p-finally/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/setup-maven/node_modules/p-finally/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/p-finally/package.json b/setup-maven/node_modules/p-finally/package.json
new file mode 100644
index 0000000..81b5a8a
--- /dev/null
+++ b/setup-maven/node_modules/p-finally/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "p-finally@^1.0.0",
+  "_id": "p-finally@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+  "_location": "/p-finally",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "p-finally@^1.0.0",
+    "name": "p-finally",
+    "escapedName": "p-finally",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/execa"
+  ],
+  "_resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+  "_shasum": "3fbcfb15b899a44123b34b6dcc18b724336a2cae",
+  "_spec": "p-finally@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/execa",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/p-finally/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "`Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/p-finally#readme",
+  "keywords": [
+    "promise",
+    "finally",
+    "handler",
+    "function",
+    "async",
+    "await",
+    "promises",
+    "settled",
+    "ponyfill",
+    "polyfill",
+    "shim",
+    "bluebird"
+  ],
+  "license": "MIT",
+  "name": "p-finally",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/p-finally.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "1.0.0",
+  "xo": {
+    "esnext": true
+  }
+}
diff --git a/setup-maven/node_modules/p-finally/readme.md b/setup-maven/node_modules/p-finally/readme.md
new file mode 100644
index 0000000..09ef364
--- /dev/null
+++ b/setup-maven/node_modules/p-finally/readme.md
@@ -0,0 +1,47 @@
+# p-finally [![Build Status](https://travis-ci.org/sindresorhus/p-finally.svg?branch=master)](https://travis-ci.org/sindresorhus/p-finally)
+
+> [`Promise#finally()`](https://github.com/tc39/proposal-promise-finally) [ponyfill](https://ponyfill.com) - Invoked when the promise is settled regardless of outcome
+
+Useful for cleanup.
+
+
+## Install
+
+```
+$ npm install --save p-finally
+```
+
+
+## Usage
+
+```js
+const pFinally = require('p-finally');
+
+const dir = createTempDir();
+
+pFinally(write(dir), () => cleanup(dir));
+```
+
+
+## API
+
+### pFinally(promise, [onFinally])
+
+Returns a `Promise`.
+
+#### onFinally
+
+Type: `Function`
+
+Note: Throwing or returning a rejected promise will reject `promise` with the rejection reason.
+
+
+## Related
+
+- [p-try](https://github.com/sindresorhus/p-try) - `Promise#try()` ponyfill - Starts a promise chain
+- [More…](https://github.com/sindresorhus/promise-fun)
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/path-key/index.js b/setup-maven/node_modules/path-key/index.js
new file mode 100644
index 0000000..62c8250
--- /dev/null
+++ b/setup-maven/node_modules/path-key/index.js
@@ -0,0 +1,13 @@
+'use strict';
+module.exports = opts => {
+	opts = opts || {};
+
+	const env = opts.env || process.env;
+	const platform = opts.platform || process.platform;
+
+	if (platform !== 'win32') {
+		return 'PATH';
+	}
+
+	return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path';
+};
diff --git a/setup-maven/node_modules/path-key/license b/setup-maven/node_modules/path-key/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/setup-maven/node_modules/path-key/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/path-key/package.json b/setup-maven/node_modules/path-key/package.json
new file mode 100644
index 0000000..c6dbe9f
--- /dev/null
+++ b/setup-maven/node_modules/path-key/package.json
@@ -0,0 +1,72 @@
+{
+  "_from": "path-key@^2.0.1",
+  "_id": "path-key@2.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+  "_location": "/path-key",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "path-key@^2.0.1",
+    "name": "path-key",
+    "escapedName": "path-key",
+    "rawSpec": "^2.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.1"
+  },
+  "_requiredBy": [
+    "/cross-spawn",
+    "/npm-run-path"
+  ],
+  "_resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+  "_shasum": "411cadb574c5a140d3a4b1910d40d80cc9f40b40",
+  "_spec": "path-key@^2.0.1",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/cross-spawn",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/path-key/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Get the PATH environment variable key cross-platform",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/path-key#readme",
+  "keywords": [
+    "path",
+    "key",
+    "environment",
+    "env",
+    "variable",
+    "var",
+    "get",
+    "cross-platform",
+    "windows"
+  ],
+  "license": "MIT",
+  "name": "path-key",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/path-key.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "2.0.1",
+  "xo": {
+    "esnext": true
+  }
+}
diff --git a/setup-maven/node_modules/path-key/readme.md b/setup-maven/node_modules/path-key/readme.md
new file mode 100644
index 0000000..cb5710a
--- /dev/null
+++ b/setup-maven/node_modules/path-key/readme.md
@@ -0,0 +1,51 @@
+# path-key [![Build Status](https://travis-ci.org/sindresorhus/path-key.svg?branch=master)](https://travis-ci.org/sindresorhus/path-key)
+
+> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform
+
+It's usually `PATH`, but on Windows it can be any casing like `Path`...
+
+
+## Install
+
+```
+$ npm install --save path-key
+```
+
+
+## Usage
+
+```js
+const pathKey = require('path-key');
+
+const key = pathKey();
+//=> 'PATH'
+
+const PATH = process.env[key];
+//=> '/usr/local/bin:/usr/bin:/bin'
+```
+
+
+## API
+
+### pathKey([options])
+
+#### options
+
+##### env
+
+Type: `Object`<br>
+Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env)
+
+Use a custom environment variables object.
+
+#### platform
+
+Type: `string`<br>
+Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform)
+
+Get the PATH key for a specific platform.
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/pump/.travis.yml b/setup-maven/node_modules/pump/.travis.yml
new file mode 100644
index 0000000..17f9433
--- /dev/null
+++ b/setup-maven/node_modules/pump/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+  - "0.10"
+
+script: "npm test"
diff --git a/setup-maven/node_modules/pump/LICENSE b/setup-maven/node_modules/pump/LICENSE
new file mode 100644
index 0000000..757562e
--- /dev/null
+++ b/setup-maven/node_modules/pump/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+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.
\ No newline at end of file
diff --git a/setup-maven/node_modules/pump/README.md b/setup-maven/node_modules/pump/README.md
new file mode 100644
index 0000000..4c81471
--- /dev/null
+++ b/setup-maven/node_modules/pump/README.md
@@ -0,0 +1,65 @@
+# pump
+
+pump is a small node module that pipes streams together and destroys all of them if one of them closes.
+
+```
+npm install pump
+```
+
+[![build status](http://img.shields.io/travis/mafintosh/pump.svg?style=flat)](http://travis-ci.org/mafintosh/pump)
+
+## What problem does it solve?
+
+When using standard `source.pipe(dest)` source will _not_ be destroyed if dest emits close or an error.
+You are also not able to provide a callback to tell when then pipe has finished.
+
+pump does these two things for you
+
+## Usage
+
+Simply pass the streams you want to pipe together to pump and add an optional callback
+
+``` js
+var pump = require('pump')
+var fs = require('fs')
+
+var source = fs.createReadStream('/dev/random')
+var dest = fs.createWriteStream('/dev/null')
+
+pump(source, dest, function(err) {
+  console.log('pipe finished', err)
+})
+
+setTimeout(function() {
+  dest.destroy() // when dest is closed pump will destroy source
+}, 1000)
+```
+
+You can use pump to pipe more than two streams together as well
+
+``` js
+var transform = someTransformStream()
+
+pump(source, transform, anotherTransform, dest, function(err) {
+  console.log('pipe finished', err)
+})
+```
+
+If `source`, `transform`, `anotherTransform` or `dest` closes all of them will be destroyed.
+
+Similarly to `stream.pipe()`, `pump()` returns the last stream passed in, so you can do:
+
+```
+return pump(s1, s2) // returns s2
+```
+
+If you want to return a stream that combines *both* s1 and s2 to a single stream use
+[pumpify](https://github.com/mafintosh/pumpify) instead.
+
+## License
+
+MIT
+
+## Related
+
+`pump` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
diff --git a/setup-maven/node_modules/pump/index.js b/setup-maven/node_modules/pump/index.js
new file mode 100644
index 0000000..c15059f
--- /dev/null
+++ b/setup-maven/node_modules/pump/index.js
@@ -0,0 +1,82 @@
+var once = require('once')
+var eos = require('end-of-stream')
+var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes
+
+var noop = function () {}
+var ancient = /^v?\.0/.test(process.version)
+
+var isFn = function (fn) {
+  return typeof fn === 'function'
+}
+
+var isFS = function (stream) {
+  if (!ancient) return false // newer node version do not need to care about fs is a special way
+  if (!fs) return false // browser
+  return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
+}
+
+var isRequest = function (stream) {
+  return stream.setHeader && isFn(stream.abort)
+}
+
+var destroyer = function (stream, reading, writing, callback) {
+  callback = once(callback)
+
+  var closed = false
+  stream.on('close', function () {
+    closed = true
+  })
+
+  eos(stream, {readable: reading, writable: writing}, function (err) {
+    if (err) return callback(err)
+    closed = true
+    callback()
+  })
+
+  var destroyed = false
+  return function (err) {
+    if (closed) return
+    if (destroyed) return
+    destroyed = true
+
+    if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
+    if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
+
+    if (isFn(stream.destroy)) return stream.destroy()
+
+    callback(err || new Error('stream was destroyed'))
+  }
+}
+
+var call = function (fn) {
+  fn()
+}
+
+var pipe = function (from, to) {
+  return from.pipe(to)
+}
+
+var pump = function () {
+  var streams = Array.prototype.slice.call(arguments)
+  var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
+
+  if (Array.isArray(streams[0])) streams = streams[0]
+  if (streams.length < 2) throw new Error('pump requires two streams per minimum')
+
+  var error
+  var destroys = streams.map(function (stream, i) {
+    var reading = i < streams.length - 1
+    var writing = i > 0
+    return destroyer(stream, reading, writing, function (err) {
+      if (!error) error = err
+      if (err) destroys.forEach(call)
+      if (reading) return
+      destroys.forEach(call)
+      callback(error)
+    })
+  })
+
+  return streams.reduce(pipe)
+}
+
+module.exports = pump
diff --git a/setup-maven/node_modules/pump/package.json b/setup-maven/node_modules/pump/package.json
new file mode 100644
index 0000000..fd5f24d
--- /dev/null
+++ b/setup-maven/node_modules/pump/package.json
@@ -0,0 +1,59 @@
+{
+  "_from": "pump@^3.0.0",
+  "_id": "pump@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+  "_location": "/pump",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "pump@^3.0.0",
+    "name": "pump",
+    "escapedName": "pump",
+    "rawSpec": "^3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.0"
+  },
+  "_requiredBy": [
+    "/get-stream"
+  ],
+  "_resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+  "_shasum": "b4a2116815bde2f4e1ea602354e8c75565107a64",
+  "_spec": "pump@^3.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/get-stream",
+  "author": {
+    "name": "Mathias Buus Madsen",
+    "email": "mathiasbuus@gmail.com"
+  },
+  "browser": {
+    "fs": false
+  },
+  "bugs": {
+    "url": "https://github.com/mafintosh/pump/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "end-of-stream": "^1.1.0",
+    "once": "^1.3.1"
+  },
+  "deprecated": false,
+  "description": "pipe streams together and close all of them if one of them closes",
+  "homepage": "https://github.com/mafintosh/pump#readme",
+  "keywords": [
+    "streams",
+    "pipe",
+    "destroy",
+    "callback"
+  ],
+  "license": "MIT",
+  "name": "pump",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/mafintosh/pump.git"
+  },
+  "scripts": {
+    "test": "node test-browser.js && node test-node.js"
+  },
+  "version": "3.0.0"
+}
diff --git a/setup-maven/node_modules/pump/test-browser.js b/setup-maven/node_modules/pump/test-browser.js
new file mode 100644
index 0000000..9a06c8a
--- /dev/null
+++ b/setup-maven/node_modules/pump/test-browser.js
@@ -0,0 +1,66 @@
+var stream = require('stream')
+var pump = require('./index')
+
+var rs = new stream.Readable()
+var ws = new stream.Writable()
+
+rs._read = function (size) {
+  this.push(Buffer(size).fill('abc'))
+}
+
+ws._write = function (chunk, encoding, cb) {
+  setTimeout(function () {
+    cb()
+  }, 100)
+}
+
+var toHex = function () {
+  var reverse = new (require('stream').Transform)()
+
+  reverse._transform = function (chunk, enc, callback) {
+    reverse.push(chunk.toString('hex'))
+    callback()
+  }
+
+  return reverse
+}
+
+var wsClosed = false
+var rsClosed = false
+var callbackCalled = false
+
+var check = function () {
+  if (wsClosed && rsClosed && callbackCalled) {
+    console.log('test-browser.js passes')
+    clearTimeout(timeout)
+  }
+}
+
+ws.on('finish', function () {
+  wsClosed = true
+  check()
+})
+
+rs.on('end', function () {
+  rsClosed = true
+  check()
+})
+
+var res = pump(rs, toHex(), toHex(), toHex(), ws, function () {
+  callbackCalled = true
+  check()
+})
+
+if (res !== ws) {
+  throw new Error('should return last stream')
+}
+
+setTimeout(function () {
+  rs.push(null)
+  rs.emit('close')
+}, 1000)
+
+var timeout = setTimeout(function () {
+  check()
+  throw new Error('timeout')
+}, 5000)
diff --git a/setup-maven/node_modules/pump/test-node.js b/setup-maven/node_modules/pump/test-node.js
new file mode 100644
index 0000000..561251a
--- /dev/null
+++ b/setup-maven/node_modules/pump/test-node.js
@@ -0,0 +1,53 @@
+var pump = require('./index')
+
+var rs = require('fs').createReadStream('/dev/random')
+var ws = require('fs').createWriteStream('/dev/null')
+
+var toHex = function () {
+  var reverse = new (require('stream').Transform)()
+
+  reverse._transform = function (chunk, enc, callback) {
+    reverse.push(chunk.toString('hex'))
+    callback()
+  }
+
+  return reverse
+}
+
+var wsClosed = false
+var rsClosed = false
+var callbackCalled = false
+
+var check = function () {
+  if (wsClosed && rsClosed && callbackCalled) {
+    console.log('test-node.js passes')
+    clearTimeout(timeout)
+  }
+}
+
+ws.on('close', function () {
+  wsClosed = true
+  check()
+})
+
+rs.on('close', function () {
+  rsClosed = true
+  check()
+})
+
+var res = pump(rs, toHex(), toHex(), toHex(), ws, function () {
+  callbackCalled = true
+  check()
+})
+
+if (res !== ws) {
+  throw new Error('should return last stream')
+}
+
+setTimeout(function () {
+  rs.destroy()
+}, 1000)
+
+var timeout = setTimeout(function () {
+  throw new Error('timeout')
+}, 5000)
diff --git a/setup-maven/node_modules/semver/CHANGELOG.md b/setup-maven/node_modules/semver/CHANGELOG.md
new file mode 100644
index 0000000..f567dd3
--- /dev/null
+++ b/setup-maven/node_modules/semver/CHANGELOG.md
@@ -0,0 +1,70 @@
+# changes log
+
+## 6.2.0
+
+* Coerce numbers to strings when passed to semver.coerce()
+* Add `rtl` option to coerce from right to left
+
+## 6.1.3
+
+* Handle X-ranges properly in includePrerelease mode
+
+## 6.1.2
+
+* Do not throw when testing invalid version strings
+
+## 6.1.1
+
+* Add options support for semver.coerce()
+* Handle undefined version passed to Range.test
+
+## 6.1.0
+
+* Add semver.compareBuild function
+* Support `*` in semver.intersects
+
+## 6.0
+
+* Fix `intersects` logic.
+
+    This is technically a bug fix, but since it is also a change to behavior
+    that may require users updating their code, it is marked as a major
+    version increment.
+
+## 5.7
+
+* Add `minVersion` method
+
+## 5.6
+
+* Move boolean `loose` param to an options object, with
+  backwards-compatibility protection.
+* Add ability to opt out of special prerelease version handling with
+  the `includePrerelease` option flag.
+
+## 5.5
+
+* Add version coercion capabilities
+
+## 5.4
+
+* Add intersection checking
+
+## 5.3
+
+* Add `minSatisfying` method
+
+## 5.2
+
+* Add `prerelease(v)` that returns prerelease components
+
+## 5.1
+
+* Add Backus-Naur for ranges
+* Remove excessively cute inspection methods
+
+## 5.0
+
+* Remove AMD/Browserified build artifacts
+* Fix ltr and gtr when using the `*` range
+* Fix for range `*` with a prerelease identifier
diff --git a/setup-maven/node_modules/semver/LICENSE b/setup-maven/node_modules/semver/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/setup-maven/node_modules/semver/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/semver/README.md b/setup-maven/node_modules/semver/README.md
new file mode 100644
index 0000000..2293a14
--- /dev/null
+++ b/setup-maven/node_modules/semver/README.md
@@ -0,0 +1,443 @@
+semver(1) -- The semantic versioner for npm
+===========================================
+
+## Install
+
+```bash
+npm install semver
+````
+
+## Usage
+
+As a node module:
+
+```js
+const semver = require('semver')
+
+semver.valid('1.2.3') // '1.2.3'
+semver.valid('a.b.c') // null
+semver.clean('  =v1.2.3   ') // '1.2.3'
+semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
+semver.gt('1.2.3', '9.8.7') // false
+semver.lt('1.2.3', '9.8.7') // true
+semver.minVersion('>=1.0.0') // '1.0.0'
+semver.valid(semver.coerce('v2')) // '2.0.0'
+semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
+```
+
+As a command-line utility:
+
+```
+$ semver -h
+
+A JavaScript implementation of the https://semver.org/ specification
+Copyright Isaac Z. Schlueter
+
+Usage: semver [options] <version> [<version> [...]]
+Prints valid versions sorted by SemVer precedence
+
+Options:
+-r --range <range>
+        Print versions that match the specified range.
+
+-i --increment [<level>]
+        Increment a version by the specified level.  Level can
+        be one of: major, minor, patch, premajor, preminor,
+        prepatch, or prerelease.  Default level is 'patch'.
+        Only one version may be specified.
+
+--preid <identifier>
+        Identifier to be used to prefix premajor, preminor,
+        prepatch or prerelease version increments.
+
+-l --loose
+        Interpret versions and ranges loosely
+
+-p --include-prerelease
+        Always include prerelease versions in range matching
+
+-c --coerce
+        Coerce a string into SemVer if possible
+        (does not imply --loose)
+
+--rtl
+        Coerce version strings right to left
+
+--ltr
+        Coerce version strings left to right (default)
+
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions.
+
+If no satisfying versions are found, then exits failure.
+
+Versions are printed in ascending order, so supplying
+multiple versions to the utility will just sort them.
+```
+
+## Versions
+
+A "version" is described by the `v2.0.0` specification found at
+<https://semver.org/>.
+
+A leading `"="` or `"v"` character is stripped off and ignored.
+
+## Ranges
+
+A `version range` is a set of `comparators` which specify versions
+that satisfy the range.
+
+A `comparator` is composed of an `operator` and a `version`.  The set
+of primitive `operators` is:
+
+* `<` Less than
+* `<=` Less than or equal to
+* `>` Greater than
+* `>=` Greater than or equal to
+* `=` Equal.  If no operator is specified, then equality is assumed,
+  so this operator is optional, but MAY be included.
+
+For example, the comparator `>=1.2.7` would match the versions
+`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
+or `1.1.0`.
+
+Comparators can be joined by whitespace to form a `comparator set`,
+which is satisfied by the **intersection** of all of the comparators
+it includes.
+
+A range is composed of one or more comparator sets, joined by `||`.  A
+version matches a range if and only if every comparator in at least
+one of the `||`-separated comparator sets is satisfied by the version.
+
+For example, the range `>=1.2.7 <1.3.0` would match the versions
+`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
+or `1.1.0`.
+
+The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
+`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
+
+### Prerelease Tags
+
+If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
+it will only be allowed to satisfy comparator sets if at least one
+comparator with the same `[major, minor, patch]` tuple also has a
+prerelease tag.
+
+For example, the range `>1.2.3-alpha.3` would be allowed to match the
+version `1.2.3-alpha.7`, but it would *not* be satisfied by
+`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
+than" `1.2.3-alpha.3` according to the SemVer sort rules.  The version
+range only accepts prerelease tags on the `1.2.3` version.  The
+version `3.4.5` *would* satisfy the range, because it does not have a
+prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
+
+The purpose for this behavior is twofold.  First, prerelease versions
+frequently are updated very quickly, and contain many breaking changes
+that are (by the author's design) not yet fit for public consumption.
+Therefore, by default, they are excluded from range matching
+semantics.
+
+Second, a user who has opted into using a prerelease version has
+clearly indicated the intent to use *that specific* set of
+alpha/beta/rc versions.  By including a prerelease tag in the range,
+the user is indicating that they are aware of the risk.  However, it
+is still not appropriate to assume that they have opted into taking a
+similar risk on the *next* set of prerelease versions.
+
+Note that this behavior can be suppressed (treating all prerelease
+versions as if they were normal versions, for the purpose of range
+matching) by setting the `includePrerelease` flag on the options
+object to any
+[functions](https://github.com/npm/node-semver#functions) that do
+range matching.
+
+#### Prerelease Identifiers
+
+The method `.inc` takes an additional `identifier` string argument that
+will append the value of the string as a prerelease identifier:
+
+```javascript
+semver.inc('1.2.3', 'prerelease', 'beta')
+// '1.2.4-beta.0'
+```
+
+command-line example:
+
+```bash
+$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+```
+
+Which then can be used to increment further:
+
+```bash
+$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+```
+
+### Advanced Range Syntax
+
+Advanced range syntax desugars to primitive comparators in
+deterministic ways.
+
+Advanced ranges may be combined in the same way as primitive
+comparators using white space or `||`.
+
+#### Hyphen Ranges `X.Y.Z - A.B.C`
+
+Specifies an inclusive set.
+
+* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
+
+If a partial version is provided as the first version in the inclusive
+range, then the missing pieces are replaced with zeroes.
+
+* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
+
+If a partial version is provided as the second version in the
+inclusive range, then all versions that start with the supplied parts
+of the tuple are accepted, but nothing that would be greater than the
+provided tuple parts.
+
+* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`
+* `1.2.3 - 2` := `>=1.2.3 <3.0.0`
+
+#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
+
+Any of `X`, `x`, or `*` may be used to "stand in" for one of the
+numeric values in the `[major, minor, patch]` tuple.
+
+* `*` := `>=0.0.0` (Any version satisfies)
+* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)
+* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)
+
+A partial version range is treated as an X-Range, so the special
+character is in fact optional.
+
+* `""` (empty string) := `*` := `>=0.0.0`
+* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
+* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
+
+#### Tilde Ranges `~1.2.3` `~1.2` `~1`
+
+Allows patch-level changes if a minor version is specified on the
+comparator.  Allows minor-level changes if not.
+
+* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`
+* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)
+* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)
+* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`
+* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)
+* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)
+* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in
+  the `1.2.3` version will be allowed, if they are greater than or
+  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
+  `1.2.4-beta.2` would not, because it is a prerelease of a
+  different `[major, minor, patch]` tuple.
+
+#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
+
+Allows changes that do not modify the left-most non-zero element in the
+`[major, minor, patch]` tuple.  In other words, this allows patch and
+minor updates for versions `1.0.0` and above, patch updates for
+versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
+
+Many authors treat a `0.x` version as if the `x` were the major
+"breaking-change" indicator.
+
+Caret ranges are ideal when an author may make breaking changes
+between `0.2.4` and `0.3.0` releases, which is a common practice.
+However, it presumes that there will *not* be breaking changes between
+`0.2.4` and `0.2.5`.  It allows for changes that are presumed to be
+additive (but non-breaking), according to commonly observed practices.
+
+* `^1.2.3` := `>=1.2.3 <2.0.0`
+* `^0.2.3` := `>=0.2.3 <0.3.0`
+* `^0.0.3` := `>=0.0.3 <0.0.4`
+* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in
+  the `1.2.3` version will be allowed, if they are greater than or
+  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
+  `1.2.4-beta.2` would not, because it is a prerelease of a
+  different `[major, minor, patch]` tuple.
+* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4`  Note that prereleases in the
+  `0.0.3` version *only* will be allowed, if they are greater than or
+  equal to `beta`.  So, `0.0.3-pr.2` would be allowed.
+
+When parsing caret ranges, a missing `patch` value desugars to the
+number `0`, but will allow flexibility within that value, even if the
+major and minor versions are both `0`.
+
+* `^1.2.x` := `>=1.2.0 <2.0.0`
+* `^0.0.x` := `>=0.0.0 <0.1.0`
+* `^0.0` := `>=0.0.0 <0.1.0`
+
+A missing `minor` and `patch` values will desugar to zero, but also
+allow flexibility within those values, even if the major version is
+zero.
+
+* `^1.x` := `>=1.0.0 <2.0.0`
+* `^0.x` := `>=0.0.0 <1.0.0`
+
+### Range Grammar
+
+Putting all this together, here is a Backus-Naur grammar for ranges,
+for the benefit of parser authors:
+
+```bnf
+range-set  ::= range ( logical-or range ) *
+logical-or ::= ( ' ' ) * '||' ( ' ' ) *
+range      ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen     ::= partial ' - ' partial
+simple     ::= primitive | partial | tilde | caret
+primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
+partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
+xr         ::= 'x' | 'X' | '*' | nr
+nr         ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
+tilde      ::= '~' partial
+caret      ::= '^' partial
+qualifier  ::= ( '-' pre )? ( '+' build )?
+pre        ::= parts
+build      ::= parts
+parts      ::= part ( '.' part ) *
+part       ::= nr | [-0-9A-Za-z]+
+```
+
+## Functions
+
+All methods and classes take a final `options` object argument.  All
+options in this object are `false` by default.  The options supported
+are:
+
+- `loose`  Be more forgiving about not-quite-valid semver strings.
+  (Any resulting output will always be 100% strict compliant, of
+  course.)  For backwards compatibility reasons, if the `options`
+  argument is a boolean value instead of an object, it is interpreted
+  to be the `loose` param.
+- `includePrerelease`  Set to suppress the [default
+  behavior](https://github.com/npm/node-semver#prerelease-tags) of
+  excluding prerelease tagged versions from ranges unless they are
+  explicitly opted into.
+
+Strict-mode Comparators and Ranges will be strict about the SemVer
+strings that they parse.
+
+* `valid(v)`: Return the parsed version, or null if it's not valid.
+* `inc(v, release)`: Return the version incremented by the release
+  type (`major`,   `premajor`, `minor`, `preminor`, `patch`,
+  `prepatch`, or `prerelease`), or null if it's not valid
+  * `premajor` in one call will bump the version up to the next major
+    version and down to a prerelease of that major version.
+    `preminor`, and `prepatch` work the same way.
+  * If called from a non-prerelease version, the `prerelease` will work the
+    same as `prepatch`. It increments the patch version, then makes a
+    prerelease. If the input version is already a prerelease it simply
+    increments it.
+* `prerelease(v)`: Returns an array of prerelease components, or null
+  if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
+* `major(v)`: Return the major version number.
+* `minor(v)`: Return the minor version number.
+* `patch(v)`: Return the patch version number.
+* `intersects(r1, r2, loose)`: Return true if the two supplied ranges
+  or comparators intersect.
+* `parse(v)`: Attempt to parse a string as a semantic version, returning either
+  a `SemVer` object or `null`.
+
+### Comparison
+
+* `gt(v1, v2)`: `v1 > v2`
+* `gte(v1, v2)`: `v1 >= v2`
+* `lt(v1, v2)`: `v1 < v2`
+* `lte(v1, v2)`: `v1 <= v2`
+* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
+  even if they're not the exact same string.  You already know how to
+  compare strings.
+* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
+* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
+  the corresponding function above.  `"==="` and `"!=="` do simple
+  string comparison, but are included for completeness.  Throws if an
+  invalid comparison string is provided.
+* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
+  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.
+* `rcompare(v1, v2)`: The reverse of compare.  Sorts an array of versions
+  in descending order when passed to `Array.sort()`.
+* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions
+  are equal.  Sorts in ascending order if passed to `Array.sort()`.
+  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.
+* `diff(v1, v2)`: Returns difference between two versions by the release type
+  (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
+  or null if the versions are the same.
+
+### Comparators
+
+* `intersects(comparator)`: Return true if the comparators intersect
+
+### Ranges
+
+* `validRange(range)`: Return the valid range or null if it's not valid
+* `satisfies(version, range)`: Return true if the version satisfies the
+  range.
+* `maxSatisfying(versions, range)`: Return the highest version in the list
+  that satisfies the range, or `null` if none of them do.
+* `minSatisfying(versions, range)`: Return the lowest version in the list
+  that satisfies the range, or `null` if none of them do.
+* `minVersion(range)`: Return the lowest version that can possibly match
+  the given range.
+* `gtr(version, range)`: Return `true` if version is greater than all the
+  versions possible in the range.
+* `ltr(version, range)`: Return `true` if version is less than all the
+  versions possible in the range.
+* `outside(version, range, hilo)`: Return true if the version is outside
+  the bounds of the range in either the high or low direction.  The
+  `hilo` argument must be either the string `'>'` or `'<'`.  (This is
+  the function called by `gtr` and `ltr`.)
+* `intersects(range)`: Return true if any of the ranges comparators intersect
+
+Note that, since ranges may be non-contiguous, a version might not be
+greater than a range, less than a range, *or* satisfy a range!  For
+example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
+until `2.0.0`, so the version `1.2.10` would not be greater than the
+range (because `2.0.1` satisfies, which is higher), nor less than the
+range (since `1.2.8` satisfies, which is lower), and it also does not
+satisfy the range.
+
+If you want to know if a version satisfies or does not satisfy a
+range, use the `satisfies(version, range)` function.
+
+### Coercion
+
+* `coerce(version, options)`: Coerces a string to semver if possible
+
+This aims to provide a very forgiving translation of a non-semver string to
+semver. It looks for the first digit in a string, and consumes all
+remaining characters which satisfy at least a partial semver (e.g., `1`,
+`1.2`, `1.2.3`) up to the max permitted length (256 characters).  Longer
+versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`).  All
+surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes
+`3.4.0`).  Only text which lacks digits will fail coercion (`version one`
+is not valid).  The maximum  length for any semver component considered for
+coercion is 16 characters; longer components will be ignored
+(`10000000000000000.4.7.4` becomes `4.7.4`).  The maximum value for any
+semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value
+components are invalid (`9999999999999999.4.7.4` is likely invalid).
+
+If the `options.rtl` flag is set, then `coerce` will return the right-most
+coercible tuple that does not share an ending index with a longer coercible
+tuple.  For example, `1.2.3.4` will return `2.3.4` in rtl mode, not
+`4.0.0`.  `1.2.3/4` will return `4.0.0`, because the `4` is not a part of
+any other overlapping SemVer tuple.
+
+### Clean
+
+* `clean(version)`: Clean a string to be a valid semver if possible
+
+This will return a cleaned and trimmed semver version. If the provided version is not valid a null will be returned. This does not work for ranges. 
+
+ex.
+* `s.clean(' = v 2.1.5foo')`: `null`
+* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'`
+* `s.clean(' = v 2.1.5-foo')`: `null`
+* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'`
+* `s.clean('=v2.1.5')`: `'2.1.5'`
+* `s.clean('  =v2.1.5')`: `2.1.5`
+* `s.clean('      2.1.5   ')`: `'2.1.5'`
+* `s.clean('~1.0.0')`: `null`
diff --git a/setup-maven/node_modules/semver/bin/semver.js b/setup-maven/node_modules/semver/bin/semver.js
new file mode 100755
index 0000000..666034a
--- /dev/null
+++ b/setup-maven/node_modules/semver/bin/semver.js
@@ -0,0 +1,174 @@
+#!/usr/bin/env node
+// Standalone semver comparison program.
+// Exits successfully and prints matching version(s) if
+// any supplied version is valid and passes all tests.
+
+var argv = process.argv.slice(2)
+
+var versions = []
+
+var range = []
+
+var inc = null
+
+var version = require('../package.json').version
+
+var loose = false
+
+var includePrerelease = false
+
+var coerce = false
+
+var rtl = false
+
+var identifier
+
+var semver = require('../semver')
+
+var reverse = false
+
+var options = {}
+
+main()
+
+function main () {
+  if (!argv.length) return help()
+  while (argv.length) {
+    var a = argv.shift()
+    var indexOfEqualSign = a.indexOf('=')
+    if (indexOfEqualSign !== -1) {
+      a = a.slice(0, indexOfEqualSign)
+      argv.unshift(a.slice(indexOfEqualSign + 1))
+    }
+    switch (a) {
+      case '-rv': case '-rev': case '--rev': case '--reverse':
+        reverse = true
+        break
+      case '-l': case '--loose':
+        loose = true
+        break
+      case '-p': case '--include-prerelease':
+        includePrerelease = true
+        break
+      case '-v': case '--version':
+        versions.push(argv.shift())
+        break
+      case '-i': case '--inc': case '--increment':
+        switch (argv[0]) {
+          case 'major': case 'minor': case 'patch': case 'prerelease':
+          case 'premajor': case 'preminor': case 'prepatch':
+            inc = argv.shift()
+            break
+          default:
+            inc = 'patch'
+            break
+        }
+        break
+      case '--preid':
+        identifier = argv.shift()
+        break
+      case '-r': case '--range':
+        range.push(argv.shift())
+        break
+      case '-c': case '--coerce':
+        coerce = true
+        break
+      case '--rtl':
+        rtl = true
+        break
+      case '--ltr':
+        rtl = false
+        break
+      case '-h': case '--help': case '-?':
+        return help()
+      default:
+        versions.push(a)
+        break
+    }
+  }
+
+  var options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl }
+
+  versions = versions.map(function (v) {
+    return coerce ? (semver.coerce(v, options) || { version: v }).version : v
+  }).filter(function (v) {
+    return semver.valid(v)
+  })
+  if (!versions.length) return fail()
+  if (inc && (versions.length !== 1 || range.length)) { return failInc() }
+
+  for (var i = 0, l = range.length; i < l; i++) {
+    versions = versions.filter(function (v) {
+      return semver.satisfies(v, range[i], options)
+    })
+    if (!versions.length) return fail()
+  }
+  return success(versions)
+}
+
+function failInc () {
+  console.error('--inc can only be used on a single version with no range')
+  fail()
+}
+
+function fail () { process.exit(1) }
+
+function success () {
+  var compare = reverse ? 'rcompare' : 'compare'
+  versions.sort(function (a, b) {
+    return semver[compare](a, b, options)
+  }).map(function (v) {
+    return semver.clean(v, options)
+  }).map(function (v) {
+    return inc ? semver.inc(v, inc, options, identifier) : v
+  }).forEach(function (v, i, _) { console.log(v) })
+}
+
+function help () {
+  console.log(['SemVer ' + version,
+    '',
+    'A JavaScript implementation of the https://semver.org/ specification',
+    'Copyright Isaac Z. Schlueter',
+    '',
+    'Usage: semver [options] <version> [<version> [...]]',
+    'Prints valid versions sorted by SemVer precedence',
+    '',
+    'Options:',
+    '-r --range <range>',
+    '        Print versions that match the specified range.',
+    '',
+    '-i --increment [<level>]',
+    '        Increment a version by the specified level.  Level can',
+    '        be one of: major, minor, patch, premajor, preminor,',
+    "        prepatch, or prerelease.  Default level is 'patch'.",
+    '        Only one version may be specified.',
+    '',
+    '--preid <identifier>',
+    '        Identifier to be used to prefix premajor, preminor,',
+    '        prepatch or prerelease version increments.',
+    '',
+    '-l --loose',
+    '        Interpret versions and ranges loosely',
+    '',
+    '-p --include-prerelease',
+    '        Always include prerelease versions in range matching',
+    '',
+    '-c --coerce',
+    '        Coerce a string into SemVer if possible',
+    '        (does not imply --loose)',
+    '',
+    '--rtl',
+    '        Coerce version strings right to left',
+    '',
+    '--ltr',
+    '        Coerce version strings left to right (default)',
+    '',
+    'Program exits successfully if any valid version satisfies',
+    'all supplied ranges, and prints all satisfying versions.',
+    '',
+    'If no satisfying versions are found, then exits failure.',
+    '',
+    'Versions are printed in ascending order, so supplying',
+    'multiple versions to the utility will just sort them.'
+  ].join('\n'))
+}
diff --git a/setup-maven/node_modules/semver/package.json b/setup-maven/node_modules/semver/package.json
new file mode 100644
index 0000000..a7fda0a
--- /dev/null
+++ b/setup-maven/node_modules/semver/package.json
@@ -0,0 +1,61 @@
+{
+  "_from": "semver@^6.1.1",
+  "_id": "semver@6.3.0",
+  "_inBundle": false,
+  "_integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+  "_location": "/semver",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "semver@^6.1.1",
+    "name": "semver",
+    "escapedName": "semver",
+    "rawSpec": "^6.1.1",
+    "saveSpec": null,
+    "fetchSpec": "^6.1.1"
+  },
+  "_requiredBy": [
+    "/",
+    "/@actions/tool-cache"
+  ],
+  "_resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+  "_shasum": "ee0a64c8af5e8ceea67687b133761e1becbd1d3d",
+  "_spec": "semver@^6.1.1",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven",
+  "bin": {
+    "semver": "./bin/semver.js"
+  },
+  "bugs": {
+    "url": "https://github.com/npm/node-semver/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "The semantic version parser used by npm.",
+  "devDependencies": {
+    "tap": "^14.3.1"
+  },
+  "files": [
+    "bin",
+    "range.bnf",
+    "semver.js"
+  ],
+  "homepage": "https://github.com/npm/node-semver#readme",
+  "license": "ISC",
+  "main": "semver.js",
+  "name": "semver",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/npm/node-semver.git"
+  },
+  "scripts": {
+    "postpublish": "git push origin --follow-tags",
+    "postversion": "npm publish",
+    "preversion": "npm test",
+    "test": "tap"
+  },
+  "tap": {
+    "check-coverage": true
+  },
+  "version": "6.3.0"
+}
diff --git a/setup-maven/node_modules/semver/range.bnf b/setup-maven/node_modules/semver/range.bnf
new file mode 100644
index 0000000..d4c6ae0
--- /dev/null
+++ b/setup-maven/node_modules/semver/range.bnf
@@ -0,0 +1,16 @@
+range-set  ::= range ( logical-or range ) *
+logical-or ::= ( ' ' ) * '||' ( ' ' ) *
+range      ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen     ::= partial ' - ' partial
+simple     ::= primitive | partial | tilde | caret
+primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
+partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
+xr         ::= 'x' | 'X' | '*' | nr
+nr         ::= '0' | [1-9] ( [0-9] ) *
+tilde      ::= '~' partial
+caret      ::= '^' partial
+qualifier  ::= ( '-' pre )? ( '+' build )?
+pre        ::= parts
+build      ::= parts
+parts      ::= part ( '.' part ) *
+part       ::= nr | [-0-9A-Za-z]+
diff --git a/setup-maven/node_modules/semver/semver.js b/setup-maven/node_modules/semver/semver.js
new file mode 100644
index 0000000..636fa43
--- /dev/null
+++ b/setup-maven/node_modules/semver/semver.js
@@ -0,0 +1,1596 @@
+exports = module.exports = SemVer
+
+var debug
+/* istanbul ignore next */
+if (typeof process === 'object' &&
+    process.env &&
+    process.env.NODE_DEBUG &&
+    /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
+  debug = function () {
+    var args = Array.prototype.slice.call(arguments, 0)
+    args.unshift('SEMVER')
+    console.log.apply(console, args)
+  }
+} else {
+  debug = function () {}
+}
+
+// Note: this is the semver.org version of the spec that it implements
+// Not necessarily the package version of this code.
+exports.SEMVER_SPEC_VERSION = '2.0.0'
+
+var MAX_LENGTH = 256
+var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
+  /* istanbul ignore next */ 9007199254740991
+
+// Max safe segment length for coercion.
+var MAX_SAFE_COMPONENT_LENGTH = 16
+
+// The actual regexps go on exports.re
+var re = exports.re = []
+var src = exports.src = []
+var t = exports.tokens = {}
+var R = 0
+
+function tok (n) {
+  t[n] = R++
+}
+
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
+
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
+
+tok('NUMERICIDENTIFIER')
+src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*'
+tok('NUMERICIDENTIFIERLOOSE')
+src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'
+
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
+
+tok('NONNUMERICIDENTIFIER')
+src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
+
+// ## Main Version
+// Three dot-separated numeric identifiers.
+
+tok('MAINVERSION')
+src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
+                   '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
+                   '(' + src[t.NUMERICIDENTIFIER] + ')'
+
+tok('MAINVERSIONLOOSE')
+src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
+                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
+                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'
+
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
+
+tok('PRERELEASEIDENTIFIER')
+src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +
+                            '|' + src[t.NONNUMERICIDENTIFIER] + ')'
+
+tok('PRERELEASEIDENTIFIERLOOSE')
+src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +
+                                 '|' + src[t.NONNUMERICIDENTIFIER] + ')'
+
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
+
+tok('PRERELEASE')
+src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +
+                  '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'
+
+tok('PRERELEASELOOSE')
+src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +
+                       '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'
+
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
+
+tok('BUILDIDENTIFIER')
+src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
+
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
+
+tok('BUILD')
+src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
+             '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))'
+
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
+
+// Note that the only major, minor, patch, and pre-release sections of
+// the version string are capturing groups.  The build metadata is not a
+// capturing group, because it should not ever be used in version
+// comparison.
+
+tok('FULL')
+tok('FULLPLAIN')
+src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +
+                  src[t.PRERELEASE] + '?' +
+                  src[t.BUILD] + '?'
+
+src[t.FULL] = '^' + src[t.FULLPLAIN] + '$'
+
+// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
+// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
+// common in the npm registry.
+tok('LOOSEPLAIN')
+src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] +
+                  src[t.PRERELEASELOOSE] + '?' +
+                  src[t.BUILD] + '?'
+
+tok('LOOSE')
+src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'
+
+tok('GTLT')
+src[t.GTLT] = '((?:<|>)?=?)'
+
+// Something like "2.*" or "1.2.x".
+// Note that "x.x" is a valid xRange identifer, meaning "any version"
+// Only the first item is strictly required.
+tok('XRANGEIDENTIFIERLOOSE')
+src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
+tok('XRANGEIDENTIFIER')
+src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*'
+
+tok('XRANGEPLAIN')
+src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +
+                   '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
+                   '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
+                   '(?:' + src[t.PRERELEASE] + ')?' +
+                   src[t.BUILD] + '?' +
+                   ')?)?'
+
+tok('XRANGEPLAINLOOSE')
+src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
+                        '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
+                        '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
+                        '(?:' + src[t.PRERELEASELOOSE] + ')?' +
+                        src[t.BUILD] + '?' +
+                        ')?)?'
+
+tok('XRANGE')
+src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$'
+tok('XRANGELOOSE')
+src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$'
+
+// Coercion.
+// Extract anything that could conceivably be a part of a valid semver
+tok('COERCE')
+src[t.COERCE] = '(^|[^\\d])' +
+              '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
+              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+              '(?:$|[^\\d])'
+tok('COERCERTL')
+re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
+
+// Tilde ranges.
+// Meaning is "reasonably at or greater than"
+tok('LONETILDE')
+src[t.LONETILDE] = '(?:~>?)'
+
+tok('TILDETRIM')
+src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+'
+re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')
+var tildeTrimReplace = '$1~'
+
+tok('TILDE')
+src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'
+tok('TILDELOOSE')
+src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'
+
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+tok('LONECARET')
+src[t.LONECARET] = '(?:\\^)'
+
+tok('CARETTRIM')
+src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+'
+re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')
+var caretTrimReplace = '$1^'
+
+tok('CARET')
+src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'
+tok('CARETLOOSE')
+src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'
+
+// A simple gt/lt/eq thing, or just "" to indicate "any version"
+tok('COMPARATORLOOSE')
+src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'
+tok('COMPARATOR')
+src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$'
+
+// An expression to strip any whitespace between the gtlt and the thing
+// it modifies, so that `> 1.2.3` ==> `>1.2.3`
+tok('COMPARATORTRIM')
+src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] +
+                      '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'
+
+// this one has to use the /g flag
+re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')
+var comparatorTrimReplace = '$1$2$3'
+
+// Something like `1.2.3 - 1.2.4`
+// Note that these all use the loose form, because they'll be
+// checked against either the strict or loose comparator form
+// later.
+tok('HYPHENRANGE')
+src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' +
+                   '\\s+-\\s+' +
+                   '(' + src[t.XRANGEPLAIN] + ')' +
+                   '\\s*$'
+
+tok('HYPHENRANGELOOSE')
+src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +
+                        '\\s+-\\s+' +
+                        '(' + src[t.XRANGEPLAINLOOSE] + ')' +
+                        '\\s*$'
+
+// Star ranges basically just allow anything at all.
+tok('STAR')
+src[t.STAR] = '(<|>)?=?\\s*\\*'
+
+// Compile to actual regexp objects.
+// All are flag-free, unless they were created above with a flag.
+for (var i = 0; i < R; i++) {
+  debug(i, src[i])
+  if (!re[i]) {
+    re[i] = new RegExp(src[i])
+  }
+}
+
+exports.parse = parse
+function parse (version, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  if (version instanceof SemVer) {
+    return version
+  }
+
+  if (typeof version !== 'string') {
+    return null
+  }
+
+  if (version.length > MAX_LENGTH) {
+    return null
+  }
+
+  var r = options.loose ? re[t.LOOSE] : re[t.FULL]
+  if (!r.test(version)) {
+    return null
+  }
+
+  try {
+    return new SemVer(version, options)
+  } catch (er) {
+    return null
+  }
+}
+
+exports.valid = valid
+function valid (version, options) {
+  var v = parse(version, options)
+  return v ? v.version : null
+}
+
+exports.clean = clean
+function clean (version, options) {
+  var s = parse(version.trim().replace(/^[=v]+/, ''), options)
+  return s ? s.version : null
+}
+
+exports.SemVer = SemVer
+
+function SemVer (version, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+  if (version instanceof SemVer) {
+    if (version.loose === options.loose) {
+      return version
+    } else {
+      version = version.version
+    }
+  } else if (typeof version !== 'string') {
+    throw new TypeError('Invalid Version: ' + version)
+  }
+
+  if (version.length > MAX_LENGTH) {
+    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
+  }
+
+  if (!(this instanceof SemVer)) {
+    return new SemVer(version, options)
+  }
+
+  debug('SemVer', version, options)
+  this.options = options
+  this.loose = !!options.loose
+
+  var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
+
+  if (!m) {
+    throw new TypeError('Invalid Version: ' + version)
+  }
+
+  this.raw = version
+
+  // these are actually numbers
+  this.major = +m[1]
+  this.minor = +m[2]
+  this.patch = +m[3]
+
+  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+    throw new TypeError('Invalid major version')
+  }
+
+  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+    throw new TypeError('Invalid minor version')
+  }
+
+  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+    throw new TypeError('Invalid patch version')
+  }
+
+  // numberify any prerelease numeric ids
+  if (!m[4]) {
+    this.prerelease = []
+  } else {
+    this.prerelease = m[4].split('.').map(function (id) {
+      if (/^[0-9]+$/.test(id)) {
+        var num = +id
+        if (num >= 0 && num < MAX_SAFE_INTEGER) {
+          return num
+        }
+      }
+      return id
+    })
+  }
+
+  this.build = m[5] ? m[5].split('.') : []
+  this.format()
+}
+
+SemVer.prototype.format = function () {
+  this.version = this.major + '.' + this.minor + '.' + this.patch
+  if (this.prerelease.length) {
+    this.version += '-' + this.prerelease.join('.')
+  }
+  return this.version
+}
+
+SemVer.prototype.toString = function () {
+  return this.version
+}
+
+SemVer.prototype.compare = function (other) {
+  debug('SemVer.compare', this.version, this.options, other)
+  if (!(other instanceof SemVer)) {
+    other = new SemVer(other, this.options)
+  }
+
+  return this.compareMain(other) || this.comparePre(other)
+}
+
+SemVer.prototype.compareMain = function (other) {
+  if (!(other instanceof SemVer)) {
+    other = new SemVer(other, this.options)
+  }
+
+  return compareIdentifiers(this.major, other.major) ||
+         compareIdentifiers(this.minor, other.minor) ||
+         compareIdentifiers(this.patch, other.patch)
+}
+
+SemVer.prototype.comparePre = function (other) {
+  if (!(other instanceof SemVer)) {
+    other = new SemVer(other, this.options)
+  }
+
+  // NOT having a prerelease is > having one
+  if (this.prerelease.length && !other.prerelease.length) {
+    return -1
+  } else if (!this.prerelease.length && other.prerelease.length) {
+    return 1
+  } else if (!this.prerelease.length && !other.prerelease.length) {
+    return 0
+  }
+
+  var i = 0
+  do {
+    var a = this.prerelease[i]
+    var b = other.prerelease[i]
+    debug('prerelease compare', i, a, b)
+    if (a === undefined && b === undefined) {
+      return 0
+    } else if (b === undefined) {
+      return 1
+    } else if (a === undefined) {
+      return -1
+    } else if (a === b) {
+      continue
+    } else {
+      return compareIdentifiers(a, b)
+    }
+  } while (++i)
+}
+
+SemVer.prototype.compareBuild = function (other) {
+  if (!(other instanceof SemVer)) {
+    other = new SemVer(other, this.options)
+  }
+
+  var i = 0
+  do {
+    var a = this.build[i]
+    var b = other.build[i]
+    debug('prerelease compare', i, a, b)
+    if (a === undefined && b === undefined) {
+      return 0
+    } else if (b === undefined) {
+      return 1
+    } else if (a === undefined) {
+      return -1
+    } else if (a === b) {
+      continue
+    } else {
+      return compareIdentifiers(a, b)
+    }
+  } while (++i)
+}
+
+// preminor will bump the version up to the next minor release, and immediately
+// down to pre-release. premajor and prepatch work the same way.
+SemVer.prototype.inc = function (release, identifier) {
+  switch (release) {
+    case 'premajor':
+      this.prerelease.length = 0
+      this.patch = 0
+      this.minor = 0
+      this.major++
+      this.inc('pre', identifier)
+      break
+    case 'preminor':
+      this.prerelease.length = 0
+      this.patch = 0
+      this.minor++
+      this.inc('pre', identifier)
+      break
+    case 'prepatch':
+      // If this is already a prerelease, it will bump to the next version
+      // drop any prereleases that might already exist, since they are not
+      // relevant at this point.
+      this.prerelease.length = 0
+      this.inc('patch', identifier)
+      this.inc('pre', identifier)
+      break
+    // If the input is a non-prerelease version, this acts the same as
+    // prepatch.
+    case 'prerelease':
+      if (this.prerelease.length === 0) {
+        this.inc('patch', identifier)
+      }
+      this.inc('pre', identifier)
+      break
+
+    case 'major':
+      // If this is a pre-major version, bump up to the same major version.
+      // Otherwise increment major.
+      // 1.0.0-5 bumps to 1.0.0
+      // 1.1.0 bumps to 2.0.0
+      if (this.minor !== 0 ||
+          this.patch !== 0 ||
+          this.prerelease.length === 0) {
+        this.major++
+      }
+      this.minor = 0
+      this.patch = 0
+      this.prerelease = []
+      break
+    case 'minor':
+      // If this is a pre-minor version, bump up to the same minor version.
+      // Otherwise increment minor.
+      // 1.2.0-5 bumps to 1.2.0
+      // 1.2.1 bumps to 1.3.0
+      if (this.patch !== 0 || this.prerelease.length === 0) {
+        this.minor++
+      }
+      this.patch = 0
+      this.prerelease = []
+      break
+    case 'patch':
+      // If this is not a pre-release version, it will increment the patch.
+      // If it is a pre-release it will bump up to the same patch version.
+      // 1.2.0-5 patches to 1.2.0
+      // 1.2.0 patches to 1.2.1
+      if (this.prerelease.length === 0) {
+        this.patch++
+      }
+      this.prerelease = []
+      break
+    // This probably shouldn't be used publicly.
+    // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
+    case 'pre':
+      if (this.prerelease.length === 0) {
+        this.prerelease = [0]
+      } else {
+        var i = this.prerelease.length
+        while (--i >= 0) {
+          if (typeof this.prerelease[i] === 'number') {
+            this.prerelease[i]++
+            i = -2
+          }
+        }
+        if (i === -1) {
+          // didn't increment anything
+          this.prerelease.push(0)
+        }
+      }
+      if (identifier) {
+        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+        if (this.prerelease[0] === identifier) {
+          if (isNaN(this.prerelease[1])) {
+            this.prerelease = [identifier, 0]
+          }
+        } else {
+          this.prerelease = [identifier, 0]
+        }
+      }
+      break
+
+    default:
+      throw new Error('invalid increment argument: ' + release)
+  }
+  this.format()
+  this.raw = this.version
+  return this
+}
+
+exports.inc = inc
+function inc (version, release, loose, identifier) {
+  if (typeof (loose) === 'string') {
+    identifier = loose
+    loose = undefined
+  }
+
+  try {
+    return new SemVer(version, loose).inc(release, identifier).version
+  } catch (er) {
+    return null
+  }
+}
+
+exports.diff = diff
+function diff (version1, version2) {
+  if (eq(version1, version2)) {
+    return null
+  } else {
+    var v1 = parse(version1)
+    var v2 = parse(version2)
+    var prefix = ''
+    if (v1.prerelease.length || v2.prerelease.length) {
+      prefix = 'pre'
+      var defaultResult = 'prerelease'
+    }
+    for (var key in v1) {
+      if (key === 'major' || key === 'minor' || key === 'patch') {
+        if (v1[key] !== v2[key]) {
+          return prefix + key
+        }
+      }
+    }
+    return defaultResult // may be undefined
+  }
+}
+
+exports.compareIdentifiers = compareIdentifiers
+
+var numeric = /^[0-9]+$/
+function compareIdentifiers (a, b) {
+  var anum = numeric.test(a)
+  var bnum = numeric.test(b)
+
+  if (anum && bnum) {
+    a = +a
+    b = +b
+  }
+
+  return a === b ? 0
+    : (anum && !bnum) ? -1
+    : (bnum && !anum) ? 1
+    : a < b ? -1
+    : 1
+}
+
+exports.rcompareIdentifiers = rcompareIdentifiers
+function rcompareIdentifiers (a, b) {
+  return compareIdentifiers(b, a)
+}
+
+exports.major = major
+function major (a, loose) {
+  return new SemVer(a, loose).major
+}
+
+exports.minor = minor
+function minor (a, loose) {
+  return new SemVer(a, loose).minor
+}
+
+exports.patch = patch
+function patch (a, loose) {
+  return new SemVer(a, loose).patch
+}
+
+exports.compare = compare
+function compare (a, b, loose) {
+  return new SemVer(a, loose).compare(new SemVer(b, loose))
+}
+
+exports.compareLoose = compareLoose
+function compareLoose (a, b) {
+  return compare(a, b, true)
+}
+
+exports.compareBuild = compareBuild
+function compareBuild (a, b, loose) {
+  var versionA = new SemVer(a, loose)
+  var versionB = new SemVer(b, loose)
+  return versionA.compare(versionB) || versionA.compareBuild(versionB)
+}
+
+exports.rcompare = rcompare
+function rcompare (a, b, loose) {
+  return compare(b, a, loose)
+}
+
+exports.sort = sort
+function sort (list, loose) {
+  return list.sort(function (a, b) {
+    return exports.compareBuild(a, b, loose)
+  })
+}
+
+exports.rsort = rsort
+function rsort (list, loose) {
+  return list.sort(function (a, b) {
+    return exports.compareBuild(b, a, loose)
+  })
+}
+
+exports.gt = gt
+function gt (a, b, loose) {
+  return compare(a, b, loose) > 0
+}
+
+exports.lt = lt
+function lt (a, b, loose) {
+  return compare(a, b, loose) < 0
+}
+
+exports.eq = eq
+function eq (a, b, loose) {
+  return compare(a, b, loose) === 0
+}
+
+exports.neq = neq
+function neq (a, b, loose) {
+  return compare(a, b, loose) !== 0
+}
+
+exports.gte = gte
+function gte (a, b, loose) {
+  return compare(a, b, loose) >= 0
+}
+
+exports.lte = lte
+function lte (a, b, loose) {
+  return compare(a, b, loose) <= 0
+}
+
+exports.cmp = cmp
+function cmp (a, op, b, loose) {
+  switch (op) {
+    case '===':
+      if (typeof a === 'object')
+        a = a.version
+      if (typeof b === 'object')
+        b = b.version
+      return a === b
+
+    case '!==':
+      if (typeof a === 'object')
+        a = a.version
+      if (typeof b === 'object')
+        b = b.version
+      return a !== b
+
+    case '':
+    case '=':
+    case '==':
+      return eq(a, b, loose)
+
+    case '!=':
+      return neq(a, b, loose)
+
+    case '>':
+      return gt(a, b, loose)
+
+    case '>=':
+      return gte(a, b, loose)
+
+    case '<':
+      return lt(a, b, loose)
+
+    case '<=':
+      return lte(a, b, loose)
+
+    default:
+      throw new TypeError('Invalid operator: ' + op)
+  }
+}
+
+exports.Comparator = Comparator
+function Comparator (comp, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  if (comp instanceof Comparator) {
+    if (comp.loose === !!options.loose) {
+      return comp
+    } else {
+      comp = comp.value
+    }
+  }
+
+  if (!(this instanceof Comparator)) {
+    return new Comparator(comp, options)
+  }
+
+  debug('comparator', comp, options)
+  this.options = options
+  this.loose = !!options.loose
+  this.parse(comp)
+
+  if (this.semver === ANY) {
+    this.value = ''
+  } else {
+    this.value = this.operator + this.semver.version
+  }
+
+  debug('comp', this)
+}
+
+var ANY = {}
+Comparator.prototype.parse = function (comp) {
+  var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
+  var m = comp.match(r)
+
+  if (!m) {
+    throw new TypeError('Invalid comparator: ' + comp)
+  }
+
+  this.operator = m[1] !== undefined ? m[1] : ''
+  if (this.operator === '=') {
+    this.operator = ''
+  }
+
+  // if it literally is just '>' or '' then allow anything.
+  if (!m[2]) {
+    this.semver = ANY
+  } else {
+    this.semver = new SemVer(m[2], this.options.loose)
+  }
+}
+
+Comparator.prototype.toString = function () {
+  return this.value
+}
+
+Comparator.prototype.test = function (version) {
+  debug('Comparator.test', version, this.options.loose)
+
+  if (this.semver === ANY || version === ANY) {
+    return true
+  }
+
+  if (typeof version === 'string') {
+    try {
+      version = new SemVer(version, this.options)
+    } catch (er) {
+      return false
+    }
+  }
+
+  return cmp(version, this.operator, this.semver, this.options)
+}
+
+Comparator.prototype.intersects = function (comp, options) {
+  if (!(comp instanceof Comparator)) {
+    throw new TypeError('a Comparator is required')
+  }
+
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  var rangeTmp
+
+  if (this.operator === '') {
+    if (this.value === '') {
+      return true
+    }
+    rangeTmp = new Range(comp.value, options)
+    return satisfies(this.value, rangeTmp, options)
+  } else if (comp.operator === '') {
+    if (comp.value === '') {
+      return true
+    }
+    rangeTmp = new Range(this.value, options)
+    return satisfies(comp.semver, rangeTmp, options)
+  }
+
+  var sameDirectionIncreasing =
+    (this.operator === '>=' || this.operator === '>') &&
+    (comp.operator === '>=' || comp.operator === '>')
+  var sameDirectionDecreasing =
+    (this.operator === '<=' || this.operator === '<') &&
+    (comp.operator === '<=' || comp.operator === '<')
+  var sameSemVer = this.semver.version === comp.semver.version
+  var differentDirectionsInclusive =
+    (this.operator === '>=' || this.operator === '<=') &&
+    (comp.operator === '>=' || comp.operator === '<=')
+  var oppositeDirectionsLessThan =
+    cmp(this.semver, '<', comp.semver, options) &&
+    ((this.operator === '>=' || this.operator === '>') &&
+    (comp.operator === '<=' || comp.operator === '<'))
+  var oppositeDirectionsGreaterThan =
+    cmp(this.semver, '>', comp.semver, options) &&
+    ((this.operator === '<=' || this.operator === '<') &&
+    (comp.operator === '>=' || comp.operator === '>'))
+
+  return sameDirectionIncreasing || sameDirectionDecreasing ||
+    (sameSemVer && differentDirectionsInclusive) ||
+    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
+}
+
+exports.Range = Range
+function Range (range, options) {
+  if (!options || typeof options !== 'object') {
+    options = {
+      loose: !!options,
+      includePrerelease: false
+    }
+  }
+
+  if (range instanceof Range) {
+    if (range.loose === !!options.loose &&
+        range.includePrerelease === !!options.includePrerelease) {
+      return range
+    } else {
+      return new Range(range.raw, options)
+    }
+  }
+
+  if (range instanceof Comparator) {
+    return new Range(range.value, options)
+  }
+
+  if (!(this instanceof Range)) {
+    return new Range(range, options)
+  }
+
+  this.options = options
+  this.loose = !!options.loose
+  this.includePrerelease = !!options.includePrerelease
+
+  // First, split based on boolean or ||
+  this.raw = range
+  this.set = range.split(/\s*\|\|\s*/).map(function (range) {
+    return this.parseRange(range.trim())
+  }, this).filter(function (c) {
+    // throw out any that are not relevant for whatever reason
+    return c.length
+  })
+
+  if (!this.set.length) {
+    throw new TypeError('Invalid SemVer Range: ' + range)
+  }
+
+  this.format()
+}
+
+Range.prototype.format = function () {
+  this.range = this.set.map(function (comps) {
+    return comps.join(' ').trim()
+  }).join('||').trim()
+  return this.range
+}
+
+Range.prototype.toString = function () {
+  return this.range
+}
+
+Range.prototype.parseRange = function (range) {
+  var loose = this.options.loose
+  range = range.trim()
+  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
+  var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
+  range = range.replace(hr, hyphenReplace)
+  debug('hyphen replace', range)
+  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
+  range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
+  debug('comparator trim', range, re[t.COMPARATORTRIM])
+
+  // `~ 1.2.3` => `~1.2.3`
+  range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
+
+  // `^ 1.2.3` => `^1.2.3`
+  range = range.replace(re[t.CARETTRIM], caretTrimReplace)
+
+  // normalize spaces
+  range = range.split(/\s+/).join(' ')
+
+  // At this point, the range is completely trimmed and
+  // ready to be split into comparators.
+
+  var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
+  var set = range.split(' ').map(function (comp) {
+    return parseComparator(comp, this.options)
+  }, this).join(' ').split(/\s+/)
+  if (this.options.loose) {
+    // in loose mode, throw out any that are not valid comparators
+    set = set.filter(function (comp) {
+      return !!comp.match(compRe)
+    })
+  }
+  set = set.map(function (comp) {
+    return new Comparator(comp, this.options)
+  }, this)
+
+  return set
+}
+
+Range.prototype.intersects = function (range, options) {
+  if (!(range instanceof Range)) {
+    throw new TypeError('a Range is required')
+  }
+
+  return this.set.some(function (thisComparators) {
+    return (
+      isSatisfiable(thisComparators, options) &&
+      range.set.some(function (rangeComparators) {
+        return (
+          isSatisfiable(rangeComparators, options) &&
+          thisComparators.every(function (thisComparator) {
+            return rangeComparators.every(function (rangeComparator) {
+              return thisComparator.intersects(rangeComparator, options)
+            })
+          })
+        )
+      })
+    )
+  })
+}
+
+// take a set of comparators and determine whether there
+// exists a version which can satisfy it
+function isSatisfiable (comparators, options) {
+  var result = true
+  var remainingComparators = comparators.slice()
+  var testComparator = remainingComparators.pop()
+
+  while (result && remainingComparators.length) {
+    result = remainingComparators.every(function (otherComparator) {
+      return testComparator.intersects(otherComparator, options)
+    })
+
+    testComparator = remainingComparators.pop()
+  }
+
+  return result
+}
+
+// Mostly just for testing and legacy API reasons
+exports.toComparators = toComparators
+function toComparators (range, options) {
+  return new Range(range, options).set.map(function (comp) {
+    return comp.map(function (c) {
+      return c.value
+    }).join(' ').trim().split(' ')
+  })
+}
+
+// comprised of xranges, tildes, stars, and gtlt's at this point.
+// already replaced the hyphen ranges
+// turn into a set of JUST comparators.
+function parseComparator (comp, options) {
+  debug('comp', comp, options)
+  comp = replaceCarets(comp, options)
+  debug('caret', comp)
+  comp = replaceTildes(comp, options)
+  debug('tildes', comp)
+  comp = replaceXRanges(comp, options)
+  debug('xrange', comp)
+  comp = replaceStars(comp, options)
+  debug('stars', comp)
+  return comp
+}
+
+function isX (id) {
+  return !id || id.toLowerCase() === 'x' || id === '*'
+}
+
+// ~, ~> --> * (any, kinda silly)
+// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
+// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
+// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
+// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
+// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
+function replaceTildes (comp, options) {
+  return comp.trim().split(/\s+/).map(function (comp) {
+    return replaceTilde(comp, options)
+  }).join(' ')
+}
+
+function replaceTilde (comp, options) {
+  var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
+  return comp.replace(r, function (_, M, m, p, pr) {
+    debug('tilde', comp, _, M, m, p, pr)
+    var ret
+
+    if (isX(M)) {
+      ret = ''
+    } else if (isX(m)) {
+      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
+    } else if (isX(p)) {
+      // ~1.2 == >=1.2.0 <1.3.0
+      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+    } else if (pr) {
+      debug('replaceTilde pr', pr)
+      ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+            ' <' + M + '.' + (+m + 1) + '.0'
+    } else {
+      // ~1.2.3 == >=1.2.3 <1.3.0
+      ret = '>=' + M + '.' + m + '.' + p +
+            ' <' + M + '.' + (+m + 1) + '.0'
+    }
+
+    debug('tilde return', ret)
+    return ret
+  })
+}
+
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
+// ^1.2.3 --> >=1.2.3 <2.0.0
+// ^1.2.0 --> >=1.2.0 <2.0.0
+function replaceCarets (comp, options) {
+  return comp.trim().split(/\s+/).map(function (comp) {
+    return replaceCaret(comp, options)
+  }).join(' ')
+}
+
+function replaceCaret (comp, options) {
+  debug('caret', comp, options)
+  var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
+  return comp.replace(r, function (_, M, m, p, pr) {
+    debug('caret', comp, _, M, m, p, pr)
+    var ret
+
+    if (isX(M)) {
+      ret = ''
+    } else if (isX(m)) {
+      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
+    } else if (isX(p)) {
+      if (M === '0') {
+        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+      } else {
+        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
+      }
+    } else if (pr) {
+      debug('replaceCaret pr', pr)
+      if (M === '0') {
+        if (m === '0') {
+          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+                ' <' + M + '.' + m + '.' + (+p + 1)
+        } else {
+          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+                ' <' + M + '.' + (+m + 1) + '.0'
+        }
+      } else {
+        ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+              ' <' + (+M + 1) + '.0.0'
+      }
+    } else {
+      debug('no pr')
+      if (M === '0') {
+        if (m === '0') {
+          ret = '>=' + M + '.' + m + '.' + p +
+                ' <' + M + '.' + m + '.' + (+p + 1)
+        } else {
+          ret = '>=' + M + '.' + m + '.' + p +
+                ' <' + M + '.' + (+m + 1) + '.0'
+        }
+      } else {
+        ret = '>=' + M + '.' + m + '.' + p +
+              ' <' + (+M + 1) + '.0.0'
+      }
+    }
+
+    debug('caret return', ret)
+    return ret
+  })
+}
+
+function replaceXRanges (comp, options) {
+  debug('replaceXRanges', comp, options)
+  return comp.split(/\s+/).map(function (comp) {
+    return replaceXRange(comp, options)
+  }).join(' ')
+}
+
+function replaceXRange (comp, options) {
+  comp = comp.trim()
+  var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
+  return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
+    debug('xRange', comp, ret, gtlt, M, m, p, pr)
+    var xM = isX(M)
+    var xm = xM || isX(m)
+    var xp = xm || isX(p)
+    var anyX = xp
+
+    if (gtlt === '=' && anyX) {
+      gtlt = ''
+    }
+
+    // if we're including prereleases in the match, then we need
+    // to fix this to -0, the lowest possible prerelease value
+    pr = options.includePrerelease ? '-0' : ''
+
+    if (xM) {
+      if (gtlt === '>' || gtlt === '<') {
+        // nothing is allowed
+        ret = '<0.0.0-0'
+      } else {
+        // nothing is forbidden
+        ret = '*'
+      }
+    } else if (gtlt && anyX) {
+      // we know patch is an x, because we have any x at all.
+      // replace X with 0
+      if (xm) {
+        m = 0
+      }
+      p = 0
+
+      if (gtlt === '>') {
+        // >1 => >=2.0.0
+        // >1.2 => >=1.3.0
+        // >1.2.3 => >= 1.2.4
+        gtlt = '>='
+        if (xm) {
+          M = +M + 1
+          m = 0
+          p = 0
+        } else {
+          m = +m + 1
+          p = 0
+        }
+      } else if (gtlt === '<=') {
+        // <=0.7.x is actually <0.8.0, since any 0.7.x should
+        // pass.  Similarly, <=7.x is actually <8.0.0, etc.
+        gtlt = '<'
+        if (xm) {
+          M = +M + 1
+        } else {
+          m = +m + 1
+        }
+      }
+
+      ret = gtlt + M + '.' + m + '.' + p + pr
+    } else if (xm) {
+      ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr
+    } else if (xp) {
+      ret = '>=' + M + '.' + m + '.0' + pr +
+        ' <' + M + '.' + (+m + 1) + '.0' + pr
+    }
+
+    debug('xRange return', ret)
+
+    return ret
+  })
+}
+
+// Because * is AND-ed with everything else in the comparator,
+// and '' means "any version", just remove the *s entirely.
+function replaceStars (comp, options) {
+  debug('replaceStars', comp, options)
+  // Looseness is ignored here.  star is always as loose as it gets!
+  return comp.trim().replace(re[t.STAR], '')
+}
+
+// This function is passed to string.replace(re[t.HYPHENRANGE])
+// M, m, patch, prerelease, build
+// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0 <3.5.0
+function hyphenReplace ($0,
+  from, fM, fm, fp, fpr, fb,
+  to, tM, tm, tp, tpr, tb) {
+  if (isX(fM)) {
+    from = ''
+  } else if (isX(fm)) {
+    from = '>=' + fM + '.0.0'
+  } else if (isX(fp)) {
+    from = '>=' + fM + '.' + fm + '.0'
+  } else {
+    from = '>=' + from
+  }
+
+  if (isX(tM)) {
+    to = ''
+  } else if (isX(tm)) {
+    to = '<' + (+tM + 1) + '.0.0'
+  } else if (isX(tp)) {
+    to = '<' + tM + '.' + (+tm + 1) + '.0'
+  } else if (tpr) {
+    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
+  } else {
+    to = '<=' + to
+  }
+
+  return (from + ' ' + to).trim()
+}
+
+// if ANY of the sets match ALL of its comparators, then pass
+Range.prototype.test = function (version) {
+  if (!version) {
+    return false
+  }
+
+  if (typeof version === 'string') {
+    try {
+      version = new SemVer(version, this.options)
+    } catch (er) {
+      return false
+    }
+  }
+
+  for (var i = 0; i < this.set.length; i++) {
+    if (testSet(this.set[i], version, this.options)) {
+      return true
+    }
+  }
+  return false
+}
+
+function testSet (set, version, options) {
+  for (var i = 0; i < set.length; i++) {
+    if (!set[i].test(version)) {
+      return false
+    }
+  }
+
+  if (version.prerelease.length && !options.includePrerelease) {
+    // Find the set of versions that are allowed to have prereleases
+    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
+    // That should allow `1.2.3-pr.2` to pass.
+    // However, `1.2.4-alpha.notready` should NOT be allowed,
+    // even though it's within the range set by the comparators.
+    for (i = 0; i < set.length; i++) {
+      debug(set[i].semver)
+      if (set[i].semver === ANY) {
+        continue
+      }
+
+      if (set[i].semver.prerelease.length > 0) {
+        var allowed = set[i].semver
+        if (allowed.major === version.major &&
+            allowed.minor === version.minor &&
+            allowed.patch === version.patch) {
+          return true
+        }
+      }
+    }
+
+    // Version has a -pre, but it's not one of the ones we like.
+    return false
+  }
+
+  return true
+}
+
+exports.satisfies = satisfies
+function satisfies (version, range, options) {
+  try {
+    range = new Range(range, options)
+  } catch (er) {
+    return false
+  }
+  return range.test(version)
+}
+
+exports.maxSatisfying = maxSatisfying
+function maxSatisfying (versions, range, options) {
+  var max = null
+  var maxSV = null
+  try {
+    var rangeObj = new Range(range, options)
+  } catch (er) {
+    return null
+  }
+  versions.forEach(function (v) {
+    if (rangeObj.test(v)) {
+      // satisfies(v, range, options)
+      if (!max || maxSV.compare(v) === -1) {
+        // compare(max, v, true)
+        max = v
+        maxSV = new SemVer(max, options)
+      }
+    }
+  })
+  return max
+}
+
+exports.minSatisfying = minSatisfying
+function minSatisfying (versions, range, options) {
+  var min = null
+  var minSV = null
+  try {
+    var rangeObj = new Range(range, options)
+  } catch (er) {
+    return null
+  }
+  versions.forEach(function (v) {
+    if (rangeObj.test(v)) {
+      // satisfies(v, range, options)
+      if (!min || minSV.compare(v) === 1) {
+        // compare(min, v, true)
+        min = v
+        minSV = new SemVer(min, options)
+      }
+    }
+  })
+  return min
+}
+
+exports.minVersion = minVersion
+function minVersion (range, loose) {
+  range = new Range(range, loose)
+
+  var minver = new SemVer('0.0.0')
+  if (range.test(minver)) {
+    return minver
+  }
+
+  minver = new SemVer('0.0.0-0')
+  if (range.test(minver)) {
+    return minver
+  }
+
+  minver = null
+  for (var i = 0; i < range.set.length; ++i) {
+    var comparators = range.set[i]
+
+    comparators.forEach(function (comparator) {
+      // Clone to avoid manipulating the comparator's semver object.
+      var compver = new SemVer(comparator.semver.version)
+      switch (comparator.operator) {
+        case '>':
+          if (compver.prerelease.length === 0) {
+            compver.patch++
+          } else {
+            compver.prerelease.push(0)
+          }
+          compver.raw = compver.format()
+          /* fallthrough */
+        case '':
+        case '>=':
+          if (!minver || gt(minver, compver)) {
+            minver = compver
+          }
+          break
+        case '<':
+        case '<=':
+          /* Ignore maximum versions */
+          break
+        /* istanbul ignore next */
+        default:
+          throw new Error('Unexpected operation: ' + comparator.operator)
+      }
+    })
+  }
+
+  if (minver && range.test(minver)) {
+    return minver
+  }
+
+  return null
+}
+
+exports.validRange = validRange
+function validRange (range, options) {
+  try {
+    // Return '*' instead of '' so that truthiness works.
+    // This will throw if it's invalid anyway
+    return new Range(range, options).range || '*'
+  } catch (er) {
+    return null
+  }
+}
+
+// Determine if version is less than all the versions possible in the range
+exports.ltr = ltr
+function ltr (version, range, options) {
+  return outside(version, range, '<', options)
+}
+
+// Determine if version is greater than all the versions possible in the range.
+exports.gtr = gtr
+function gtr (version, range, options) {
+  return outside(version, range, '>', options)
+}
+
+exports.outside = outside
+function outside (version, range, hilo, options) {
+  version = new SemVer(version, options)
+  range = new Range(range, options)
+
+  var gtfn, ltefn, ltfn, comp, ecomp
+  switch (hilo) {
+    case '>':
+      gtfn = gt
+      ltefn = lte
+      ltfn = lt
+      comp = '>'
+      ecomp = '>='
+      break
+    case '<':
+      gtfn = lt
+      ltefn = gte
+      ltfn = gt
+      comp = '<'
+      ecomp = '<='
+      break
+    default:
+      throw new TypeError('Must provide a hilo val of "<" or ">"')
+  }
+
+  // If it satisifes the range it is not outside
+  if (satisfies(version, range, options)) {
+    return false
+  }
+
+  // From now on, variable terms are as if we're in "gtr" mode.
+  // but note that everything is flipped for the "ltr" function.
+
+  for (var i = 0; i < range.set.length; ++i) {
+    var comparators = range.set[i]
+
+    var high = null
+    var low = null
+
+    comparators.forEach(function (comparator) {
+      if (comparator.semver === ANY) {
+        comparator = new Comparator('>=0.0.0')
+      }
+      high = high || comparator
+      low = low || comparator
+      if (gtfn(comparator.semver, high.semver, options)) {
+        high = comparator
+      } else if (ltfn(comparator.semver, low.semver, options)) {
+        low = comparator
+      }
+    })
+
+    // If the edge version comparator has a operator then our version
+    // isn't outside it
+    if (high.operator === comp || high.operator === ecomp) {
+      return false
+    }
+
+    // If the lowest version comparator has an operator and our version
+    // is less than it then it isn't higher than the range
+    if ((!low.operator || low.operator === comp) &&
+        ltefn(version, low.semver)) {
+      return false
+    } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+      return false
+    }
+  }
+  return true
+}
+
+exports.prerelease = prerelease
+function prerelease (version, options) {
+  var parsed = parse(version, options)
+  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
+}
+
+exports.intersects = intersects
+function intersects (r1, r2, options) {
+  r1 = new Range(r1, options)
+  r2 = new Range(r2, options)
+  return r1.intersects(r2)
+}
+
+exports.coerce = coerce
+function coerce (version, options) {
+  if (version instanceof SemVer) {
+    return version
+  }
+
+  if (typeof version === 'number') {
+    version = String(version)
+  }
+
+  if (typeof version !== 'string') {
+    return null
+  }
+
+  options = options || {}
+
+  var match = null
+  if (!options.rtl) {
+    match = version.match(re[t.COERCE])
+  } else {
+    // Find the right-most coercible string that does not share
+    // a terminus with a more left-ward coercible string.
+    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
+    //
+    // Walk through the string checking with a /g regexp
+    // Manually set the index so as to pick up overlapping matches.
+    // Stop when we get a match that ends at the string end, since no
+    // coercible string can be more right-ward without the same terminus.
+    var next
+    while ((next = re[t.COERCERTL].exec(version)) &&
+      (!match || match.index + match[0].length !== version.length)
+    ) {
+      if (!match ||
+          next.index + next[0].length !== match.index + match[0].length) {
+        match = next
+      }
+      re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
+    }
+    // leave it in a clean state
+    re[t.COERCERTL].lastIndex = -1
+  }
+
+  if (match === null) {
+    return null
+  }
+
+  return parse(match[2] +
+    '.' + (match[3] || '0') +
+    '.' + (match[4] || '0'), options)
+}
diff --git a/setup-maven/node_modules/shebang-command/index.js b/setup-maven/node_modules/shebang-command/index.js
new file mode 100644
index 0000000..2de70b0
--- /dev/null
+++ b/setup-maven/node_modules/shebang-command/index.js
@@ -0,0 +1,19 @@
+'use strict';
+var shebangRegex = require('shebang-regex');
+
+module.exports = function (str) {
+	var match = str.match(shebangRegex);
+
+	if (!match) {
+		return null;
+	}
+
+	var arr = match[0].replace(/#! ?/, '').split(' ');
+	var bin = arr[0].split('/').pop();
+	var arg = arr[1];
+
+	return (bin === 'env' ?
+		arg :
+		bin + (arg ? ' ' + arg : '')
+	);
+};
diff --git a/setup-maven/node_modules/shebang-command/license b/setup-maven/node_modules/shebang-command/license
new file mode 100644
index 0000000..0f8cf79
--- /dev/null
+++ b/setup-maven/node_modules/shebang-command/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Kevin Martensson <kevinmartensson@gmail.com> (github.com/kevva)
+
+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/setup-maven/node_modules/shebang-command/package.json b/setup-maven/node_modules/shebang-command/package.json
new file mode 100644
index 0000000..1ce1add
--- /dev/null
+++ b/setup-maven/node_modules/shebang-command/package.json
@@ -0,0 +1,71 @@
+{
+  "_from": "shebang-command@^1.2.0",
+  "_id": "shebang-command@1.2.0",
+  "_inBundle": false,
+  "_integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+  "_location": "/shebang-command",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "shebang-command@^1.2.0",
+    "name": "shebang-command",
+    "escapedName": "shebang-command",
+    "rawSpec": "^1.2.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.2.0"
+  },
+  "_requiredBy": [
+    "/cross-spawn"
+  ],
+  "_resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+  "_shasum": "44aac65b695b03398968c39f363fee5deafdf1ea",
+  "_spec": "shebang-command@^1.2.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/cross-spawn",
+  "author": {
+    "name": "Kevin Martensson",
+    "email": "kevinmartensson@gmail.com",
+    "url": "github.com/kevva"
+  },
+  "bugs": {
+    "url": "https://github.com/kevva/shebang-command/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "shebang-regex": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "Get the command from a shebang",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/kevva/shebang-command#readme",
+  "keywords": [
+    "cmd",
+    "command",
+    "parse",
+    "shebang"
+  ],
+  "license": "MIT",
+  "name": "shebang-command",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/kevva/shebang-command.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "1.2.0",
+  "xo": {
+    "ignores": [
+      "test.js"
+    ]
+  }
+}
diff --git a/setup-maven/node_modules/shebang-command/readme.md b/setup-maven/node_modules/shebang-command/readme.md
new file mode 100644
index 0000000..16b0be4
--- /dev/null
+++ b/setup-maven/node_modules/shebang-command/readme.md
@@ -0,0 +1,39 @@
+# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command)
+
+> Get the command from a shebang
+
+
+## Install
+
+```
+$ npm install --save shebang-command
+```
+
+
+## Usage
+
+```js
+const shebangCommand = require('shebang-command');
+
+shebangCommand('#!/usr/bin/env node');
+//=> 'node'
+
+shebangCommand('#!/bin/bash');
+//=> 'bash'
+```
+
+
+## API
+
+### shebangCommand(string)
+
+#### string
+
+Type: `string`
+
+String containing a shebang.
+
+
+## License
+
+MIT © [Kevin Martensson](http://github.com/kevva)
diff --git a/setup-maven/node_modules/shebang-regex/index.js b/setup-maven/node_modules/shebang-regex/index.js
new file mode 100644
index 0000000..d052d2e
--- /dev/null
+++ b/setup-maven/node_modules/shebang-regex/index.js
@@ -0,0 +1,2 @@
+'use strict';
+module.exports = /^#!.*/;
diff --git a/setup-maven/node_modules/shebang-regex/license b/setup-maven/node_modules/shebang-regex/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/setup-maven/node_modules/shebang-regex/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/shebang-regex/package.json b/setup-maven/node_modules/shebang-regex/package.json
new file mode 100644
index 0000000..68f5726
--- /dev/null
+++ b/setup-maven/node_modules/shebang-regex/package.json
@@ -0,0 +1,64 @@
+{
+  "_from": "shebang-regex@^1.0.0",
+  "_id": "shebang-regex@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+  "_location": "/shebang-regex",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "shebang-regex@^1.0.0",
+    "name": "shebang-regex",
+    "escapedName": "shebang-regex",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/shebang-command"
+  ],
+  "_resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+  "_shasum": "da42f49740c0b42db2ca9728571cb190c98efea3",
+  "_spec": "shebang-regex@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/shebang-command",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/shebang-regex/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Regular expression for matching a shebang",
+  "devDependencies": {
+    "ava": "0.0.4"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/shebang-regex#readme",
+  "keywords": [
+    "re",
+    "regex",
+    "regexp",
+    "shebang",
+    "match",
+    "test"
+  ],
+  "license": "MIT",
+  "name": "shebang-regex",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/shebang-regex.git"
+  },
+  "scripts": {
+    "test": "node test.js"
+  },
+  "version": "1.0.0"
+}
diff --git a/setup-maven/node_modules/shebang-regex/readme.md b/setup-maven/node_modules/shebang-regex/readme.md
new file mode 100644
index 0000000..ef75e51
--- /dev/null
+++ b/setup-maven/node_modules/shebang-regex/readme.md
@@ -0,0 +1,29 @@
+# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex)
+
+> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix))
+
+
+## Install
+
+```
+$ npm install --save shebang-regex
+```
+
+
+## Usage
+
+```js
+var shebangRegex = require('shebang-regex');
+var str = '#!/usr/bin/env node\nconsole.log("unicorns");';
+
+shebangRegex.test(str);
+//=> true
+
+shebangRegex.exec(str)[0];
+//=> '#!/usr/bin/env node'
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/setup-maven/node_modules/signal-exit/CHANGELOG.md b/setup-maven/node_modules/signal-exit/CHANGELOG.md
new file mode 100644
index 0000000..e2f70d2
--- /dev/null
+++ b/setup-maven/node_modules/signal-exit/CHANGELOG.md
@@ -0,0 +1,27 @@
+# Change Log
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+<a name="3.0.1"></a>
+## [3.0.1](https://github.com/tapjs/signal-exit/compare/v3.0.0...v3.0.1) (2016-09-08)
+
+
+### Bug Fixes
+
+* do not listen on SIGBUS, SIGFPE, SIGSEGV and SIGILL ([#40](https://github.com/tapjs/signal-exit/issues/40)) ([5b105fb](https://github.com/tapjs/signal-exit/commit/5b105fb))
+
+
+
+<a name="3.0.0"></a>
+# [3.0.0](https://github.com/tapjs/signal-exit/compare/v2.1.2...v3.0.0) (2016-06-13)
+
+
+### Bug Fixes
+
+* get our test suite running on Windows ([#23](https://github.com/tapjs/signal-exit/issues/23)) ([6f3eda8](https://github.com/tapjs/signal-exit/commit/6f3eda8))
+* hooking SIGPROF was interfering with profilers see [#21](https://github.com/tapjs/signal-exit/issues/21) ([#24](https://github.com/tapjs/signal-exit/issues/24)) ([1248a4c](https://github.com/tapjs/signal-exit/commit/1248a4c))
+
+
+### BREAKING CHANGES
+
+* signal-exit no longer wires into SIGPROF
diff --git a/setup-maven/node_modules/signal-exit/LICENSE.txt b/setup-maven/node_modules/signal-exit/LICENSE.txt
new file mode 100644
index 0000000..eead04a
--- /dev/null
+++ b/setup-maven/node_modules/signal-exit/LICENSE.txt
@@ -0,0 +1,16 @@
+The ISC License
+
+Copyright (c) 2015, Contributors
+
+Permission to use, copy, modify, and/or distribute this software
+for any purpose with or without fee is hereby granted, provided
+that the above copyright notice and this permission notice
+appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/signal-exit/README.md b/setup-maven/node_modules/signal-exit/README.md
new file mode 100644
index 0000000..8ebccab
--- /dev/null
+++ b/setup-maven/node_modules/signal-exit/README.md
@@ -0,0 +1,40 @@
+# signal-exit
+
+[![Build Status](https://travis-ci.org/tapjs/signal-exit.png)](https://travis-ci.org/tapjs/signal-exit)
+[![Coverage](https://coveralls.io/repos/tapjs/signal-exit/badge.svg?branch=master)](https://coveralls.io/r/tapjs/signal-exit?branch=master)
+[![NPM version](https://img.shields.io/npm/v/signal-exit.svg)](https://www.npmjs.com/package/signal-exit)
+[![Windows Tests](https://img.shields.io/appveyor/ci/bcoe/signal-exit/master.svg?label=Windows%20Tests)](https://ci.appveyor.com/project/bcoe/signal-exit)
+[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)
+
+When you want to fire an event no matter how a process exits:
+
+* reaching the end of execution.
+* explicitly having `process.exit(code)` called.
+* having `process.kill(pid, sig)` called.
+* receiving a fatal signal from outside the process
+
+Use `signal-exit`.
+
+```js
+var onExit = require('signal-exit')
+
+onExit(function (code, signal) {
+  console.log('process exited!')
+})
+```
+
+## API
+
+`var remove = onExit(function (code, signal) {}, options)`
+
+The return value of the function is a function that will remove the
+handler.
+
+Note that the function *only* fires for signals if the signal would
+cause the proces to exit.  That is, there are no other listeners, and
+it is a fatal signal.
+
+## Options
+
+* `alwaysLast`: Run this handler after any other signal or exit
+  handlers.  This causes `process.emit` to be monkeypatched.
diff --git a/setup-maven/node_modules/signal-exit/index.js b/setup-maven/node_modules/signal-exit/index.js
new file mode 100644
index 0000000..337f691
--- /dev/null
+++ b/setup-maven/node_modules/signal-exit/index.js
@@ -0,0 +1,157 @@
+// Note: since nyc uses this module to output coverage, any lines
+// that are in the direct sync flow of nyc's outputCoverage are
+// ignored, since we can never get coverage for them.
+var assert = require('assert')
+var signals = require('./signals.js')
+
+var EE = require('events')
+/* istanbul ignore if */
+if (typeof EE !== 'function') {
+  EE = EE.EventEmitter
+}
+
+var emitter
+if (process.__signal_exit_emitter__) {
+  emitter = process.__signal_exit_emitter__
+} else {
+  emitter = process.__signal_exit_emitter__ = new EE()
+  emitter.count = 0
+  emitter.emitted = {}
+}
+
+// Because this emitter is a global, we have to check to see if a
+// previous version of this library failed to enable infinite listeners.
+// I know what you're about to say.  But literally everything about
+// signal-exit is a compromise with evil.  Get used to it.
+if (!emitter.infinite) {
+  emitter.setMaxListeners(Infinity)
+  emitter.infinite = true
+}
+
+module.exports = function (cb, opts) {
+  assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')
+
+  if (loaded === false) {
+    load()
+  }
+
+  var ev = 'exit'
+  if (opts && opts.alwaysLast) {
+    ev = 'afterexit'
+  }
+
+  var remove = function () {
+    emitter.removeListener(ev, cb)
+    if (emitter.listeners('exit').length === 0 &&
+        emitter.listeners('afterexit').length === 0) {
+      unload()
+    }
+  }
+  emitter.on(ev, cb)
+
+  return remove
+}
+
+module.exports.unload = unload
+function unload () {
+  if (!loaded) {
+    return
+  }
+  loaded = false
+
+  signals.forEach(function (sig) {
+    try {
+      process.removeListener(sig, sigListeners[sig])
+    } catch (er) {}
+  })
+  process.emit = originalProcessEmit
+  process.reallyExit = originalProcessReallyExit
+  emitter.count -= 1
+}
+
+function emit (event, code, signal) {
+  if (emitter.emitted[event]) {
+    return
+  }
+  emitter.emitted[event] = true
+  emitter.emit(event, code, signal)
+}
+
+// { <signal>: <listener fn>, ... }
+var sigListeners = {}
+signals.forEach(function (sig) {
+  sigListeners[sig] = function listener () {
+    // If there are no other listeners, an exit is coming!
+    // Simplest way: remove us and then re-send the signal.
+    // We know that this will kill the process, so we can
+    // safely emit now.
+    var listeners = process.listeners(sig)
+    if (listeners.length === emitter.count) {
+      unload()
+      emit('exit', null, sig)
+      /* istanbul ignore next */
+      emit('afterexit', null, sig)
+      /* istanbul ignore next */
+      process.kill(process.pid, sig)
+    }
+  }
+})
+
+module.exports.signals = function () {
+  return signals
+}
+
+module.exports.load = load
+
+var loaded = false
+
+function load () {
+  if (loaded) {
+    return
+  }
+  loaded = true
+
+  // This is the number of onSignalExit's that are in play.
+  // It's important so that we can count the correct number of
+  // listeners on signals, and don't wait for the other one to
+  // handle it instead of us.
+  emitter.count += 1
+
+  signals = signals.filter(function (sig) {
+    try {
+      process.on(sig, sigListeners[sig])
+      return true
+    } catch (er) {
+      return false
+    }
+  })
+
+  process.emit = processEmit
+  process.reallyExit = processReallyExit
+}
+
+var originalProcessReallyExit = process.reallyExit
+function processReallyExit (code) {
+  process.exitCode = code || 0
+  emit('exit', process.exitCode, null)
+  /* istanbul ignore next */
+  emit('afterexit', process.exitCode, null)
+  /* istanbul ignore next */
+  originalProcessReallyExit.call(process, process.exitCode)
+}
+
+var originalProcessEmit = process.emit
+function processEmit (ev, arg) {
+  if (ev === 'exit') {
+    if (arg !== undefined) {
+      process.exitCode = arg
+    }
+    var ret = originalProcessEmit.apply(this, arguments)
+    emit('exit', process.exitCode, null)
+    /* istanbul ignore next */
+    emit('afterexit', process.exitCode, null)
+    return ret
+  } else {
+    return originalProcessEmit.apply(this, arguments)
+  }
+}
diff --git a/setup-maven/node_modules/signal-exit/package.json b/setup-maven/node_modules/signal-exit/package.json
new file mode 100644
index 0000000..a031f53
--- /dev/null
+++ b/setup-maven/node_modules/signal-exit/package.json
@@ -0,0 +1,66 @@
+{
+  "_from": "signal-exit@^3.0.0",
+  "_id": "signal-exit@3.0.2",
+  "_inBundle": false,
+  "_integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+  "_location": "/signal-exit",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "signal-exit@^3.0.0",
+    "name": "signal-exit",
+    "escapedName": "signal-exit",
+    "rawSpec": "^3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.0"
+  },
+  "_requiredBy": [
+    "/execa"
+  ],
+  "_resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+  "_shasum": "b5fdc08f1287ea1178628e415e25132b73646c6d",
+  "_spec": "signal-exit@^3.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/execa",
+  "author": {
+    "name": "Ben Coe",
+    "email": "ben@npmjs.com"
+  },
+  "bugs": {
+    "url": "https://github.com/tapjs/signal-exit/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "when you want to fire an event no matter how a process exits.",
+  "devDependencies": {
+    "chai": "^3.5.0",
+    "coveralls": "^2.11.10",
+    "nyc": "^8.1.0",
+    "standard": "^7.1.2",
+    "standard-version": "^2.3.0",
+    "tap": "^8.0.1"
+  },
+  "files": [
+    "index.js",
+    "signals.js"
+  ],
+  "homepage": "https://github.com/tapjs/signal-exit",
+  "keywords": [
+    "signal",
+    "exit"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "signal-exit",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/tapjs/signal-exit.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter=text-lcov | coveralls",
+    "pretest": "standard",
+    "release": "standard-version",
+    "test": "tap --timeout=240 ./test/*.js --cov"
+  },
+  "version": "3.0.2"
+}
diff --git a/setup-maven/node_modules/signal-exit/signals.js b/setup-maven/node_modules/signal-exit/signals.js
new file mode 100644
index 0000000..3bd67a8
--- /dev/null
+++ b/setup-maven/node_modules/signal-exit/signals.js
@@ -0,0 +1,53 @@
+// This is not the set of all possible signals.
+//
+// It IS, however, the set of all signals that trigger
+// an exit on either Linux or BSD systems.  Linux is a
+// superset of the signal names supported on BSD, and
+// the unknown signals just fail to register, so we can
+// catch that easily enough.
+//
+// Don't bother with SIGKILL.  It's uncatchable, which
+// means that we can't fire any callbacks anyway.
+//
+// If a user does happen to register a handler on a non-
+// fatal signal like SIGWINCH or something, and then
+// exit, it'll end up firing `process.emit('exit')`, so
+// the handler will be fired anyway.
+//
+// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
+// artificially, inherently leave the process in a
+// state from which it is not safe to try and enter JS
+// listeners.
+module.exports = [
+  'SIGABRT',
+  'SIGALRM',
+  'SIGHUP',
+  'SIGINT',
+  'SIGTERM'
+]
+
+if (process.platform !== 'win32') {
+  module.exports.push(
+    'SIGVTALRM',
+    'SIGXCPU',
+    'SIGXFSZ',
+    'SIGUSR2',
+    'SIGTRAP',
+    'SIGSYS',
+    'SIGQUIT',
+    'SIGIOT'
+    // should detect profiler and enable/disable accordingly.
+    // see #21
+    // 'SIGPROF'
+  )
+}
+
+if (process.platform === 'linux') {
+  module.exports.push(
+    'SIGIO',
+    'SIGPOLL',
+    'SIGPWR',
+    'SIGSTKFLT',
+    'SIGUNUSED'
+  )
+}
diff --git a/setup-maven/node_modules/strip-eof/index.js b/setup-maven/node_modules/strip-eof/index.js
new file mode 100644
index 0000000..a17d0af
--- /dev/null
+++ b/setup-maven/node_modules/strip-eof/index.js
@@ -0,0 +1,15 @@
+'use strict';
+module.exports = function (x) {
+	var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt();
+	var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt();
+
+	if (x[x.length - 1] === lf) {
+		x = x.slice(0, x.length - 1);
+	}
+
+	if (x[x.length - 1] === cr) {
+		x = x.slice(0, x.length - 1);
+	}
+
+	return x;
+};
diff --git a/setup-maven/node_modules/strip-eof/license b/setup-maven/node_modules/strip-eof/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/setup-maven/node_modules/strip-eof/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/strip-eof/package.json b/setup-maven/node_modules/strip-eof/package.json
new file mode 100644
index 0000000..794f5df
--- /dev/null
+++ b/setup-maven/node_modules/strip-eof/package.json
@@ -0,0 +1,71 @@
+{
+  "_from": "strip-eof@^1.0.0",
+  "_id": "strip-eof@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+  "_location": "/strip-eof",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "strip-eof@^1.0.0",
+    "name": "strip-eof",
+    "escapedName": "strip-eof",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/execa"
+  ],
+  "_resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+  "_shasum": "bb43ff5598a6eb05d89b59fcd129c983313606bf",
+  "_spec": "strip-eof@^1.0.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/execa",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/strip-eof/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Strip the End-Of-File (EOF) character from a string/buffer",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/strip-eof#readme",
+  "keywords": [
+    "strip",
+    "trim",
+    "remove",
+    "delete",
+    "eof",
+    "end",
+    "file",
+    "newline",
+    "linebreak",
+    "character",
+    "string",
+    "buffer"
+  ],
+  "license": "MIT",
+  "name": "strip-eof",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/strip-eof.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "1.0.0"
+}
diff --git a/setup-maven/node_modules/strip-eof/readme.md b/setup-maven/node_modules/strip-eof/readme.md
new file mode 100644
index 0000000..45ffe04
--- /dev/null
+++ b/setup-maven/node_modules/strip-eof/readme.md
@@ -0,0 +1,28 @@
+# strip-eof [![Build Status](https://travis-ci.org/sindresorhus/strip-eof.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-eof)
+
+> Strip the [End-Of-File](https://en.wikipedia.org/wiki/End-of-file) (EOF) character from a string/buffer
+
+
+## Install
+
+```
+$ npm install --save strip-eof
+```
+
+
+## Usage
+
+```js
+const stripEof = require('strip-eof');
+
+stripEof('foo\nbar\n\n');
+//=> 'foo\nbar\n'
+
+stripEof(new Buffer('foo\nbar\n\n')).toString();
+//=> 'foo\nbar\n'
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/setup-maven/node_modules/tunnel/.npmignore b/setup-maven/node_modules/tunnel/.npmignore
new file mode 100644
index 0000000..6684c76
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/.npmignore
@@ -0,0 +1,2 @@
+/.idea
+/node_modules
diff --git a/setup-maven/node_modules/tunnel/CHANGELOG.md b/setup-maven/node_modules/tunnel/CHANGELOG.md
new file mode 100644
index 0000000..70bdbd7
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/CHANGELOG.md
@@ -0,0 +1,13 @@
+# Changelog
+
+ - 0.0.4 (2016/01/23)
+   - supported Node v0.12 or later.
+
+ - 0.0.3 (2014/01/20)
+   - fixed package.json
+
+ - 0.0.1 (2012/02/18)
+   - supported Node v0.6.x (0.6.11 or later).
+
+ - 0.0.0 (2012/02/11)
+   - first release.
diff --git a/setup-maven/node_modules/tunnel/LICENSE b/setup-maven/node_modules/tunnel/LICENSE
new file mode 100644
index 0000000..8b8a895
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+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/setup-maven/node_modules/tunnel/README.md b/setup-maven/node_modules/tunnel/README.md
new file mode 100644
index 0000000..b196162
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/README.md
@@ -0,0 +1,179 @@
+# node-tunnel - HTTP/HTTPS Agents for tunneling proxies
+
+## Example
+
+```javascript
+var tunnel = require('tunnel');
+
+var tunnelingAgent = tunnel.httpsOverHttp({
+  proxy: {
+    host: 'localhost',
+    port: 3128
+  }
+});
+
+var req = https.request({
+  host: 'example.com',
+  port: 443,
+  agent: tunnelingAgent
+});
+```
+
+## Installation
+
+    $ npm install tunnel
+
+## Usages
+
+### HTTP over HTTP tunneling
+
+```javascript
+var tunnelingAgent = tunnel.httpOverHttp({
+  maxSockets: poolSize, // Defaults to 5
+
+  proxy: { // Proxy settings
+    host: proxyHost, // Defaults to 'localhost'
+    port: proxyPort, // Defaults to 80
+    localAddress: localAddress, // Local interface if necessary
+
+    // Basic authorization for proxy server if necessary
+    proxyAuth: 'user:password',
+
+    // Header fields for proxy server if necessary
+    headers: {
+      'User-Agent': 'Node'
+    }
+  }
+});
+
+var req = http.request({
+  host: 'example.com',
+  port: 80,
+  agent: tunnelingAgent
+});
+```
+
+### HTTPS over HTTP tunneling
+
+```javascript
+var tunnelingAgent = tunnel.httpsOverHttp({
+  maxSockets: poolSize, // Defaults to 5
+
+  // CA for origin server if necessary
+  ca: [ fs.readFileSync('origin-server-ca.pem')],
+
+  // Client certification for origin server if necessary
+  key: fs.readFileSync('origin-server-key.pem'),
+  cert: fs.readFileSync('origin-server-cert.pem'),
+
+  proxy: { // Proxy settings
+    host: proxyHost, // Defaults to 'localhost'
+    port: proxyPort, // Defaults to 80
+    localAddress: localAddress, // Local interface if necessary
+
+    // Basic authorization for proxy server if necessary
+    proxyAuth: 'user:password',
+
+    // Header fields for proxy server if necessary
+    headers: {
+      'User-Agent': 'Node'
+    },
+  }
+});
+
+var req = https.request({
+  host: 'example.com',
+  port: 443,
+  agent: tunnelingAgent
+});
+```
+
+### HTTP over HTTPS tunneling
+
+```javascript
+var tunnelingAgent = tunnel.httpOverHttps({
+  maxSockets: poolSize, // Defaults to 5
+
+  proxy: { // Proxy settings
+    host: proxyHost, // Defaults to 'localhost'
+    port: proxyPort, // Defaults to 443
+    localAddress: localAddress, // Local interface if necessary
+
+    // Basic authorization for proxy server if necessary
+    proxyAuth: 'user:password',
+
+    // Header fields for proxy server if necessary
+    headers: {
+      'User-Agent': 'Node'
+    },
+
+    // CA for proxy server if necessary
+    ca: [ fs.readFileSync('origin-server-ca.pem')],
+
+    // Server name for verification if necessary
+    servername: 'example.com',
+
+    // Client certification for proxy server if necessary
+    key: fs.readFileSync('origin-server-key.pem'),
+    cert: fs.readFileSync('origin-server-cert.pem'),
+  }
+});
+
+var req = http.request({
+  host: 'example.com',
+  port: 80,
+  agent: tunnelingAgent
+});
+```
+
+### HTTPS over HTTPS tunneling
+
+```javascript
+var tunnelingAgent = tunnel.httpsOverHttps({
+  maxSockets: poolSize, // Defaults to 5
+
+  // CA for origin server if necessary
+  ca: [ fs.readFileSync('origin-server-ca.pem')],
+
+  // Client certification for origin server if necessary
+  key: fs.readFileSync('origin-server-key.pem'),
+  cert: fs.readFileSync('origin-server-cert.pem'),
+
+  proxy: { // Proxy settings
+    host: proxyHost, // Defaults to 'localhost'
+    port: proxyPort, // Defaults to 443
+    localAddress: localAddress, // Local interface if necessary
+
+    // Basic authorization for proxy server if necessary
+    proxyAuth: 'user:password',
+
+    // Header fields for proxy server if necessary
+    headers: {
+      'User-Agent': 'Node'
+    }
+
+    // CA for proxy server if necessary
+    ca: [ fs.readFileSync('origin-server-ca.pem')],
+
+    // Server name for verification if necessary
+    servername: 'example.com',
+
+    // Client certification for proxy server if necessary
+    key: fs.readFileSync('origin-server-key.pem'),
+    cert: fs.readFileSync('origin-server-cert.pem'),
+  }
+});
+
+var req = https.request({
+  host: 'example.com',
+  port: 443,
+  agent: tunnelingAgent
+});
+```
+
+## CONTRIBUTORS
+* [Aleksis Brezas (abresas)](https://github.com/abresas)
+
+## License
+
+Licensed under the [MIT](https://github.com/koichik/node-tunnel/blob/master/LICENSE) license.
diff --git a/setup-maven/node_modules/tunnel/index.js b/setup-maven/node_modules/tunnel/index.js
new file mode 100644
index 0000000..2947757
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/index.js
@@ -0,0 +1 @@
+module.exports = require('./lib/tunnel');
diff --git a/setup-maven/node_modules/tunnel/lib/tunnel.js b/setup-maven/node_modules/tunnel/lib/tunnel.js
new file mode 100644
index 0000000..c42b039
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/lib/tunnel.js
@@ -0,0 +1,247 @@
+'use strict';
+
+var net = require('net');
+var tls = require('tls');
+var http = require('http');
+var https = require('https');
+var events = require('events');
+var assert = require('assert');
+var util = require('util');
+
+
+exports.httpOverHttp = httpOverHttp;
+exports.httpsOverHttp = httpsOverHttp;
+exports.httpOverHttps = httpOverHttps;
+exports.httpsOverHttps = httpsOverHttps;
+
+
+function httpOverHttp(options) {
+  var agent = new TunnelingAgent(options);
+  agent.request = http.request;
+  return agent;
+}
+
+function httpsOverHttp(options) {
+  var agent = new TunnelingAgent(options);
+  agent.request = http.request;
+  agent.createSocket = createSecureSocket;
+  return agent;
+}
+
+function httpOverHttps(options) {
+  var agent = new TunnelingAgent(options);
+  agent.request = https.request;
+  return agent;
+}
+
+function httpsOverHttps(options) {
+  var agent = new TunnelingAgent(options);
+  agent.request = https.request;
+  agent.createSocket = createSecureSocket;
+  return agent;
+}
+
+
+function TunnelingAgent(options) {
+  var self = this;
+  self.options = options || {};
+  self.proxyOptions = self.options.proxy || {};
+  self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
+  self.requests = [];
+  self.sockets = [];
+
+  self.on('free', function onFree(socket, host, port, localAddress) {
+    var options = toOptions(host, port, localAddress);
+    for (var i = 0, len = self.requests.length; i < len; ++i) {
+      var pending = self.requests[i];
+      if (pending.host === options.host && pending.port === options.port) {
+        // Detect the request to connect same origin server,
+        // reuse the connection.
+        self.requests.splice(i, 1);
+        pending.request.onSocket(socket);
+        return;
+      }
+    }
+    socket.destroy();
+    self.removeSocket(socket);
+  });
+}
+util.inherits(TunnelingAgent, events.EventEmitter);
+
+TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
+  var self = this;
+  var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
+
+  if (self.sockets.length >= this.maxSockets) {
+    // We are over limit so we'll add it to the queue.
+    self.requests.push(options);
+    return;
+  }
+
+  // If we are under maxSockets create a new one.
+  self.createSocket(options, function(socket) {
+    socket.on('free', onFree);
+    socket.on('close', onCloseOrRemove);
+    socket.on('agentRemove', onCloseOrRemove);
+    req.onSocket(socket);
+
+    function onFree() {
+      self.emit('free', socket, options);
+    }
+
+    function onCloseOrRemove(err) {
+      self.removeSocket(socket);
+      socket.removeListener('free', onFree);
+      socket.removeListener('close', onCloseOrRemove);
+      socket.removeListener('agentRemove', onCloseOrRemove);
+    }
+  });
+};
+
+TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
+  var self = this;
+  var placeholder = {};
+  self.sockets.push(placeholder);
+
+  var connectOptions = mergeOptions({}, self.proxyOptions, {
+    method: 'CONNECT',
+    path: options.host + ':' + options.port,
+    agent: false
+  });
+  if (connectOptions.proxyAuth) {
+    connectOptions.headers = connectOptions.headers || {};
+    connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
+        new Buffer(connectOptions.proxyAuth).toString('base64');
+  }
+
+  debug('making CONNECT request');
+  var connectReq = self.request(connectOptions);
+  connectReq.useChunkedEncodingByDefault = false; // for v0.6
+  connectReq.once('response', onResponse); // for v0.6
+  connectReq.once('upgrade', onUpgrade);   // for v0.6
+  connectReq.once('connect', onConnect);   // for v0.7 or later
+  connectReq.once('error', onError);
+  connectReq.end();
+
+  function onResponse(res) {
+    // Very hacky. This is necessary to avoid http-parser leaks.
+    res.upgrade = true;
+  }
+
+  function onUpgrade(res, socket, head) {
+    // Hacky.
+    process.nextTick(function() {
+      onConnect(res, socket, head);
+    });
+  }
+
+  function onConnect(res, socket, head) {
+    connectReq.removeAllListeners();
+    socket.removeAllListeners();
+
+    if (res.statusCode === 200) {
+      assert.equal(head.length, 0);
+      debug('tunneling connection has established');
+      self.sockets[self.sockets.indexOf(placeholder)] = socket;
+      cb(socket);
+    } else {
+      debug('tunneling socket could not be established, statusCode=%d',
+            res.statusCode);
+      var error = new Error('tunneling socket could not be established, ' +
+                            'statusCode=' + res.statusCode);
+      error.code = 'ECONNRESET';
+      options.request.emit('error', error);
+      self.removeSocket(placeholder);
+    }
+  }
+
+  function onError(cause) {
+    connectReq.removeAllListeners();
+
+    debug('tunneling socket could not be established, cause=%s\n',
+          cause.message, cause.stack);
+    var error = new Error('tunneling socket could not be established, ' +
+                          'cause=' + cause.message);
+    error.code = 'ECONNRESET';
+    options.request.emit('error', error);
+    self.removeSocket(placeholder);
+  }
+};
+
+TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
+  var pos = this.sockets.indexOf(socket)
+  if (pos === -1) {
+    return;
+  }
+  this.sockets.splice(pos, 1);
+
+  var pending = this.requests.shift();
+  if (pending) {
+    // If we have pending requests and a socket gets closed a new one
+    // needs to be created to take over in the pool for the one that closed.
+    this.createSocket(pending, function(socket) {
+      pending.request.onSocket(socket);
+    });
+  }
+};
+
+function createSecureSocket(options, cb) {
+  var self = this;
+  TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
+    var hostHeader = options.request.getHeader('host');
+    var tlsOptions = mergeOptions({}, self.options, {
+      socket: socket,
+      servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
+    });
+
+    // 0 is dummy port for v0.6
+    var secureSocket = tls.connect(0, tlsOptions);
+    self.sockets[self.sockets.indexOf(socket)] = secureSocket;
+    cb(secureSocket);
+  });
+}
+
+
+function toOptions(host, port, localAddress) {
+  if (typeof host === 'string') { // since v0.10
+    return {
+      host: host,
+      port: port,
+      localAddress: localAddress
+    };
+  }
+  return host; // for v0.11 or later
+}
+
+function mergeOptions(target) {
+  for (var i = 1, len = arguments.length; i < len; ++i) {
+    var overrides = arguments[i];
+    if (typeof overrides === 'object') {
+      var keys = Object.keys(overrides);
+      for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
+        var k = keys[j];
+        if (overrides[k] !== undefined) {
+          target[k] = overrides[k];
+        }
+      }
+    }
+  }
+  return target;
+}
+
+
+var debug;
+if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
+  debug = function() {
+    var args = Array.prototype.slice.call(arguments);
+    if (typeof args[0] === 'string') {
+      args[0] = 'TUNNEL: ' + args[0];
+    } else {
+      args.unshift('TUNNEL:');
+    }
+    console.error.apply(console, args);
+  }
+} else {
+  debug = function() {};
+}
+exports.debug = debug; // for test
diff --git a/setup-maven/node_modules/tunnel/package.json b/setup-maven/node_modules/tunnel/package.json
new file mode 100644
index 0000000..edccd05
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/package.json
@@ -0,0 +1,64 @@
+{
+  "_from": "tunnel@0.0.4",
+  "_id": "tunnel@0.0.4",
+  "_inBundle": false,
+  "_integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=",
+  "_location": "/tunnel",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "tunnel@0.0.4",
+    "name": "tunnel",
+    "escapedName": "tunnel",
+    "rawSpec": "0.0.4",
+    "saveSpec": null,
+    "fetchSpec": "0.0.4"
+  },
+  "_requiredBy": [
+    "/typed-rest-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
+  "_shasum": "2d3785a158c174c9a16dc2c046ec5fc5f1742213",
+  "_spec": "tunnel@0.0.4",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/typed-rest-client",
+  "author": {
+    "name": "Koichi Kobayashi",
+    "email": "koichik@improvement.jp"
+  },
+  "bugs": {
+    "url": "https://github.com/koichik/node-tunnel/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Node HTTP/HTTPS Agents for tunneling proxies",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*"
+  },
+  "directories": {
+    "lib": "./lib"
+  },
+  "engines": {
+    "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+  },
+  "homepage": "https://github.com/koichik/node-tunnel/",
+  "keywords": [
+    "http",
+    "https",
+    "agent",
+    "proxy",
+    "tunnel"
+  ],
+  "license": "MIT",
+  "main": "./index.js",
+  "name": "tunnel",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/koichik/node-tunnel.git"
+  },
+  "scripts": {
+    "test": "./node_modules/mocha/bin/mocha"
+  },
+  "version": "0.0.4"
+}
diff --git a/setup-maven/node_modules/tunnel/test/http-over-http.js b/setup-maven/node_modules/tunnel/test/http-over-http.js
new file mode 100644
index 0000000..73d17a2
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/http-over-http.js
@@ -0,0 +1,108 @@
+var http = require('http');
+var net = require('net');
+var should = require('should');
+var tunnel = require('../index');
+
+describe('HTTP over HTTP', function() {
+  it('should finish without error', function(done) {
+    var serverPort = 3000;
+    var proxyPort = 3001;
+    var poolSize = 3;
+    var N = 10;
+    var serverConnect = 0;
+    var proxyConnect = 0;
+    var clientConnect = 0;
+    var server;
+    var proxy;
+    var agent;
+    
+    server = http.createServer(function(req, res) {
+      tunnel.debug('SERVER: got request');
+      ++serverConnect;
+      res.writeHead(200);
+      res.end('Hello' + req.url);
+      tunnel.debug('SERVER: sending response');
+    });
+    server.listen(serverPort, setupProxy);
+
+    function setupProxy() {
+      proxy = http.createServer(function(req, res) {
+        should.fail();
+      });
+      proxy.on('upgrade', onConnect); // for v0.6
+      proxy.on('connect', onConnect); // for v0.7 or later
+
+      function onConnect(req, clientSocket, head) {
+        tunnel.debug('PROXY: got CONNECT request');
+
+        req.method.should.equal('CONNECT');
+        req.url.should.equal('localhost:' + serverPort);
+        req.headers.should.not.have.property('transfer-encoding');
+        req.headers.should.have.property('proxy-authorization',
+            'Basic ' + new Buffer('user:password').toString('base64'));
+        ++proxyConnect;
+    
+        tunnel.debug('PROXY: creating a tunnel');
+        var serverSocket = net.connect(serverPort, function() {
+          tunnel.debug('PROXY: replying to client CONNECT request');
+          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
+          clientSocket.pipe(serverSocket);
+          serverSocket.write(head);
+          serverSocket.pipe(clientSocket);
+          // workaround, see joyent/node#2524
+          serverSocket.on('end', function() {
+            clientSocket.end();
+          });
+        });
+      }
+      proxy.listen(proxyPort, setupClient);
+    }
+
+    function setupClient() {
+      agent = tunnel.httpOverHttp({
+        maxSockets: poolSize,
+        proxy: {
+          port: proxyPort,
+          proxyAuth: 'user:password'
+        }
+      });
+
+      for (var i = 0; i < N; ++i) {
+        doClientRequest(i);
+      }
+
+      function doClientRequest(i) {
+        tunnel.debug('CLIENT: Making HTTP request (%d)', i);
+        var req = http.get({
+          port: serverPort,
+          path: '/' + i,
+          agent: agent
+        }, function(res) {
+          tunnel.debug('CLIENT: got HTTP response (%d)', i);
+          res.setEncoding('utf8');
+          res.on('data', function(data) {
+            data.should.equal('Hello/' + i);
+          });
+          res.on('end', function() {
+            ++clientConnect;
+            if (clientConnect === N) {
+              proxy.close();
+              server.close();
+            }
+          });
+        });
+      }
+    }
+
+    server.on('close', function() {
+      serverConnect.should.equal(N);
+      proxyConnect.should.equal(poolSize);
+      clientConnect.should.equal(N);
+    
+      agent.sockets.should.be.empty;
+      agent.requests.should.be.empty;
+  
+      done();
+    });
+  });
+});
diff --git a/setup-maven/node_modules/tunnel/test/http-over-https.js b/setup-maven/node_modules/tunnel/test/http-over-https.js
new file mode 100644
index 0000000..c3a92fd
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/http-over-https.js
@@ -0,0 +1,130 @@
+var http = require('http');
+var https = require('https');
+var net = require('net');
+var fs = require('fs');
+var path = require('path');
+var should = require('should');
+var tunnel = require('../index');
+
+function readPem(file) {
+  return fs.readFileSync(path.join('test/keys', file + '.pem'));
+}
+
+var proxyKey = readPem('proxy1-key');
+var proxyCert = readPem('proxy1-cert');
+var proxyCA = readPem('ca2-cert');
+var clientKey = readPem('client1-key');
+var clientCert = readPem('client1-cert');
+var clientCA = readPem('ca3-cert');
+
+describe('HTTP over HTTPS', function() {
+  it('should finish without error', function(done) {
+    var serverPort = 3004;
+    var proxyPort = 3005;
+    var poolSize = 3;
+    var N = 10;
+    var serverConnect = 0;
+    var proxyConnect = 0;
+    var clientConnect = 0;
+    var server;
+    var proxy;
+    var agent;
+
+    server = http.createServer(function(req, res) {
+      tunnel.debug('SERVER: got request');
+      ++serverConnect;
+      res.writeHead(200);
+      res.end('Hello' + req.url);
+      tunnel.debug('SERVER: sending response');
+    });
+    server.listen(serverPort, setupProxy);
+
+    function setupProxy() {
+      proxy = https.createServer({
+        key: proxyKey,
+        cert: proxyCert,
+        ca: [clientCA],
+        requestCert: true,
+        rejectUnauthorized: true
+      }, function(req, res) {
+        should.fail();
+      });
+      proxy.on('upgrade', onConnect); // for v0.6
+      proxy.on('connect', onConnect); // for v0.7 or later
+
+      function onConnect(req, clientSocket, head) {
+        tunnel.debug('PROXY: got CONNECT request');
+
+        req.method.should.equal('CONNECT');
+        req.url.should.equal('localhost:' + serverPort);
+        req.headers.should.not.have.property('transfer-encoding');
+        ++proxyConnect;
+
+        tunnel.debug('PROXY: creating a tunnel');
+        var serverSocket = net.connect(serverPort, function() {
+          tunnel.debug('PROXY: replying to client CONNECT request');
+          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
+          clientSocket.pipe(serverSocket);
+          serverSocket.write(head);
+          serverSocket.pipe(clientSocket);
+          // workaround, see joyent/node#2524
+          serverSocket.on('end', function() {
+            clientSocket.end();
+          });
+        });
+      }
+      proxy.listen(proxyPort, setupClient);
+    }
+
+    function setupClient() {
+      agent = tunnel.httpOverHttps({
+        maxSockets: poolSize,
+        proxy: {
+          port: proxyPort,
+          key: clientKey,
+          cert: clientCert,
+          ca: [proxyCA],
+          rejectUnauthorized: true
+        }
+      });
+
+      for (var i = 0; i < N; ++i) {
+        doClientRequest(i);
+      }
+
+      function doClientRequest(i) {
+        tunnel.debug('CLIENT: Making HTTP request (%d)', i);
+        var req = http.get({
+          port: serverPort,
+          path: '/' + i,
+          agent: agent
+        }, function(res) {
+          tunnel.debug('CLIENT: got HTTP response (%d)', i);
+          res.setEncoding('utf8');
+          res.on('data', function(data) {
+            data.should.equal('Hello/' + i);
+          });
+          res.on('end', function() {
+            ++clientConnect;
+            if (clientConnect === N) {
+              proxy.close();
+              server.close();
+            }
+          });
+        });
+      }
+    }
+
+    server.on('close', function() {
+      serverConnect.should.equal(N);
+      proxyConnect.should.equal(poolSize);
+      clientConnect.should.equal(N);
+
+      var name = 'localhost:' + serverPort;
+      agent.sockets.should.be.empty;
+      agent.requests.should.be.empty;
+
+      done();
+    });
+  });
+});
diff --git a/setup-maven/node_modules/tunnel/test/https-over-http.js b/setup-maven/node_modules/tunnel/test/https-over-http.js
new file mode 100644
index 0000000..82c4772
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/https-over-http.js
@@ -0,0 +1,130 @@
+var http = require('http');
+var https = require('https');
+var net = require('net');
+var fs = require('fs');
+var path = require('path');
+var should = require('should');
+var tunnel = require('../index');
+
+function readPem(file) {
+  return fs.readFileSync(path.join('test/keys', file + '.pem'));
+}
+
+var serverKey = readPem('server1-key');
+var serverCert = readPem('server1-cert');
+var serverCA = readPem('ca1-cert');
+var clientKey = readPem('client1-key');
+var clientCert = readPem('client1-cert');
+var clientCA = readPem('ca3-cert');
+
+
+describe('HTTPS over HTTP', function() {
+  it('should finish without error', function(done) {
+    var serverPort = 3002;
+    var proxyPort = 3003;
+    var poolSize = 3;
+    var N = 10;
+    var serverConnect = 0;
+    var proxyConnect = 0;
+    var clientConnect = 0;
+    var server;
+    var proxy;
+    var agent;
+
+    server = https.createServer({
+      key: serverKey,
+      cert: serverCert,
+      ca: [clientCA],
+      requestCert: true,
+      rejectUnauthorized: true
+    }, function(req, res) {
+      tunnel.debug('SERVER: got request');
+      ++serverConnect;
+      res.writeHead(200);
+      res.end('Hello' + req.url);
+      tunnel.debug('SERVER: sending response');
+    });
+    server.listen(serverPort, setupProxy);
+
+    function setupProxy() {
+      proxy = http.createServer(function(req, res) {
+        should.fail();
+      });
+      proxy.on('upgrade', onConnect); // for v0.6
+      proxy.on('connect', onConnect); // for v0.7 or later
+
+      function onConnect(req, clientSocket, head) {
+        tunnel.debug('PROXY: got CONNECT request');
+
+        req.method.should.equal('CONNECT');
+        req.url.should.equal('localhost:' + serverPort);
+        req.headers.should.not.have.property('transfer-encoding');
+        ++proxyConnect;
+
+        var serverSocket = net.connect(serverPort, function() {
+          tunnel.debug('PROXY: replying to client CONNECT request');
+          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
+          clientSocket.pipe(serverSocket);
+          serverSocket.write(head);
+          serverSocket.pipe(clientSocket);
+          // workaround, see joyent/node#2524
+          serverSocket.on('end', function() {
+            clientSocket.end();
+          });
+        });
+      }
+      proxy.listen(proxyPort, setupClient);
+    }
+
+    function setupClient() {
+      agent = tunnel.httpsOverHttp({
+        maxSockets: poolSize,
+        key: clientKey,
+        cert: clientCert,
+        ca: [serverCA],
+        rejectUnauthorized: true,
+        proxy: {
+          port: proxyPort
+        }
+      });
+
+      for (var i = 0; i < N; ++i) {
+        doClientRequest(i);
+      }
+
+      function doClientRequest(i) {
+        tunnel.debug('CLIENT: Making HTTPS request (%d)', i);
+        var req = https.get({
+          port: serverPort,
+          path: '/' + i,
+          agent: agent
+        }, function(res) {
+          tunnel.debug('CLIENT: got HTTPS response (%d)', i);
+          res.setEncoding('utf8');
+          res.on('data', function(data) {
+            data.should.equal('Hello/' + i);
+          });
+          res.on('end', function() {
+            ++clientConnect;
+            if (clientConnect === N) {
+              proxy.close();
+              server.close();
+            }
+          });
+        });
+      }
+    }
+
+    server.on('close', function() {
+      serverConnect.should.equal(N);
+      proxyConnect.should.equal(poolSize);
+      clientConnect.should.equal(N);
+
+      var name = 'localhost:' + serverPort;
+      agent.sockets.should.be.empty;
+      agent.requests.should.be.empty;
+
+      done();
+    });
+  });
+});
diff --git a/setup-maven/node_modules/tunnel/test/https-over-https-error.js b/setup-maven/node_modules/tunnel/test/https-over-https-error.js
new file mode 100644
index 0000000..c74094d
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/https-over-https-error.js
@@ -0,0 +1,261 @@
+var http = require('http');
+var https = require('https');
+var net = require('net');
+var fs = require('fs');
+var path = require('path');
+var should = require('should');
+var tunnel = require('../index');
+
+function readPem(file) {
+  return fs.readFileSync(path.join('test/keys', file + '.pem'));
+}
+
+var serverKey = readPem('server2-key');
+var serverCert = readPem('server2-cert');
+var serverCA = readPem('ca1-cert');
+var proxyKey = readPem('proxy2-key');
+var proxyCert = readPem('proxy2-cert');
+var proxyCA = readPem('ca2-cert');
+var client1Key = readPem('client1-key');
+var client1Cert = readPem('client1-cert');
+var client1CA = readPem('ca3-cert');
+var client2Key = readPem('client2-key');
+var client2Cert = readPem('client2-cert');
+var client2CA = readPem('ca4-cert');
+
+describe('HTTPS over HTTPS authentication failed', function() {
+  it('should finish without error', function(done) {
+    var serverPort = 3008;
+    var proxyPort = 3009;
+    var serverConnect = 0;
+    var proxyConnect = 0;
+    var clientRequest = 0;
+    var clientConnect = 0;
+    var clientError = 0;
+    var server;
+    var proxy;
+
+    server = https.createServer({
+      key: serverKey,
+      cert: serverCert,
+      ca: [client1CA],
+      requestCert: true,
+      rejectUnauthorized: true
+    }, function(req, res) {
+      tunnel.debug('SERVER: got request', req.url);
+      ++serverConnect;
+      req.on('data', function(data) {
+      });
+      req.on('end', function() {
+        res.writeHead(200);
+        res.end('Hello, ' + serverConnect);
+        tunnel.debug('SERVER: sending response');
+      });
+      req.resume();
+    });
+    //server.addContext('server2', {
+    //  key: serverKey,
+    //  cert: serverCert,
+    //  ca: [client1CA],
+    //});
+    server.listen(serverPort, setupProxy);
+
+    function setupProxy() {
+      proxy = https.createServer({
+        key: proxyKey,
+        cert: proxyCert,
+        ca: [client2CA],
+        requestCert: true,
+        rejectUnauthorized: true
+      }, function(req, res) {
+        should.fail();
+      });
+      //proxy.addContext('proxy2', {
+      //  key: proxyKey,
+      //  cert: proxyCert,
+      //  ca: [client2CA],
+      //});
+      proxy.on('upgrade', onConnect); // for v0.6
+      proxy.on('connect', onConnect); // for v0.7 or later
+
+      function onConnect(req, clientSocket, head) {
+        req.method.should.equal('CONNECT');
+        req.url.should.equal('localhost:' + serverPort);
+        req.headers.should.not.have.property('transfer-encoding');
+        ++proxyConnect;
+
+        var serverSocket = net.connect(serverPort, function() {
+          tunnel.debug('PROXY: replying to client CONNECT request');
+          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
+          clientSocket.pipe(serverSocket);
+          serverSocket.write(head);
+          serverSocket.pipe(clientSocket);
+          // workaround, see #2524
+          serverSocket.on('end', function() {
+            clientSocket.end();
+          });
+        });
+      }
+      proxy.listen(proxyPort, setupClient);
+    }
+
+    function setupClient() {
+      function doRequest(name, options, host) {
+        tunnel.debug('CLIENT: Making HTTPS request (%s)', name);
+        ++clientRequest;
+        var agent = tunnel.httpsOverHttps(options);
+        var req = https.get({
+          host: 'localhost',
+          port: serverPort,
+          path: '/' + encodeURIComponent(name),
+          headers: {
+            host: host ? host : 'localhost',
+          },
+          rejectUnauthorized: true,
+          agent: agent
+        }, function(res) {
+          tunnel.debug('CLIENT: got HTTPS response (%s)', name);
+          ++clientConnect;
+          res.on('data', function(data) {
+          });
+          res.on('end', function() {
+            req.emit('finish');
+          });
+          res.resume();
+        });
+        req.on('error', function(err) {
+          tunnel.debug('CLIENT: failed HTTP response (%s)', name, err);
+          ++clientError;
+          req.emit('finish');
+        });
+        req.on('finish', function() {
+          if (clientConnect + clientError === clientRequest) {
+            proxy.close();
+            server.close();
+          }
+        });
+      }
+
+      doRequest('no cert origin nor proxy', { // invalid
+        maxSockets: 1,
+        ca: [serverCA],
+        rejectUnauthorized: true,
+        // no certificate for origin server
+        proxy: {
+          port: proxyPort,
+          ca: [proxyCA],
+          rejectUnauthorized: true,
+          headers: {
+            host: 'proxy2'
+          }
+          // no certificate for proxy
+        }
+      }, 'server2');
+
+      doRequest('no cert proxy', { // invalid
+        maxSockets: 1,
+        ca: [serverCA],
+        rejectUnauthorized: true,
+        // client certification for origin server
+        key: client1Key,
+        cert: client1Cert,
+        proxy: {
+          port: proxyPort,
+          ca: [proxyCA],
+          rejectUnauthorized: true,
+          headers: {
+            host: 'proxy2'
+          }
+          // no certificate for proxy
+        }
+      }, 'server2');
+
+      doRequest('no cert origin', { // invalid
+        maxSockets: 1,
+        ca: [serverCA],
+        rejectUnauthorized: true,
+        // no certificate for origin server
+        proxy: {
+          port: proxyPort,
+          servername: 'proxy2',
+          ca: [proxyCA],
+          rejectUnauthorized: true,
+          headers: {
+            host: 'proxy2'
+          },
+          // client certification for proxy
+          key: client2Key,
+          cert: client2Cert
+        }
+      }, 'server2');
+
+      doRequest('invalid proxy server name', { // invalid
+        maxSockets: 1,
+        ca: [serverCA],
+        rejectUnauthorized: true,
+        // client certification for origin server
+        key: client1Key,
+        cert: client1Cert,
+        proxy: {
+          port: proxyPort,
+          ca: [proxyCA],
+          rejectUnauthorized: true,
+          // client certification for proxy
+          key: client2Key,
+          cert: client2Cert,
+        }
+      }, 'server2');
+
+      doRequest('invalid origin server name', { // invalid
+        maxSockets: 1,
+        ca: [serverCA],
+        rejectUnauthorized: true,
+        // client certification for origin server
+        key: client1Key,
+        cert: client1Cert,
+        proxy: {
+          port: proxyPort,
+          servername: 'proxy2',
+          ca: [proxyCA],
+          rejectUnauthorized: true,
+          headers: {
+            host: 'proxy2'
+          },
+          // client certification for proxy
+          key: client2Key,
+          cert: client2Cert
+        }
+      });
+
+      doRequest('valid', { // valid
+        maxSockets: 1,
+        ca: [serverCA],
+        rejectUnauthorized: true,
+        // client certification for origin server
+        key: client1Key,
+        cert: client1Cert,
+        proxy: {
+          port: proxyPort,
+          servername: 'proxy2',
+          ca: [proxyCA],
+          rejectUnauthorized: true,
+          headers: {
+            host: 'proxy2'
+          },
+          // client certification for proxy
+          key: client2Key,
+          cert: client2Cert
+        }
+      }, 'server2');
+    }
+
+    server.on('close', function() {
+      serverConnect.should.equal(1);
+      proxyConnect.should.equal(3);
+      clientConnect.should.equal(1);
+      clientError.should.equal(5);
+
+      done();
+    });
+  });
+});
diff --git a/setup-maven/node_modules/tunnel/test/https-over-https.js b/setup-maven/node_modules/tunnel/test/https-over-https.js
new file mode 100644
index 0000000..a9f81c8
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/https-over-https.js
@@ -0,0 +1,146 @@
+var http = require('http');
+var https = require('https');
+var net = require('net');
+var fs = require('fs');
+var path = require('path');
+var should = require('should');
+var tunnel = require('../index.js');
+
+function readPem(file) {
+  return fs.readFileSync(path.join('test/keys', file + '.pem'));
+}
+
+var serverKey = readPem('server1-key');
+var serverCert = readPem('server1-cert');
+var serverCA = readPem('ca1-cert');
+var proxyKey = readPem('proxy1-key');
+var proxyCert = readPem('proxy1-cert');
+var proxyCA = readPem('ca2-cert');
+var client1Key = readPem('client1-key');
+var client1Cert = readPem('client1-cert');
+var client1CA = readPem('ca3-cert');
+var client2Key = readPem('client2-key');
+var client2Cert = readPem('client2-cert');
+var client2CA = readPem('ca4-cert');
+
+describe('HTTPS over HTTPS', function() {
+  it('should finish without error', function(done) {
+    var serverPort = 3006;
+    var proxyPort = 3007;
+    var poolSize = 3;
+    var N = 5;
+    var serverConnect = 0;
+    var proxyConnect = 0;
+    var clientConnect = 0;
+    var server;
+    var proxy;
+    var agent;
+
+    server = https.createServer({
+      key: serverKey,
+      cert: serverCert,
+      ca: [client1CA],
+      requestCert: true,
+      rejectUnauthorized: true
+    }, function(req, res) {
+      tunnel.debug('SERVER: got request');
+      ++serverConnect;
+      res.writeHead(200);
+      res.end('Hello' + req.url);
+      tunnel.debug('SERVER: sending response');
+    });
+    server.listen(serverPort, setupProxy);
+
+    function setupProxy() {
+      proxy = https.createServer({
+        key: proxyKey,
+        cert: proxyCert,
+        ca: [client2CA],
+        requestCert: true,
+        rejectUnauthorized: true
+      }, function(req, res) {
+        should.fail();
+      });
+      proxy.on('upgrade', onConnect); // for v0.6
+      proxy.on('connect', onConnect); // for v0.7 or later
+
+      function onConnect(req, clientSocket, head) {
+        tunnel.debug('PROXY: got CONNECT request');
+        req.method.should.equal('CONNECT');
+        req.url.should.equal('localhost:' + serverPort);
+        req.headers.should.not.have.property('transfer-encoding');
+        ++proxyConnect;
+
+        var serverSocket = net.connect(serverPort, function() {
+          tunnel.debug('PROXY: replying to client CONNECT request');
+          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
+          clientSocket.pipe(serverSocket);
+          serverSocket.write(head);
+          serverSocket.pipe(clientSocket);
+          // workaround, see joyent/node#2524
+          serverSocket.on('end', function() {
+            clientSocket.end();
+          });
+        });
+      }
+      proxy.listen(proxyPort, setupClient);
+    }
+
+    function setupClient() {
+      agent = tunnel.httpsOverHttps({
+        maxSockets: poolSize,
+        // client certification for origin server
+        key: client1Key,
+        cert: client1Cert,
+        ca: [serverCA],
+        rejectUnauthroized: true,
+        proxy: {
+          port: proxyPort,
+          // client certification for proxy
+          key: client2Key,
+          cert: client2Cert,
+          ca: [proxyCA],
+          rejectUnauthroized: true
+        }
+      });
+
+      for (var i = 0; i < N; ++i) {
+        doClientRequest(i);
+      }
+
+      function doClientRequest(i) {
+        tunnel.debug('CLIENT: Making HTTPS request (%d)', i);
+        var req = https.get({
+          port: serverPort,
+          path: '/' + i,
+          agent: agent
+        }, function(res) {
+          tunnel.debug('CLIENT: got HTTPS response (%d)', i);
+          res.setEncoding('utf8');
+          res.on('data', function(data) {
+            data.should.equal('Hello/' + i);
+          });
+          res.on('end', function() {
+            ++clientConnect;
+            if (clientConnect === N) {
+              proxy.close();
+              server.close();
+            }
+          });
+        });
+      }
+    }
+
+    server.on('close', function() {
+      serverConnect.should.equal(N);
+      proxyConnect.should.equal(poolSize);
+      clientConnect.should.equal(N);
+
+      var name = 'localhost:' + serverPort;
+      agent.sockets.should.be.empty;
+      agent.requests.should.be.empty;
+  
+      done();
+    });
+  });
+});
diff --git a/setup-maven/node_modules/tunnel/test/keys/Makefile b/setup-maven/node_modules/tunnel/test/keys/Makefile
new file mode 100644
index 0000000..6b4745b
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/Makefile
@@ -0,0 +1,157 @@
+all: server1-cert.pem server2-cert.pem proxy1-cert.pem proxy2-cert.pem client1-cert.pem client2-cert.pem
+
+
+#
+# Create Certificate Authority: ca1
+# ('password' is used for the CA password.)
+#
+ca1-cert.pem: ca1.cnf
+	openssl req -new -x509 -days 9999 -config ca1.cnf -keyout ca1-key.pem -out ca1-cert.pem
+
+#
+# Create Certificate Authority: ca2
+# ('password' is used for the CA password.)
+#
+ca2-cert.pem: ca2.cnf
+	openssl req -new -x509 -days 9999 -config ca2.cnf -keyout ca2-key.pem -out ca2-cert.pem
+
+#
+# Create Certificate Authority: ca3
+# ('password' is used for the CA password.)
+#
+ca3-cert.pem: ca3.cnf
+	openssl req -new -x509 -days 9999 -config ca3.cnf -keyout ca3-key.pem -out ca3-cert.pem
+
+#
+# Create Certificate Authority: ca4
+# ('password' is used for the CA password.)
+#
+ca4-cert.pem: ca4.cnf
+	openssl req -new -x509 -days 9999 -config ca4.cnf -keyout ca4-key.pem -out ca4-cert.pem
+
+
+#
+# server1 is signed by ca1.
+#
+server1-key.pem:
+	openssl genrsa -out server1-key.pem 1024
+
+server1-csr.pem: server1.cnf server1-key.pem
+	openssl req -new -config server1.cnf -key server1-key.pem -out server1-csr.pem
+
+server1-cert.pem: server1-csr.pem ca1-cert.pem ca1-key.pem
+	openssl x509 -req \
+		-days 9999 \
+		-passin "pass:password" \
+		-in server1-csr.pem \
+		-CA ca1-cert.pem \
+		-CAkey ca1-key.pem \
+		-CAcreateserial \
+		-out server1-cert.pem
+
+#
+# server2 is signed by ca1.
+#
+server2-key.pem:
+	openssl genrsa -out server2-key.pem 1024
+
+server2-csr.pem: server2.cnf server2-key.pem
+	openssl req -new -config server2.cnf -key server2-key.pem -out server2-csr.pem
+
+server2-cert.pem: server2-csr.pem ca1-cert.pem ca1-key.pem
+	openssl x509 -req \
+		-days 9999 \
+		-passin "pass:password" \
+		-in server2-csr.pem \
+		-CA ca1-cert.pem \
+		-CAkey ca1-key.pem \
+		-CAcreateserial \
+		-out server2-cert.pem
+
+server2-verify: server2-cert.pem ca1-cert.pem
+	openssl verify -CAfile ca1-cert.pem server2-cert.pem
+
+#
+# proxy1 is signed by ca2.
+#
+proxy1-key.pem:
+	openssl genrsa -out proxy1-key.pem 1024
+
+proxy1-csr.pem: proxy1.cnf proxy1-key.pem
+	openssl req -new -config proxy1.cnf -key proxy1-key.pem -out proxy1-csr.pem
+
+proxy1-cert.pem: proxy1-csr.pem ca2-cert.pem ca2-key.pem
+	openssl x509 -req \
+		-days 9999 \
+		-passin "pass:password" \
+		-in proxy1-csr.pem \
+		-CA ca2-cert.pem \
+		-CAkey ca2-key.pem \
+		-CAcreateserial \
+		-out proxy1-cert.pem
+
+#
+# proxy2 is signed by ca2.
+#
+proxy2-key.pem:
+	openssl genrsa -out proxy2-key.pem 1024
+
+proxy2-csr.pem: proxy2.cnf proxy2-key.pem
+	openssl req -new -config proxy2.cnf -key proxy2-key.pem -out proxy2-csr.pem
+
+proxy2-cert.pem: proxy2-csr.pem ca2-cert.pem ca2-key.pem
+	openssl x509 -req \
+		-days 9999 \
+		-passin "pass:password" \
+		-in proxy2-csr.pem \
+		-CA ca2-cert.pem \
+		-CAkey ca2-key.pem \
+		-CAcreateserial \
+		-out proxy2-cert.pem
+
+proxy2-verify: proxy2-cert.pem ca2-cert.pem
+	openssl verify -CAfile ca2-cert.pem proxy2-cert.pem
+
+#
+# client1 is signed by ca3.
+#
+client1-key.pem:
+	openssl genrsa -out client1-key.pem 1024
+
+client1-csr.pem: client1.cnf client1-key.pem
+	openssl req -new -config client1.cnf -key client1-key.pem -out client1-csr.pem
+
+client1-cert.pem: client1-csr.pem ca3-cert.pem ca3-key.pem
+	openssl x509 -req \
+		-days 9999 \
+		-passin "pass:password" \
+		-in client1-csr.pem \
+		-CA ca3-cert.pem \
+		-CAkey ca3-key.pem \
+		-CAcreateserial \
+		-out client1-cert.pem
+
+#
+# client2 is signed by ca4.
+#
+client2-key.pem:
+	openssl genrsa -out client2-key.pem 1024
+
+client2-csr.pem: client2.cnf client2-key.pem
+	openssl req -new -config client2.cnf -key client2-key.pem -out client2-csr.pem
+
+client2-cert.pem: client2-csr.pem ca4-cert.pem ca4-key.pem
+	openssl x509 -req \
+		-days 9999 \
+		-passin "pass:password" \
+		-in client2-csr.pem \
+		-CA ca4-cert.pem \
+		-CAkey ca4-key.pem \
+		-CAcreateserial \
+		-out client2-cert.pem
+
+
+clean:
+	rm -f *.pem *.srl
+
+test: client-verify server2-verify proxy1-verify proxy2-verify client-verify
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent1-cert.pem b/setup-maven/node_modules/tunnel/test/keys/agent1-cert.pem
new file mode 100644
index 0000000..816f6fb
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent1-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZMCCQDQ8o4kHKdCPDANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV
+UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO
+BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMTEgMB4GCSqGSIb3DQEJARYRcnlA
+dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9
+MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK
+EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MTEgMB4G
+CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL
+ADBIAkEAnzpAqcoXZxWJz/WFK7BXwD23jlREyG11x7gkydteHvn6PrVBbB5yfu6c
+bk8w3/Ar608AcyMQ9vHjkLQKH7cjEQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAKha
+HqjCfTIut+m/idKy3AoFh48tBHo3p9Nl5uBjQJmahKdZAaiksL24Pl+NzPQ8LIU+
+FyDHFp6OeJKN6HzZ72Bh9wpBVu6Uj1hwhZhincyTXT80wtSI/BoUAW8Ls2kwPdus
+64LsJhhxqj2m4vPKNRbHB2QxnNrGi30CUf3kt3Ia
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent1-csr.pem b/setup-maven/node_modules/tunnel/test/keys/agent1-csr.pem
new file mode 100644
index 0000000..748fd00
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent1-csr.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
+EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
+EwZhZ2VudDExIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
+KoZIhvcNAQEBBQADSwAwSAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnb
+Xh75+j61QWwecn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAaAlMCMGCSqG
+SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
+AF+AfG64hNyYHum46m6i7RgnUBrJSOynGjs23TekV4he3QdMSAAPPqbll8W14+y3
+vOo7/yQ2v2uTqxCjakUNPPs=
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent1-key.pem b/setup-maven/node_modules/tunnel/test/keys/agent1-key.pem
new file mode 100644
index 0000000..5dae7eb
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent1-key.pem
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnbXh75+j61QWwe
+cn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAQJBAI2cU1IuR+4IO87WPyAB
+76kruoo87AeNQkjjvuQ/00+b/6IS45mcEP5Kw0NukbqBhIw2di9uQ9J51DJ/ZfQr
++YECIQDUHaN3ZjIdJ7/w8Yq9Zzz+3kY2F/xEz6e4ftOFW8bY2QIhAMAref+WYckC
+oECgOLAvAxB1lI4j7oCbAaawfxKdnPj5AiEAi95rXx09aGpAsBGmSdScrPdG1v6j
+83/2ebrvoZ1uFqkCIB0AssnrRVjUB6GZTNTyU3ERfdkx/RX1zvr8WkFR/lXpAiB7
+cUZ1i8ZkZrPrdVgw2cb28UJM7qZHQnXcMHTXFFvxeQ==
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent1.cnf b/setup-maven/node_modules/tunnel/test/keys/agent1.cnf
new file mode 100644
index 0000000..81d2f09
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent1.cnf
@@ -0,0 +1,19 @@
+[ req ]
+default_bits           = 1024
+days                   = 999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = US
+ST                     = CA
+L                      = SF
+O                      = Joyent
+OU                     = Node.js
+CN                     = agent1
+emailAddress           = ry@tinyclouds.org
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent2-cert.pem b/setup-maven/node_modules/tunnel/test/keys/agent2-cert.pem
new file mode 100644
index 0000000..8e4354d
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent2-cert.pem
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB7DCCAZYCCQC7gs0MDNn6MTANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJV
+UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO
+BgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEgMB4GCSqGSIb3DQEJARYR
+cnlAdGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEy
+WjB9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYD
+VQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEg
+MB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEF
+AANLADBIAkEAyXb8FrRdKbhrKLgLSsn61i1C7w7fVVVd7OQsmV/7p9WB2lWFiDlC
+WKGU9SiIz/A6wNZDUAuc2E+VwtpCT561AQIDAQABMA0GCSqGSIb3DQEBBQUAA0EA
+C8HzpuNhFLCI3A5KkBS5zHAQax6TFUOhbpBCR0aTDbJ6F1liDTK1lmU/BjvPoj+9
+1LHwrmh29rK8kBPEjmymCQ==
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent2-csr.pem b/setup-maven/node_modules/tunnel/test/keys/agent2-csr.pem
new file mode 100644
index 0000000..a670c4c
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent2-csr.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
+EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
+EwZhZ2VudDIxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
+KoZIhvcNAQEBBQADSwAwSAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf
++6fVgdpVhYg5QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAaAlMCMGCSqG
+SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
+AJnll2pt5l0pzskQSpjjLVTlFDFmJr/AZ3UK8v0WxBjYjCe5Jx4YehkChpxIyDUm
+U3J9q9MDUf0+Y2+EGkssFfk=
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent2-key.pem b/setup-maven/node_modules/tunnel/test/keys/agent2-key.pem
new file mode 100644
index 0000000..522903c
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent2-key.pem
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf+6fVgdpVhYg5
+QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAQJBAMT6Bf34+UHKY1ObpsbH
+9u2jsVblFq1rWvs8GPMY6oertzvwm3DpuSUp7PTgOB1nLTLYtCERbQ4ovtN8tn3p
+OHUCIQDzIEGsoCr5vlxXvy2zJwu+fxYuhTZWMVuo1397L0VyhwIhANQh+yzqUgaf
+WRtSB4T2W7ADtJI35ET61jKBty3CqJY3AiAIwju7dVW3A5WeD6Qc1SZGKZvp9yCb
+AFI2BfVwwaY11wIgXF3PeGcvACMyMWsuSv7aPXHfliswAbkWuzcwA4TW01ECIGWa
+cgsDvVFxmfM5NPSuT/UDTa6R5BFISB5ea0N0AR3I
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent2.cnf b/setup-maven/node_modules/tunnel/test/keys/agent2.cnf
new file mode 100644
index 0000000..0a9f2c7
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent2.cnf
@@ -0,0 +1,19 @@
+[ req ]
+default_bits           = 1024
+days                   = 999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = US
+ST                     = CA
+L                      = SF
+O                      = Joyent
+OU                     = Node.js
+CN                     = agent2
+emailAddress           = ry@tinyclouds.org
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent3-cert.pem b/setup-maven/node_modules/tunnel/test/keys/agent3-cert.pem
new file mode 100644
index 0000000..e4a2350
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent3-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZMCCQCDBr594bsJmTANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV
+UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO
+BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlA
+dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9
+MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK
+EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MzEgMB4G
+CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL
+ADBIAkEAtlNDZ+bHeBI0B2gD/IWqA7Aq1hwsnS4+XpnLesjTQcL2JwFFpkR0oWrw
+yjrYhCogi7c5gjKrLZF1d2JD5JgHgQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAJoK
+bXwsImk7vJz9649yrmsXwnuGbEKVYMvqcGyjaZNP9lYEG41y5CeRzxhWy2rlYdhE
+f2nqE2lg75oJP7LQqfQY7aCqwahM3q/GQbsfKVCGjF7TVyq9TQzd8iW+FEJIQzSE
+3aN85hR67+3VAXeSzmkGSVBO2m1SJIug4qftIkc2
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent3-csr.pem b/setup-maven/node_modules/tunnel/test/keys/agent3-csr.pem
new file mode 100644
index 0000000..e6c0c74
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent3-csr.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
+EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
+EwZhZ2VudDMxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
+KoZIhvcNAQEBBQADSwAwSAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI
+00HC9icBRaZEdKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAaAlMCMGCSqG
+SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
+AEGo76iH+a8pnE+RWQT+wg9/BL+iIuqrcFXLs0rbGonqderrwXAe15ODwql/Bfu3
+zgMt8ooTsgMPcMX9EgmubEM=
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent3-key.pem b/setup-maven/node_modules/tunnel/test/keys/agent3-key.pem
new file mode 100644
index 0000000..d72f071
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent3-key.pem
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI00HC9icBRaZE
+dKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAQJAIk+G9s2SKgFa8y3a2jGZ
+LfqABSzmJGooaIsOpLuYLd6eCC31XUDlT4rPVGRhysKQCQ4+NMjgdnj9ZqNnvXY/
+RQIhAOgbdltr3Ey2hy7RuDW5rmOeJTuVqCrZ7QI8ifyCEbYTAiEAyRfvWSvvASeP
+kZTMUhATRUpuyDQW+058NE0oJSinTpsCIQCR/FPhBGI3TcaQyA9Ym0T4GwvIAkUX
+TqInefRAAX8qSQIgZVJPAdIWGbHSL9sWW97HpukLCorcbYEtKbkamiZyrjMCIQCX
+lX76ttkeId5OsJGQcF67eFMMr2UGZ1WMf6M39lCYHQ==
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent3.cnf b/setup-maven/node_modules/tunnel/test/keys/agent3.cnf
new file mode 100644
index 0000000..26db5ba
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent3.cnf
@@ -0,0 +1,19 @@
+[ req ]
+default_bits           = 1024
+days                   = 999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = US
+ST                     = CA
+L                      = SF
+O                      = Joyent
+OU                     = Node.js
+CN                     = agent3
+emailAddress           = ry@tinyclouds.org
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent4-cert.pem b/setup-maven/node_modules/tunnel/test/keys/agent4-cert.pem
new file mode 100644
index 0000000..07157b9
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent4-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICSDCCAbGgAwIBAgIJAIMGvn3huwmaMA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNV
+BAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzANBgNVBAoTBkpveWVu
+dDEQMA4GA1UECxMHTm9kZS5qczEMMAoGA1UEAxMDY2EyMSAwHgYJKoZIhvcNAQkB
+FhFyeUB0aW55Y2xvdWRzLm9yZzAeFw0xMTAzMTQxODI5MTJaFw0zODA3MjkxODI5
+MTJaMH0xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzAN
+BgNVBAoTBkpveWVudDEQMA4GA1UECxMHTm9kZS5qczEPMA0GA1UEAxMGYWdlbnQ0
+MSAwHgYJKoZIhvcNAQkBFhFyeUB0aW55Y2xvdWRzLm9yZzBcMA0GCSqGSIb3DQEB
+AQUAA0sAMEgCQQDN/yMfmQ8zdvmjlGk7b3Mn6wY2FjaMb4c5ENJX15vyYhKS1zhx
+6n0kQIn2vf6yqG7tO5Okz2IJiD9Sa06mK6GrAgMBAAGjFzAVMBMGA1UdJQQMMAoG
+CCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4GBAA8FXpRmdrHBdlofNvxa14zLvv0N
+WnUGUmxVklFLKXvpVWTanOhVgI2TDCMrT5WvCRTD25iT1EUKWxjDhFJrklQJ+IfC
+KC6fsgO7AynuxWSfSkc8/acGiAH+20vW9QxR53HYiIDMXEV/wnE0KVcr3t/d70lr
+ImanTrunagV+3O4O
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent4-csr.pem b/setup-maven/node_modules/tunnel/test/keys/agent4-csr.pem
new file mode 100644
index 0000000..97e115d
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent4-csr.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
+EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
+EwZhZ2VudDQxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
+KoZIhvcNAQEBBQADSwAwSAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfX
+m/JiEpLXOHHqfSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAaAlMCMGCSqG
+SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
+AMzo7GUOBtGm5MSck1rrEE2C1bU3qoVvXVuiN3A/57zXeNeq24FZMLnkDeL9U+/b
+Kj646XFou04gla982Xp74p0=
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent4-key.pem b/setup-maven/node_modules/tunnel/test/keys/agent4-key.pem
new file mode 100644
index 0000000..b770b01
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent4-key.pem
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfXm/JiEpLXOHHq
+fSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAQJAN8RQb+dx1A7rejtdWbfM
+Rww7PD07Oz2eL/a72wgFsdIabRuVypIoHunqV0sAegYtNJt9yu+VhREw0R5tx/qz
+EQIhAPY+nmzp0b4iFRk7mtGUmCTr9iwwzoqzITwphE7FpQnFAiEA1ihUHFT9YPHO
+f85skM6qZv77NEgXHO8NJmQZ5GX1ZK8CICzle+Mluo0tD6W7HV4q9pZ8wzSJbY8S
+W/PpKetm09F1AiAWTw8sAGKAtc/IGo3Oq+iuYAN1F8lolzJsfGMCGujsOwIgAJKP
+t3eXilwX3ZlsDWSklWNZ7iYcfYrvAc3JqU6gFCE=
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/agent4.cnf b/setup-maven/node_modules/tunnel/test/keys/agent4.cnf
new file mode 100644
index 0000000..5e583eb
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/agent4.cnf
@@ -0,0 +1,21 @@
+[ req ]
+default_bits           = 1024
+days                   = 999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = US
+ST                     = CA
+L                      = SF
+O                      = Joyent
+OU                     = Node.js
+CN                     = agent4
+emailAddress           = ry@tinyclouds.org
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
+[ ext_key_usage ]
+extendedKeyUsage       = clientAuth
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca1-cert.pem b/setup-maven/node_modules/tunnel/test/keys/ca1-cert.pem
new file mode 100644
index 0000000..640c084
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca1-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICIzCCAYwCCQC4ONZJx5BOwjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
+CgYDVQQDEwNjYTExJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
+anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJMS1ug8jUu0wwEfD4h9/Mg
+w0fvs7JbpMxtwpdcFpg/6ECd8YzGUvljLzeHPe2AhF26MiWIUN3YTxZRiQQ2tv93
+afRVWchdPypytmuxv2aYGjhZ66Tv4vNRizM71OE+66+KS30gEQW2k4MTr0ZVlRPR
+OVey+zRSLdVaKciB/XaBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEApfbly4b+Ry1q
+bGIgGrlTvNFvF+j2RuHqSpuTB4nKyw1tbNreKmEEb6SBEfkjcTONx5rKECZ5RRPX
+z4R/o1G6Dn21ouf1pWQO0BC/HnLN30KvvsoZRoxBn/fqBlJA+j/Kpj3RQgFj6l2I
+AKI5fD+ucPqRGhjmmTsNyc+Ln4UfAq8=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca1-cert.srl b/setup-maven/node_modules/tunnel/test/keys/ca1-cert.srl
new file mode 100644
index 0000000..d7f4b79
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca1-cert.srl
@@ -0,0 +1 @@
+B111C9CEF0257692
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca1-key.pem b/setup-maven/node_modules/tunnel/test/keys/ca1-key.pem
new file mode 100644
index 0000000..aaa58ae
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca1-key.pem
@@ -0,0 +1,17 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIbo5wvG42IY0CAggA
+MBQGCCqGSIb3DQMHBAgf8SPuz4biYASCAoAR4r8MVikusOAEt4Xp6nB7whrMX4iG
+G792Qpf21nHZPMV73w3cdkfimbAfUn8F50tSJwdrAa8U9BjjpL9Kt0loIyXt/r8c
+6PWAQ4WZuLPgTFUTJUNAXrunBHI0iFWYEN4YzJYmT1qN3J4u0diy0MkKz6eJPfZ3
+3v97+nF7dR2H86ZgLKsuE4pO5IRb60XW85d7CYaY6rU6l6mXMF0g9sIccHTlFoet
+Xm6cA7NAm1XSI1ciYcoc8oaVE9dXoOALaTnBEZ2MJGpsYQ0Hr7kB4VKAO9wsOta5
+L9nXPv79Nzo1MZMChkrORFnwOzH4ffsUwVQ70jUzkt5DEyzCM1oSxFNRQESxnFrr
+7c1jLg2gxAVwnqYo8njsKJ23BZqZUxHsBgB2Mg1L/iPT6zhclD0u3RZx9MR4ezB2
+IqoCF19Z5bblkReAeVRAE9Ol4hKVaCEIIPUspcw7eGVGONalHDCSXpIFnJoZLeXJ
+OZjLmYlA6KkJw52eNE5IwIb8l/tha2fwNpRvlMoXp65yH9wKyJk8zPSM6WAk4dKD
+nLrTCK4KtM6aIbG14Mff6WEf3uaLPM0cLwxmuypfieCZfkIzgytNdFZoBgaYUpon
+zazvUMoy3gqDBorcU08SaosdRoL+s+QVkRhA29shf42lqOM4zbh0dTul4QDlLG0U
+VBNeMJ3HnrqATfBU28j3bUqtuF2RffgcN/3ivlBjcyzF/iPt0TWmm6Zz5v4K8+b6
+lOm6gofIz+ffg2cXfPzrqZ2/xhFkcerRuN0Xp5eAhlI2vGJVGuEc4X+tT7VtQgLV
+iovqzlLhp+ph/gsfCcsYZ9iso3ozw+Cx1HfJ8XT7yWUgXxblkt4uszEo
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca1.cnf b/setup-maven/node_modules/tunnel/test/keys/ca1.cnf
new file mode 100644
index 0000000..dcb0637
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca1.cnf
@@ -0,0 +1,17 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+output_password        = password
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = ca1
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca2-cert.pem b/setup-maven/node_modules/tunnel/test/keys/ca2-cert.pem
new file mode 100644
index 0000000..4c29c87
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca2-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICIzCCAYwCCQCxIhZSDET+8DANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
+CgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
+anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaaLMMe7K5eYABH3NnJoimG
+LvY4S5tdGF6YRwfkn1bgGa+kEw1zNqa/Y0jSzs4h7bApt3+bKTalR4+Zk+0UmWgZ
+Gvlq8+mdqDXtBKoWE3vYDPBmeNyKsgxf9UIhFOpsxVUeYP8t66qJyUk/FlFJcDqc
+WPawikl1bUFSZXBKu4PxAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAwh3sXPIkA5kn
+fpg7fV5haS4EpFr9ia61dzWbhXDZtasAx+nWdWqgG4T+HIYSLlMNZbGJ998uhFZf
+DEHlbY/WuSBukZ0w+xqKBtPyjLIQKVvNiaTx5YMzQes62R1iklOXzBzyHbYIxFOG
+dqLfIjEe/mVVoR23LN2tr8Wa6+rmd+w=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca2-cert.srl b/setup-maven/node_modules/tunnel/test/keys/ca2-cert.srl
new file mode 100644
index 0000000..2749952
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca2-cert.srl
@@ -0,0 +1 @@
+9BF2D4B2E00EDF16
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca2-crl.pem b/setup-maven/node_modules/tunnel/test/keys/ca2-crl.pem
new file mode 100644
index 0000000..166df74
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca2-crl.pem
@@ -0,0 +1,10 @@
+-----BEGIN X509 CRL-----
+MIIBXTCBxzANBgkqhkiG9w0BAQQFADB6MQswCQYDVQQGEwJVUzELMAkGA1UECBMC
+Q0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUu
+anMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5v
+cmcXDTExMDMxNDE4MjkxNloXDTEzMTIwNzE4MjkxNlowHDAaAgkAgwa+feG7CZoX
+DTExMDMxNDE4MjkxNFowDQYJKoZIhvcNAQEEBQADgYEArRKuEkOla61fm4zlZtHe
+LTXFV0Hgo21PScHAp6JqPol4rN5R9+EmUkv7gPCVVBJ9VjIgxSosHiLsDiz3zR+u
+txHemhzbdIVANAIiChnFct8sEqH2eL4N6XNUIlMIR06NjNl7NbN8w8haqiearnuT
+wmnaL4TThPmpbpKAF7N7JqQ=
+-----END X509 CRL-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca2-database.txt b/setup-maven/node_modules/tunnel/test/keys/ca2-database.txt
new file mode 100644
index 0000000..a0966d2
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca2-database.txt
@@ -0,0 +1 @@
+R	380729182912Z	110314182914Z	8306BE7DE1BB099A	unknown	/C=US/ST=CA/L=SF/O=Joyent/OU=Node.js/CN=agent4/emailAddress=ry@tinyclouds.org
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca2-key.pem b/setup-maven/node_modules/tunnel/test/keys/ca2-key.pem
new file mode 100644
index 0000000..9cea659
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca2-key.pem
@@ -0,0 +1,17 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI3aq9fKZIOF0CAggA
+MBQGCCqGSIb3DQMHBAjyunMfVve0OwSCAoAdMsrRFlQUSILw+bq3cSVIIbFjwcs0
+B1Uz2rc9SB+1qjsazjv4zvPQSXTrsx2EOSJf9PSPz7r+c0NzO9vfWLorpXof/lwL
+C1tRN7/1OqEW/mTK+1wlv0M5C4cmf44BBXmI+y+RWrQ/qc+CWEMvfHwv9zWr2K+i
+cLlZv55727GvZYCMMVLiqYd/Ejj98loBsE5dhN4JJ5MPaN3UHhFTCpD453GIIzCi
+FRuYhOOtX4qYoEuP2db4S2qu26723ZJnYBEHkK2YZiRrgvoZHugyGIr4f/RRoSUI
+fPgycgQfL3Ow+Y1G533PiZ+CYgh9cViUzhZImEPiZpSuUntAD1loOYkJuV9Ai9XZ
++t6+7tfkM3aAo1bkaU8KcfINxxNWfAhCbUQw+tGJl2A+73OM5AGjGSfzjQQL/FOa
+5omfEvdfEX2XyRRlqnQ2VucvSTL9ZdzbIJGg/euJTpM44Fwc7yAZv2aprbPoPixu
+yyf0LoTjlGGSBZvHkunpWx82lYEXvHhcnCxV5MDFw8wehvDrvcSuzb8//HzLOiOB
+gzUr3DOQk4U1UD6xixZjAKC+NUwTVZoHg68KtmQfkq+eGUWf5oJP4xUigi3ui/Wy
+OCBDdlRBkFtgLGL51KJqtq1ixx3Q9HMl0y6edr5Ls0unDIo0LtUWUUcAtr6wl+kK
+zSztxFMi2zTtbhbkwoVpucNstFQNfV1k22vtnlcux2FV2DdZiJQwYpIbr8Gj6gpK
+gtV5l9RFe21oZBcKPt/chrF8ayiClfGMpF3D2p2GqGCe0HuH5uM/JAFf60rbnriA
+Nu1bWiXsXLRUXcLIQ/uEPR3Mvvo9k1h4Q6it1Rp67eQiXCX6h2uFq+sB
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca2-serial b/setup-maven/node_modules/tunnel/test/keys/ca2-serial
new file mode 100644
index 0000000..8a0f05e
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca2-serial
@@ -0,0 +1 @@
+01
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca2.cnf b/setup-maven/node_modules/tunnel/test/keys/ca2.cnf
new file mode 100644
index 0000000..46e8274
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca2.cnf
@@ -0,0 +1,17 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+output_password        = password
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = ca2
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca3-cert.pem b/setup-maven/node_modules/tunnel/test/keys/ca3-cert.pem
new file mode 100644
index 0000000..02b3f7a
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca3-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICIzCCAYwCCQCudHFhEWiUHDANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
+CgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
+anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJPRJMhCNtxX6dQ3rLdrzVCl
+XJMSRIICpbsc7arOzSJcrsIYeYC4d29dGwxYNLnAkKSmHujFT9SmFgh88CoYETLp
+gE9zCk9hVCwUlWelM/UaIrzeLT4SC3VBptnLmMtk2mqFniLcaFdMycAcX8OIhAgG
+fbqyT5Wxwz7UMegip2ZjAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEADpu8a/W+NPnS
+mhyIOxXn8O//2oH9ELlBYFLIgTid0xmS05x/MgkXtWqiBEEZFoOfoJBJxM3vTFs0
+PiZvcVjv0IIjDF4s54yRVH+4WI2p7cil1fgzAVRTuOIuR+VyN7ct8s26a/7GFDq6
+NJMByyjsJHyxwwri5hVv+jbLCxmnDjI=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca3-cert.srl b/setup-maven/node_modules/tunnel/test/keys/ca3-cert.srl
new file mode 100644
index 0000000..cfd39e1
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca3-cert.srl
@@ -0,0 +1 @@
+EF7B2CF0FA61DF41
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca3-key.pem b/setup-maven/node_modules/tunnel/test/keys/ca3-key.pem
new file mode 100644
index 0000000..8931132
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca3-key.pem
@@ -0,0 +1,17 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIwAta+L4c9soCAggA
+MBQGCCqGSIb3DQMHBAgqRud2p3SvogSCAoDXoDJOJDkvgFpQ6rxeV5r0fLX4SrGJ
+quv4yt02QxSDUPN2ZLtBt6bLzg4Zv2pIggufYJcZ2IOUnX82T7FlvBP8hbW1q3Bs
+jAso7z8kJlFrZjNudjuP2l/X8tjrVyr3I0PoRoomtcHnCcSDdyne8Dqqj1enuikF
+8b7FZUqocNLfu8LmNGxMmMwjw3UqhtpP5DjqV60B8ytQFPoz/gFh6aNGvsrD/avU
+Dj8EJkQZP6Q32vmCzAvSiLjk7FA7RFmBtaurE9hJYNlc5v1eo69EUwPkeVlTpglJ
+5sZAHxlhQCgc72ST6uFQKiMO3ng/JJA5N9EvacYSHQvI1TQIo43V2A//zUh/5hGL
+sDv4pRuFq9miX8iiQpwo1LDfRzdwg7+tiLm8/mDyeLUSzDNc6GIX/tC9R4Ukq4ge
+1Cfq0gtKSRxZhM8HqpGBC9rDs5mpdUqTRsoHLFn5T6/gMiAtrLCJxgD8JsZBa8rM
+KZ09QEdZXTvpyvZ8bSakP5PF6Yz3QYO32CakL7LDPpCng0QDNHG10YaZbTOgJIzQ
+NJ5o87DkgDx0Bb3L8FoREIBkjpYFbQi2fvPthoepZ3D5VamVsOwOiZ2sR1WF2J8l
+X9c8GdG38byO+SQIPNZ8eT5JvUcNeSlIZiVSwvaEk496d2KzhmMMfoBLFVeHXG90
+CIZPleVfkTmgNQgXPWcFngqTZdDEGsHjEDDhbEAijB3EeOxyiiEDJPMy5zqkdy5D
+cZ/Y77EDbln7omcyL+cGvCgBhhYpTbtbuBtzW4CiCvcfEB5N4EtJKOTRJXIpL/d3
+oVnZruqRRKidKwFMEZU2NZJX5FneAWFSeCv0IrY2vAUIc3El+n84CFFK
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca3.cnf b/setup-maven/node_modules/tunnel/test/keys/ca3.cnf
new file mode 100644
index 0000000..7b2378a
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca3.cnf
@@ -0,0 +1,17 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+output_password        = password
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = ca3
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca4-cert.pem b/setup-maven/node_modules/tunnel/test/keys/ca4-cert.pem
new file mode 100644
index 0000000..ed0686a
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca4-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICIzCCAYwCCQDUGh2r7lOpITANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
+CgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
+anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOOC+SPC8XzkjIHfKPMzzNV6
+O/LpqQWdzJtEvFNW0oQ9g8gSV4iKqwUFrLNnSlwSGigvqKqGmYtG8S17ANWInoxI
+c3sQlrS2cGbgLUBNKu4hZ7s+11EPOjbnn0QUE5w9GN8fy8CDx7ID/8URYKoxcoRv
+0w7EJ2agfd68KS1ayxUXAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAumPFeR63Dyki
+SWQtRAe2QWkIFlSRAR2PvSDdsDMLwMeXF5wD3Hv51yfTu9Gkg0QJB86deYfQ5vfV
+4QsOQ35icesa12boyYpTE0/OoEX1f/s1sLlszpRvtAki3J4bkcGWAzM5yO1fKqpQ
+MbtPzLn+DA7ymxuJa6EQAEb+kaJEBuU=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca4-cert.srl b/setup-maven/node_modules/tunnel/test/keys/ca4-cert.srl
new file mode 100644
index 0000000..5c11314
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca4-cert.srl
@@ -0,0 +1 @@
+B01FE0416A2EDCF5
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca4-key.pem b/setup-maven/node_modules/tunnel/test/keys/ca4-key.pem
new file mode 100644
index 0000000..fa7aca1
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca4-key.pem
@@ -0,0 +1,17 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIWE/ri/feeikCAggA
+MBQGCCqGSIb3DQMHBAiu6hUzoFnsVASCAoC53ZQ4gxLcFnb5yAcdCl4DdKOJ5m4G
+CHosR87pJpZlO68DsCKwORUp9tTmb1/Q4Wm9n2kRf6VQNyVVm6REwzEPAgIJEgy2
+FqLmfqpTElbRsQako8UDXjDjaMO30e+Qhy8HOTrHMJZ6LgrU90xnOCPPeN9fYmIu
+YBkX4qewUfu+wFzk/unUbFLChvJsEN4fdrlDwTJMHRzKwbdvg3mHlCnspWwjA2Mc
+q27QPeb3mwRUajmqL0dT9y7wVYeAN2zV59VoWm6zV+dWFgyMlVrVCRYkqQC3xOsy
+ZlKrGldrY8nNdv5s6+Sc7YavTJiJxHgIB7sm6QFIsdqjxTBEGD4/YhEI52SUw/xO
+VJmOTWdWUz4FdWNi7286nfhZ0+mdv6fUoG54Qv6ahnUMJvEsp60LkR1gHXLzQu/m
++yDZFqY/IIg2QA7M3gL0Md5GrWydDlD2uBPoXcC4A5gfOHswzHWDKurDCpoMqdpn
+CUQ/ZVl2rwF8Pnty61MjY1xCN1r8xQjFBCgcfBWw5v6sNRbr/vef3TfQIBzVm+hx
+akDb1nckBsIjMT9EfeT6hXub2n0oehEHewF1COifbcOjnxToLSswPLrtb0behB+o
+zTgftn+4XrkY0sFY69TzYtQVMLAsiWTpZFvAi+D++2pXlQ/bnxKJiBBc6kZuAGpN
+z+cJ4kUuFE4S9v5C5vK89nIgcuJT06u8wYTy0N0j/DnIjSaVgGr0Y0841mXtU1VV
+wUZjuyYrVwVT/g5r6uzEFldTcjmYkbMaxo+MYnEZZgqYJvu2QlK87YxJOwo+D1NX
+4gl1s/bmlPlGw/t9TxutI3S9PEr3JM3013e9UPE+evlTG9IIrZaUPzyj
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/ca4.cnf b/setup-maven/node_modules/tunnel/test/keys/ca4.cnf
new file mode 100644
index 0000000..ceac8f3
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/ca4.cnf
@@ -0,0 +1,17 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+output_password        = password
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = ca4
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/client.cnf b/setup-maven/node_modules/tunnel/test/keys/client.cnf
new file mode 100644
index 0000000..e3db741
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client.cnf
@@ -0,0 +1,16 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = localhost
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/client1-cert.pem b/setup-maven/node_modules/tunnel/test/keys/client1-cert.pem
new file mode 100644
index 0000000..24ea1db
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client1-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKTCCAZICCQDveyzw+mHfQTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw
+EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92
+ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYUuKyuxT93zvrS
+mL8IMI8xu8dP3iRZDUYu6dmq6Dntgb7intfzxtEFVmfNCDGwJwg7UKx/FzftGxFb
+9LksuvAQuW2FLhCrOmXUVU938OZkQRSflISD80kd4i9JEoKKYPX1imjaMugIQ0ta
+Bq2orY6sna8JAUVDW6WO3wVEJ4mBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAAbaH
+bc/6dIFC9TPIDrgsLtsOtycdBJqKbFT1wThhyKncXF/iyaI+8N4UA+hXMjk8ODUl
+BVmmgaN6ufMLwnx/Gdl9FLmmDq4FQ4zspClTJo42QPzg5zKoPSw5liy73LM7z+nG
+g6IeM8RFlEbs109YxqvQnbHfTgeLdIsdvtNXU80=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/client1-csr.pem b/setup-maven/node_modules/tunnel/test/keys/client1-csr.pem
new file mode 100644
index 0000000..c33a135
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client1-csr.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES
+MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv
+dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGFLisrsU/d876
+0pi/CDCPMbvHT94kWQ1GLunZqug57YG+4p7X88bRBVZnzQgxsCcIO1Csfxc37RsR
+W/S5LLrwELlthS4Qqzpl1FVPd/DmZEEUn5SEg/NJHeIvSRKCimD19Ypo2jLoCENL
+WgatqK2OrJ2vCQFFQ1uljt8FRCeJgQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg
+Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAB5NvNSHX+WDlF5R
+LNr7SI2NzIy5OWEAgTxLkvS0NS75zlDLScaqwgs1uNfB2AnH0Fpw9+pePEijlb+L
+3VRLNpV8hRn5TKztlS3O0Z4PPb7hlDHitXukTOQYrq0juQacodVSgWqNbac+O2yK
+qf4Y3A7kQO1qmDOfN6QJFYVIpPiP
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/client1-key.pem b/setup-maven/node_modules/tunnel/test/keys/client1-key.pem
new file mode 100644
index 0000000..52aff97
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client1-key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDGFLisrsU/d8760pi/CDCPMbvHT94kWQ1GLunZqug57YG+4p7X
+88bRBVZnzQgxsCcIO1Csfxc37RsRW/S5LLrwELlthS4Qqzpl1FVPd/DmZEEUn5SE
+g/NJHeIvSRKCimD19Ypo2jLoCENLWgatqK2OrJ2vCQFFQ1uljt8FRCeJgQIDAQAB
+AoGAbfcM+xjfejeqGYcWs175jlVe2OyW93jUrLTYsDV4TMh08iLfaiX0pw+eg2vI
+88TGNoSvacP4gNzJ3R4+wxp5AFlRKZ876yL7D0VKavMFwbyRk21+D/tLGvW6gqOC
+4qi4IWSkfgBh5RK+o4jZcl5tzRPQyuxR3pJGBS33q5K2dEECQQDhV4NuKZcGDnKt
+1AhmtzqsJ4wrp2a3ysZYDTWyA692NGXi2Vnpnc6Aw9JchJhT3cueFLcOTFrb/ttu
+ZC/iA67pAkEA4Qe7LvcPvHlwNAmzqzOg2lYAqq+aJY2ghfJMqr3dPCJqbHJnLN6p
+GXsqGngwVlnvso0O/n5g30UmzvkRMFZW2QJAbOMQy0alh3OrzntKo/eeDln9zYpS
+hDUjqqCXdbF6M7AWG4vTeqOaiXYWTEZ2JPBj17tCyVH0BaIc/jbDPH9zIQJBALei
+YH0l/oB2tTqyBB2cpxIlhqvDW05z8d/859WZ1PVivGg9P7cdCO+TU7uAAyokgHe7
+ptXFefYZb18NX5qLipkCQHjIo4BknrO1oisfsusWcCC700aRIYIDk0QyEEIAY3+9
+7ar/Oo1EbqWA/qN7zByPuTKrjrb91/D+IMFUFgb4RWc=
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/client1.cnf b/setup-maven/node_modules/tunnel/test/keys/client1.cnf
new file mode 100644
index 0000000..e3db741
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client1.cnf
@@ -0,0 +1,16 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = localhost
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/client2-cert.pem b/setup-maven/node_modules/tunnel/test/keys/client2-cert.pem
new file mode 100644
index 0000000..f0de53c
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client2-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKTCCAZICCQCwH+BBai7c9TANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw
+EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92
+ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMJQGt34PZX5pQmi
+3bNp3dryr7qPO3oGhTeShLCeZ6PPCdnmVl0PnT0n8/DFBlaijbvXGU9AjcFZ7gg7
+hcSAFLGmPEb2pug021yzl7u0qUD2fnVaEzfJ04ZU4lUCFqGKsfFVQuIkDHFwadbE
+AO+8EqOmDynUMkKfHPWQK6O9jt5ZAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA143M
+QIygJGDv2GFKlVgV05/CYZo6ouX9I6vPRekJnGeL98lmVH83Ogb7Xmc2SbJ18qFq
+naBYnUEmHPUAZ2Ms2KuV3OOvscUSCsEJ4utJYznOT8PsemxVWrgG1Ba+zpnPkdII
+p+PanKCsclNUKwBlSkJ8XfGi9CAZJBykwws3O1c=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/client2-csr.pem b/setup-maven/node_modules/tunnel/test/keys/client2-csr.pem
new file mode 100644
index 0000000..b7507f4
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client2-csr.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES
+MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv
+dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCUBrd+D2V+aUJ
+ot2zad3a8q+6jzt6BoU3koSwnmejzwnZ5lZdD509J/PwxQZWoo271xlPQI3BWe4I
+O4XEgBSxpjxG9qboNNtcs5e7tKlA9n51WhM3ydOGVOJVAhahirHxVULiJAxxcGnW
+xADvvBKjpg8p1DJCnxz1kCujvY7eWQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg
+Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAA//UPKPpVEpflDj
+DBboWewa6yw8FEOnMvh6eeg/a8KbXfIYnkZRtxbmH06ygywBy/RUBCbM5EzyElkJ
+bTVKorzCHnxuTfSnKQ68ZD+vI2SNjiWqQFXW6oOCPzLbtaTJVKw5D6ylBp8Zsu6n
+BzQ/4Y42aX/HW4nfJeDydxNFYVJJ
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/client2-key.pem b/setup-maven/node_modules/tunnel/test/keys/client2-key.pem
new file mode 100644
index 0000000..ecb616e
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client2-key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQDCUBrd+D2V+aUJot2zad3a8q+6jzt6BoU3koSwnmejzwnZ5lZd
+D509J/PwxQZWoo271xlPQI3BWe4IO4XEgBSxpjxG9qboNNtcs5e7tKlA9n51WhM3
+ydOGVOJVAhahirHxVULiJAxxcGnWxADvvBKjpg8p1DJCnxz1kCujvY7eWQIDAQAB
+AoGAbiT0JdCaMFIzb/PnEdU30e1xGSIpx7C8gNTH7EnOW7d3URHU8KlyKwFjsJ4u
+SpuYFdsG2Lqx3+D3IamD2O/1SgODmtdFas1C/hQ2zx42SgyBQolVJU1MHJxHqmCb
+nm2Wo8aHmvFXpQ8OF4YJLPxLOSdvmq0PC17evDyjz5PciWUCQQD5yzaBpJ7yzGwd
+b6nreWj6pt+jfi11YsA3gAdvTJcFzMGyNNC+U9OExjQqHsyaHyxGhHKQ6y+ybZkR
+BggkudPfAkEAxyQC/hmcvWegdGI4xOJNbm0kv8UyxyeqhtgzEW2hWgEQs4k3fflZ
+iNpvxyIBIp/7zZo02YqeQfZlDYuxKypUxwJAa6jQBzRCZXcBqfY0kA611kIR5U8+
+nHdBTSpbCfdCp/dGDF6DEWTjpzgdx4GawVpqJMJ09kzHM+nUrOeinuGQlQJAMAsV
+Gb6OHPfaMxnbPkymh6SXQBjQNlHwhxWzxFmhmrg1EkthcufsXOLuIqmmgnb8Zc71
+PyJ9KcbK/GieNp7A0wJAIz3Mm3Up9Rlk25TH9k5e3ELjC6fkd93u94Uo145oTgDm
+HSbCbjifP5eVl66PztxZppG2GBXiXT0hA/RMruTQMg==
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/client2.cnf b/setup-maven/node_modules/tunnel/test/keys/client2.cnf
new file mode 100644
index 0000000..e3db741
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/client2.cnf
@@ -0,0 +1,16 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = localhost
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy1-cert.pem b/setup-maven/node_modules/tunnel/test/keys/proxy1-cert.pem
new file mode 100644
index 0000000..30851fe
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy1-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKTCCAZICCQCb8tSy4A7fFTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw
+EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92
+ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALiUyeosVxtJK8G4
+sAqU2DBLx5sMuZpV/YcW/YxUuJv3t/9TpVxcWAs6VRPzi5fqKe8TER8qxi1/I8zV
+Qks1gWyZ01reU6Wpdt1MZguF036W2qKOxlJXvnqnRDWu9IFf6KMjSJjFZb6nqhQv
+aiL/80hqc2qXVfuJbSYlGrKWFFINAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEABPIn
++vQoDpJx7lVNJNOe7DE+ShCXCK6jkQY8+GQXB1sz5K0OWdZxUWOOp/fcjNJua0NM
+hgnylWu/pmjPh7c9xHdZhuh6LPD3F0k4QqK+I2rg45gdBPZT2IxEvxNYpGIfayvY
+ofOgbienn69tMzGCMF/lUmEJu7Bn08EbL+OyNBg=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy1-csr.pem b/setup-maven/node_modules/tunnel/test/keys/proxy1-csr.pem
new file mode 100644
index 0000000..78ad220
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy1-csr.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES
+MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv
+dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4lMnqLFcbSSvB
+uLAKlNgwS8ebDLmaVf2HFv2MVLib97f/U6VcXFgLOlUT84uX6invExEfKsYtfyPM
+1UJLNYFsmdNa3lOlqXbdTGYLhdN+ltqijsZSV756p0Q1rvSBX+ijI0iYxWW+p6oU
+L2oi//NIanNql1X7iW0mJRqylhRSDQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg
+Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAFhZc2cvYGf8mCg/
+5nPWmnjNIqgy7uJnOGfE3AP4rW48yiVHCJK9ZmPogbH7gBMOBrrX8fLX3ThK9Sbj
+uJlBlZD/19zjM+kvJ14DcievJ15S3KehVQ6Ipmgbz/vnAaL1D+ZiOnjQad2/Fzg4
+0MFXQaZFEUcI8fKnv/zmYi1aivej
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy1-key.pem b/setup-maven/node_modules/tunnel/test/keys/proxy1-key.pem
new file mode 100644
index 0000000..d06fddd
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy1-key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC4lMnqLFcbSSvBuLAKlNgwS8ebDLmaVf2HFv2MVLib97f/U6Vc
+XFgLOlUT84uX6invExEfKsYtfyPM1UJLNYFsmdNa3lOlqXbdTGYLhdN+ltqijsZS
+V756p0Q1rvSBX+ijI0iYxWW+p6oUL2oi//NIanNql1X7iW0mJRqylhRSDQIDAQAB
+AoGADPSkl4M1Of0QzTAhaxy3b+xhvkhOXr7aZLkAYvEvZAMnLwy39puksmUNw7C8
+g5U0DEvST9W4w0jBQodVd+Hxi4dUS4BLDVVStaLMa1Fjai/4uBPxbsrvdHzDu7if
+BI6t12vWNNRtTxbfCJ1Fs3nHvDG0ueBZX3fYWBIPPM4bRQECQQDjmCrxbkfFrN5z
+JXHfmzoNovV7KzgwRLKOLF17dYnhaG3G77JYjhEjIg5VXmQ8XJrwS45C/io5feFA
+qrsy/0v1AkEAz55QK8CLue+sn0J8Yw//yLjJT6BK4pCFFKDxyAvP/3r4t7+1TgDj
+KAfUMWb5Hcn9iT3sEykUeOe0ghU0h5X2uQJBAKES2qGPuP/vvmejwpnMVCO+hxmq
+ltOiavQv9eEgaHq826SFk6UUtpA01AwbB7momIckEgTbuKqDql2H94C6KdkCQQC7
+PfrtyoP5V8dmBk8qBEbZ3pVn45dFx7LNzOzhTo3yyhO/m/zGcZRsCMt9FnI7RG0M
+tjTPfvAArm8kFj2+vie5AkASvVx478N8so+02QWKme4T3ZDX+HDBXgFH1+SMD91m
+9tS6x2dtTNvvwBA2KFI1fUg3B/wDoKJQRrqwdl8jpoGP
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy1.cnf b/setup-maven/node_modules/tunnel/test/keys/proxy1.cnf
new file mode 100644
index 0000000..e3db741
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy1.cnf
@@ -0,0 +1,16 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = localhost
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy2-cert.pem b/setup-maven/node_modules/tunnel/test/keys/proxy2-cert.pem
new file mode 100644
index 0000000..dfe9d8e
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy2-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICJjCCAY8CCQCb8tSy4A7fFjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBZMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQ8w
+DQYDVQQDEwZwcm94eTIxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1l
+bnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZ3oNCmB2P4Q9DoUVFq
+Z1ByASLm63jTPEumv2kX81GF5QMLRl59HBM6Te1rRR7wFHL0iBQUYuEzNPmedXpU
+cds0uWl5teoO63ZSKFL1QLU3PMFo56AeWeznxOhy6vwWv3M8C391X6lYsiBow3K9
+d37p//GLIR+jl6Q4xYD41zaxAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEADUQgtmot
+8zqsRQInjWAypcntkxX8hdUOEudN2/zjX/YtMZbr8rRvsZzBsUDdgK+E2EmEb/N3
+9ARZ0T2zWFFphJapkZOM1o1+LawN5ON5HfTPqr6d9qlHuRdGCBpXMUERO2V43Z+S
+Zwm+iw1yZEs4buTmiw6zu6Nq0fhBlTiAweE=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy2-csr.pem b/setup-maven/node_modules/tunnel/test/keys/proxy2-csr.pem
new file mode 100644
index 0000000..5510e7f
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy2-csr.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBvjCCAScCAQAwWTELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDEP
+MA0GA1UEAxMGcHJveHkyMSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJvdmVt
+ZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2d6DQpgdj+EPQ6FFR
+amdQcgEi5ut40zxLpr9pF/NRheUDC0ZefRwTOk3ta0Ue8BRy9IgUFGLhMzT5nnV6
+VHHbNLlpebXqDut2UihS9UC1NzzBaOegHlns58Tocur8Fr9zPAt/dV+pWLIgaMNy
+vXd+6f/xiyEfo5ekOMWA+Nc2sQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEgY2hh
+bGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBADC4dh/+gQnJcPMQ0riJ
+CBVLygcCWxkNvwM3ARboyihuNbzFX1f2g23Zr5iLphiuEFCPDOyd26hHieQ8Xo1y
+FPuDXpWMx9X9MLjCWg8kdtada7HsYffbUvpjjL9TxFh+rX0cmr6Ixc5kV7AV4I6V
+3h8BYJebX+XfuYrI1UwEqjqI
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy2-key.pem b/setup-maven/node_modules/tunnel/test/keys/proxy2-key.pem
new file mode 100644
index 0000000..29eed2c
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy2-key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC2d6DQpgdj+EPQ6FFRamdQcgEi5ut40zxLpr9pF/NRheUDC0Ze
+fRwTOk3ta0Ue8BRy9IgUFGLhMzT5nnV6VHHbNLlpebXqDut2UihS9UC1NzzBaOeg
+Hlns58Tocur8Fr9zPAt/dV+pWLIgaMNyvXd+6f/xiyEfo5ekOMWA+Nc2sQIDAQAB
+AoGBALPH0o9Bxu5c4pSnEdgh+oFskmoNE90MY9A2D0pA6uBcCHSjW0YmBs97FuTi
+WExPSBarkJgYLgStK3j3A9Dv+uzRRT0gSr34vKFh5ozI+nJZOMNJyHDOCFiT9sm7
+urDW0gSq9OW/H8NbAkxkBZw0PaB9oW5nljuieVIFDYXNAeMBAkEA6NfBHjzp3GS0
+RbtaBkxn3CRlEoUUPVd3sJ6lW2XBu5AWrgNHRSlh0oBupXgd3cxWIB69xPOg6QjU
+XmvcLjBlCQJBAMidTIw4s89m4+14eY/KuXaEgxW/awLEbQP2JDCjY1wT3Ya3Ggac
+HIFuGdTbd2faJPxNJjoljZnatSdwY5aXFmkCQBQZM5FBnsooYys1vdKXW8uz1Imh
+tRqKZ0l2mD1obi2bhWml3MwKg2ghL+vWj3VqwvBo1uaeRQB4g6RW2R2fjckCQQCf
+FnZ0oCafa2WGlMo5qDbI8K6PGXv/9srIoHH0jC0oAKzkvuEJqtTEIw6jCOM43PoF
+hhyxccRH5PNRckPXULs5AkACxKEL1dN+Bx72zE8jSU4DB5arpQdGOvuVsqXgVM/5
+QLneJEHGPCqNFS1OkWUYLtX0S28X5GmHMEpLRLpgE9JY
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/proxy2.cnf b/setup-maven/node_modules/tunnel/test/keys/proxy2.cnf
new file mode 100644
index 0000000..e62c90a
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/proxy2.cnf
@@ -0,0 +1,16 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = proxy2
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/server1-cert.pem b/setup-maven/node_modules/tunnel/test/keys/server1-cert.pem
new file mode 100644
index 0000000..d0b6430
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server1-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKTCCAZICCQCxEcnO8CV2kTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw
+EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92
+ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALYb3z6TVgD8VmV2
+i0IHoes/HNVz+/UgXxRoA7gTUXp4Q69HBymWwm4fG61YMn7XAjy0gyC2CX/C0S74
+ZzHkhq1DCXCtlXCDx5oZhSRPpa902MVdDSRR+naLA4PPFkV2pI53hsFW37M5Dhge
++taFbih/dbjpOnhLD+SbkSKNTw/dAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAjDNi
+mdmMM8Of/8iCYISqkqCG+7fz747Ntkg5fVMPufkwrBfkD9UjYVbfIpEOkZ3L0If9
+0/wNi0uZobIJnd/9B/e0cHKYnx0gkhUpMylaRvIV4odKe2vq3+mjwMb9syYXYDx3
+hw2qDMIIPr0S5ICeoIKXhbsYtODVxKSdJq+FjAI=
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/server1-csr.pem b/setup-maven/node_modules/tunnel/test/keys/server1-csr.pem
new file mode 100644
index 0000000..9d9ff1b
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server1-csr.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES
+MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv
+dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2G98+k1YA/FZl
+dotCB6HrPxzVc/v1IF8UaAO4E1F6eEOvRwcplsJuHxutWDJ+1wI8tIMgtgl/wtEu
++Gcx5IatQwlwrZVwg8eaGYUkT6WvdNjFXQ0kUfp2iwODzxZFdqSOd4bBVt+zOQ4Y
+HvrWhW4of3W46Tp4Sw/km5EijU8P3QIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg
+Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAJLLYClTc1BZbQi4
+2GrGEimzJoheXXD1vepECS6TaeYJFSQldMGdkn5D8TMXWW115V4hw7a1pCwvRBPH
+dVEeh3u3ktI1e4pS5ozvpbpYanILrHCNOQ4PvKi9rzG9Km8CprPcrJCZlWf2QUBK
+gVNgqZJeqyEcBu80/ajjc6xrZsSP
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/server1-key.pem b/setup-maven/node_modules/tunnel/test/keys/server1-key.pem
new file mode 100644
index 0000000..d24acc8
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server1-key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC2G98+k1YA/FZldotCB6HrPxzVc/v1IF8UaAO4E1F6eEOvRwcp
+lsJuHxutWDJ+1wI8tIMgtgl/wtEu+Gcx5IatQwlwrZVwg8eaGYUkT6WvdNjFXQ0k
+Ufp2iwODzxZFdqSOd4bBVt+zOQ4YHvrWhW4of3W46Tp4Sw/km5EijU8P3QIDAQAB
+AoGAcDioz+T3gM//ZbMxidUuQMu5twgsYhg6v1aBxDOTaEcoXqEElupikn31DlNl
+eqiApmwOyl+jZunlAm7tGN/c5WjmZtW6watv1D7HjDIFJQBdiOv2jLeV5gsoArMP
+f8Y13MS68nJ7/ZkqisovjBlD7ZInbyUiJj0FH/cazauflIECQQDwHgQ0J46eL5EG
+3smQQG9/8b/Wsnf8s9Vz6X/KptsbL3c7mCBY9/+cGw0xVxoUOyO7KGPzpRhtz4Y0
+oP+JwISxAkEAwieUtl+SuUAn6er1tZzPPiAM2w6XGOAod+HuPjTAKVhLKHYIEJbU
+jhPdjOGtZr10ED9g0m7M4n3JKMMM00W47QJBAOVkp7tztwpkgva/TG0lQeBHgnCI
+G50t6NRN1Koz8crs88nZMb4NXwMxzM7AWcfOH/qjQan4pXfy9FG/JaHibGECQH8i
+L+zj1E3dxsUTh+VuUv5ZOlHO0f4F+jnWBY1SOWpZWI2cDFfgjDqko3R26nbWI8Pn
+3FyvFRZSS4CXiDRn+VkCQQCKPBl60QAifkZITqL0dCs+wB2hhmlWwqlpq1ZgeCby
+zwmZY1auUK1BYBX1aPB85+Bm2Zhp5jnkwRcO7iSYy8+C
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/server1.cnf b/setup-maven/node_modules/tunnel/test/keys/server1.cnf
new file mode 100644
index 0000000..e3db741
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server1.cnf
@@ -0,0 +1,16 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = localhost
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/server2-cert.pem b/setup-maven/node_modules/tunnel/test/keys/server2-cert.pem
new file mode 100644
index 0000000..ba92620
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server2-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICJzCCAZACCQCxEcnO8CV2kjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
+UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B
+CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
+NTEwMTEyMzIxWjBaMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRAw
+DgYDVQQDEwdzZXJ2ZXIyMSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJvdmVt
+ZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEkKr9SHG6jtf5UNfL
+u66wNi8jrbAW5keYy7ECWRGRFDE7ay4N8LDMmOO3/1eH2WpY0QM5JFxq78hoVQED
+ogvoeVTw+Ni33yqY6VL2WRv84FN2BmCrDGJQ83EYdsJqPUnxuXvbmq7Viw3l/BEu
+hvsp722KcToIrqt8mHKMc/nPRwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBALbdQz32
+CN0hJfJ6BtGyqee3zRSpufPY1KFV8OHSDG4qL55OfpjB5e5wsldp3VChTWzm2KM+
+xg9WSWurMINM5KLgUqCZ69ttg1gJ/SnZNolXhH0I3SG/DY4DGTHo9oJPoSrgrWbX
+3ZmCoO6rrDoSuVRJ8dKMWJmt8O1pZ6ZRW2iM
+-----END CERTIFICATE-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/server2-csr.pem b/setup-maven/node_modules/tunnel/test/keys/server2-csr.pem
new file mode 100644
index 0000000..f89c510
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server2-csr.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBvzCCASgCAQAwWjELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDEQ
+MA4GA1UEAxMHc2VydmVyMjElMCMGCSqGSIb3DQEJARYWa29pY2hpa0BpbXByb3Zl
+bWVudC5qcDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxJCq/Uhxuo7X+VDX
+y7uusDYvI62wFuZHmMuxAlkRkRQxO2suDfCwzJjjt/9Xh9lqWNEDOSRcau/IaFUB
+A6IL6HlU8PjYt98qmOlS9lkb/OBTdgZgqwxiUPNxGHbCaj1J8bl725qu1YsN5fwR
+Lob7Ke9tinE6CK6rfJhyjHP5z0cCAwEAAaAlMCMGCSqGSIb3DQEJBzEWExRBIGNo
+YWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAAOBgQB3rCGCErgshGKEI5j9
+togUBwD3ul91yRFSBoV2hVGXsTOalWa0XCI+9+5QQEOBlj1pUT8eDU8ve55mX1UX
+AZEx+cbUQa9DNeiDAMX83GqHMD8fF2zqsY1mkg5zFKG3nhoIYSG15qXcpqAhxRpX
+NUQnZ4yzt2pE0aiFfkXa3PM42Q==
+-----END CERTIFICATE REQUEST-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/server2-key.pem b/setup-maven/node_modules/tunnel/test/keys/server2-key.pem
new file mode 100644
index 0000000..9f72b5c
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server2-key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDEkKr9SHG6jtf5UNfLu66wNi8jrbAW5keYy7ECWRGRFDE7ay4N
+8LDMmOO3/1eH2WpY0QM5JFxq78hoVQEDogvoeVTw+Ni33yqY6VL2WRv84FN2BmCr
+DGJQ83EYdsJqPUnxuXvbmq7Viw3l/BEuhvsp722KcToIrqt8mHKMc/nPRwIDAQAB
+AoGAQ/bRaGoYCK1DN80gEC2ApSTW/7saW5CbyNUFCw7I6CTXMPhKID/MobFraz86
+gJpIDxWVy7gqzD7ESG67vwnUm52ITojQiY3JH7NCNhq/39/aYZOz2d7rBv2mvhk3
+w7gxUsmtPVUz3s2/h1KYaGpM3b68TwMS9nIiwwHDJS1aR8ECQQDu/kOy+Z/0EVKC
+APgiEzbxewAiy7BVzNppd8CR/5m1KxlsIoMr8OdLqVwiJ/13m3eZGkPNx5pLJ9Xv
+sXER0ZcPAkEA0o19xA1AJ/v5qsRaWJaA+ftgQ8ZanqsWXhM9abAvkPdFLPKYWTfO
+r9f8eUDH0+O9mA2eZ2mlsEcsmIHDTY6ESQJAO2lyIvfzT5VO0Yq0JKRqMDXHnt7M
+A0hds4JVmPXVnDgOpdcejLniheigQs12MVmwrZrd6DYKoUxR3rhZx3g2+QJBAK/2
+5fuaI1sHP+HSlbrhlUrWJd6egA+I5nma1MFmKGqb7Kki2eX+OPNGq87eL+LKuyG/
+h/nfFkTbRs7x67n+eFkCQQCPgy381Vpa7lmoNUfEVeMSNe74FNL05IlPDs/BHcci
+1GX9XzsFEqHLtJ5t1aWbGv39gb2WmPP3LJBsRPzLa2iQ
+-----END RSA PRIVATE KEY-----
diff --git a/setup-maven/node_modules/tunnel/test/keys/server2.cnf b/setup-maven/node_modules/tunnel/test/keys/server2.cnf
new file mode 100644
index 0000000..bfaa48b
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/server2.cnf
@@ -0,0 +1,16 @@
+[ req ]
+default_bits           = 1024
+days                   = 9999
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+
+[ req_distinguished_name ]
+C                      = JP
+OU                     = nodejs_jp
+CN                     = server2
+emailAddress           = koichik@improvement.jp
+
+[ req_attributes ]
+challengePassword              = A challenge password
+
diff --git a/setup-maven/node_modules/tunnel/test/keys/test.js b/setup-maven/node_modules/tunnel/test/keys/test.js
new file mode 100644
index 0000000..d828422
--- /dev/null
+++ b/setup-maven/node_modules/tunnel/test/keys/test.js
@@ -0,0 +1,43 @@
+var fs = require('fs');
+var tls = require('tls');
+
+var server1Key = fs.readFileSync(__dirname + '/server1-key.pem');
+var server1Cert = fs.readFileSync(__dirname + '/server1-cert.pem');
+var clientKey = fs.readFileSync(__dirname + '/client-key.pem');
+var clientCert = fs.readFileSync(__dirname + '/client-cert.pem');
+var ca1Cert = fs.readFileSync(__dirname + '/ca1-cert.pem');
+var ca3Cert = fs.readFileSync(__dirname + '/ca3-cert.pem');
+
+var server = tls.createServer({
+  key: server1Key,
+  cert: server1Cert,
+  ca: [ca3Cert],
+  requestCert: true,
+  rejectUnauthorized: true,
+}, function(s) {
+  console.log('connected on server');
+  s.on('data', function(chunk) {
+    console.log('S:' + chunk);
+    s.write(chunk);
+  });
+  s.setEncoding('utf8');
+}).listen(3000, function() {
+  var c = tls.connect({
+    host: 'localhost',
+    port: 3000,
+    key: clientKey,
+    cert: clientCert,
+    ca: [ca1Cert],
+    rejectUnauthorized: true
+  }, function() {
+    console.log('connected on client');
+    c.on('data', function(chunk) {
+      console.log('C:' + chunk);
+    });
+    c.setEncoding('utf8');
+    c.write('Hello');
+  });
+  c.on('error', function(err) {
+    console.log(err);
+  });
+});
diff --git a/setup-maven/node_modules/typed-rest-client/Handlers.d.ts b/setup-maven/node_modules/typed-rest-client/Handlers.d.ts
new file mode 100644
index 0000000..780935d
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Handlers.d.ts
@@ -0,0 +1,4 @@
+export { BasicCredentialHandler } from "./handlers/basiccreds";
+export { BearerCredentialHandler } from "./handlers/bearertoken";
+export { NtlmCredentialHandler } from "./handlers/ntlm";
+export { PersonalAccessTokenCredentialHandler } from "./handlers/personalaccesstoken";
diff --git a/setup-maven/node_modules/typed-rest-client/Handlers.js b/setup-maven/node_modules/typed-rest-client/Handlers.js
new file mode 100644
index 0000000..0b9e040
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Handlers.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var basiccreds_1 = require("./handlers/basiccreds");
+exports.BasicCredentialHandler = basiccreds_1.BasicCredentialHandler;
+var bearertoken_1 = require("./handlers/bearertoken");
+exports.BearerCredentialHandler = bearertoken_1.BearerCredentialHandler;
+var ntlm_1 = require("./handlers/ntlm");
+exports.NtlmCredentialHandler = ntlm_1.NtlmCredentialHandler;
+var personalaccesstoken_1 = require("./handlers/personalaccesstoken");
+exports.PersonalAccessTokenCredentialHandler = personalaccesstoken_1.PersonalAccessTokenCredentialHandler;
diff --git a/setup-maven/node_modules/typed-rest-client/HttpClient.d.ts b/setup-maven/node_modules/typed-rest-client/HttpClient.d.ts
new file mode 100644
index 0000000..f5cd014
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/HttpClient.d.ts
@@ -0,0 +1,103 @@
+/// <reference types="node" />
+import url = require("url");
+import http = require("http");
+import ifm = require('./Interfaces');
+export declare enum HttpCodes {
+    OK = 200,
+    MultipleChoices = 300,
+    MovedPermanently = 301,
+    ResourceMoved = 302,
+    SeeOther = 303,
+    NotModified = 304,
+    UseProxy = 305,
+    SwitchProxy = 306,
+    TemporaryRedirect = 307,
+    PermanentRedirect = 308,
+    BadRequest = 400,
+    Unauthorized = 401,
+    PaymentRequired = 402,
+    Forbidden = 403,
+    NotFound = 404,
+    MethodNotAllowed = 405,
+    NotAcceptable = 406,
+    ProxyAuthenticationRequired = 407,
+    RequestTimeout = 408,
+    Conflict = 409,
+    Gone = 410,
+    InternalServerError = 500,
+    NotImplemented = 501,
+    BadGateway = 502,
+    ServiceUnavailable = 503,
+    GatewayTimeout = 504,
+}
+export declare class HttpClientResponse implements ifm.IHttpClientResponse {
+    constructor(message: http.IncomingMessage);
+    message: http.IncomingMessage;
+    readBody(): Promise<string>;
+}
+export interface RequestInfo {
+    options: http.RequestOptions;
+    parsedUrl: url.Url;
+    httpModule: any;
+}
+export declare function isHttps(requestUrl: string): boolean;
+export declare class HttpClient implements ifm.IHttpClient {
+    userAgent: string;
+    handlers: ifm.IRequestHandler[];
+    requestOptions: ifm.IRequestOptions;
+    private _ignoreSslError;
+    private _socketTimeout;
+    private _httpProxy;
+    private _httpProxyBypassHosts;
+    private _allowRedirects;
+    private _maxRedirects;
+    private _allowRetries;
+    private _maxRetries;
+    private _agent;
+    private _proxyAgent;
+    private _keepAlive;
+    private _disposed;
+    private _certConfig;
+    private _ca;
+    private _cert;
+    private _key;
+    constructor(userAgent: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions);
+    options(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    get(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    del(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    post(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    patch(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    put(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    head(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    /**
+     * Makes a raw http request.
+     * All other methods such as get, post, patch, and request ultimately call this.
+     * Prefer get, del, post and patch
+     */
+    request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
+    /**
+     * Needs to be called if keepAlive is set to true in request options.
+     */
+    dispose(): void;
+    /**
+     * Raw request.
+     * @param info
+     * @param data
+     */
+    requestRaw(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream): Promise<ifm.IHttpClientResponse>;
+    /**
+     * Raw request with callback.
+     * @param info
+     * @param data
+     * @param onResult
+     */
+    requestRawWithCallback(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: ifm.IHttpClientResponse) => void): void;
+    private _prepareRequest(method, requestUrl, headers);
+    private _isPresigned(requestUrl);
+    private _mergeHeaders(headers);
+    private _getAgent(requestUrl);
+    private _getProxy(requestUrl);
+    private _isBypassProxy(requestUrl);
+    private _performExponentialBackoff(retryNumber);
+}
diff --git a/setup-maven/node_modules/typed-rest-client/HttpClient.js b/setup-maven/node_modules/typed-rest-client/HttpClient.js
new file mode 100644
index 0000000..169b8f7
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/HttpClient.js
@@ -0,0 +1,455 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const url = require("url");
+const http = require("http");
+const https = require("https");
+let fs;
+let tunnel;
+var HttpCodes;
+(function (HttpCodes) {
+    HttpCodes[HttpCodes["OK"] = 200] = "OK";
+    HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
+    HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
+    HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
+    HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
+    HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
+    HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
+    HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
+    HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+    HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
+    HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
+    HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
+    HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
+    HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
+    HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
+    HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
+    HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
+    HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
+    HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
+    HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
+    HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
+    HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
+    HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
+    HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
+    HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
+    HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
+})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
+const HttpRedirectCodes = [HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect];
+const HttpResponseRetryCodes = [HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout];
+const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
+const ExponentialBackoffCeiling = 10;
+const ExponentialBackoffTimeSlice = 5;
+class HttpClientResponse {
+    constructor(message) {
+        this.message = message;
+    }
+    readBody() {
+        return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+            let output = '';
+            this.message.on('data', (chunk) => {
+                output += chunk;
+            });
+            this.message.on('end', () => {
+                resolve(output);
+            });
+        }));
+    }
+}
+exports.HttpClientResponse = HttpClientResponse;
+function isHttps(requestUrl) {
+    let parsedUrl = url.parse(requestUrl);
+    return parsedUrl.protocol === 'https:';
+}
+exports.isHttps = isHttps;
+var EnvironmentVariables;
+(function (EnvironmentVariables) {
+    EnvironmentVariables["HTTP_PROXY"] = "HTTP_PROXY";
+    EnvironmentVariables["HTTPS_PROXY"] = "HTTPS_PROXY";
+})(EnvironmentVariables || (EnvironmentVariables = {}));
+class HttpClient {
+    constructor(userAgent, handlers, requestOptions) {
+        this._ignoreSslError = false;
+        this._allowRedirects = true;
+        this._maxRedirects = 50;
+        this._allowRetries = false;
+        this._maxRetries = 1;
+        this._keepAlive = false;
+        this._disposed = false;
+        this.userAgent = userAgent;
+        this.handlers = handlers || [];
+        this.requestOptions = requestOptions;
+        if (requestOptions) {
+            if (requestOptions.ignoreSslError != null) {
+                this._ignoreSslError = requestOptions.ignoreSslError;
+            }
+            this._socketTimeout = requestOptions.socketTimeout;
+            this._httpProxy = requestOptions.proxy;
+            if (requestOptions.proxy && requestOptions.proxy.proxyBypassHosts) {
+                this._httpProxyBypassHosts = [];
+                requestOptions.proxy.proxyBypassHosts.forEach(bypass => {
+                    this._httpProxyBypassHosts.push(new RegExp(bypass, 'i'));
+                });
+            }
+            this._certConfig = requestOptions.cert;
+            if (this._certConfig) {
+                // If using cert, need fs
+                fs = require('fs');
+                // cache the cert content into memory, so we don't have to read it from disk every time 
+                if (this._certConfig.caFile && fs.existsSync(this._certConfig.caFile)) {
+                    this._ca = fs.readFileSync(this._certConfig.caFile, 'utf8');
+                }
+                if (this._certConfig.certFile && fs.existsSync(this._certConfig.certFile)) {
+                    this._cert = fs.readFileSync(this._certConfig.certFile, 'utf8');
+                }
+                if (this._certConfig.keyFile && fs.existsSync(this._certConfig.keyFile)) {
+                    this._key = fs.readFileSync(this._certConfig.keyFile, 'utf8');
+                }
+            }
+            if (requestOptions.allowRedirects != null) {
+                this._allowRedirects = requestOptions.allowRedirects;
+            }
+            if (requestOptions.maxRedirects != null) {
+                this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
+            }
+            if (requestOptions.keepAlive != null) {
+                this._keepAlive = requestOptions.keepAlive;
+            }
+            if (requestOptions.allowRetries != null) {
+                this._allowRetries = requestOptions.allowRetries;
+            }
+            if (requestOptions.maxRetries != null) {
+                this._maxRetries = requestOptions.maxRetries;
+            }
+        }
+    }
+    options(requestUrl, additionalHeaders) {
+        return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
+    }
+    get(requestUrl, additionalHeaders) {
+        return this.request('GET', requestUrl, null, additionalHeaders || {});
+    }
+    del(requestUrl, additionalHeaders) {
+        return this.request('DELETE', requestUrl, null, additionalHeaders || {});
+    }
+    post(requestUrl, data, additionalHeaders) {
+        return this.request('POST', requestUrl, data, additionalHeaders || {});
+    }
+    patch(requestUrl, data, additionalHeaders) {
+        return this.request('PATCH', requestUrl, data, additionalHeaders || {});
+    }
+    put(requestUrl, data, additionalHeaders) {
+        return this.request('PUT', requestUrl, data, additionalHeaders || {});
+    }
+    head(requestUrl, additionalHeaders) {
+        return this.request('HEAD', requestUrl, null, additionalHeaders || {});
+    }
+    sendStream(verb, requestUrl, stream, additionalHeaders) {
+        return this.request(verb, requestUrl, stream, additionalHeaders);
+    }
+    /**
+     * Makes a raw http request.
+     * All other methods such as get, post, patch, and request ultimately call this.
+     * Prefer get, del, post and patch
+     */
+    request(verb, requestUrl, data, headers) {
+        return __awaiter(this, void 0, void 0, function* () {
+            if (this._disposed) {
+                throw new Error("Client has already been disposed.");
+            }
+            let info = this._prepareRequest(verb, requestUrl, headers);
+            // Only perform retries on reads since writes may not be idempotent.
+            let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1;
+            let numTries = 0;
+            let response;
+            while (numTries < maxTries) {
+                response = yield this.requestRaw(info, data);
+                // Check if it's an authentication challenge
+                if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
+                    let authenticationHandler;
+                    for (let i = 0; i < this.handlers.length; i++) {
+                        if (this.handlers[i].canHandleAuthentication(response)) {
+                            authenticationHandler = this.handlers[i];
+                            break;
+                        }
+                    }
+                    if (authenticationHandler) {
+                        return authenticationHandler.handleAuthentication(this, info, data);
+                    }
+                    else {
+                        // We have received an unauthorized response but have no handlers to handle it.
+                        // Let the response return to the caller.
+                        return response;
+                    }
+                }
+                let redirectsRemaining = this._maxRedirects;
+                while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1
+                    && this._allowRedirects
+                    && redirectsRemaining > 0) {
+                    const redirectUrl = response.message.headers["location"];
+                    if (!redirectUrl) {
+                        // if there's no location to redirect to, we won't
+                        break;
+                    }
+                    // we need to finish reading the response before reassigning response
+                    // which will leak the open socket.
+                    yield response.readBody();
+                    // let's make the request with the new redirectUrl
+                    info = this._prepareRequest(verb, redirectUrl, headers);
+                    response = yield this.requestRaw(info, data);
+                    redirectsRemaining--;
+                }
+                if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
+                    // If not a retry code, return immediately instead of retrying
+                    return response;
+                }
+                numTries += 1;
+                if (numTries < maxTries) {
+                    yield response.readBody();
+                    yield this._performExponentialBackoff(numTries);
+                }
+            }
+            return response;
+        });
+    }
+    /**
+     * Needs to be called if keepAlive is set to true in request options.
+     */
+    dispose() {
+        if (this._agent) {
+            this._agent.destroy();
+        }
+        this._disposed = true;
+    }
+    /**
+     * Raw request.
+     * @param info
+     * @param data
+     */
+    requestRaw(info, data) {
+        return new Promise((resolve, reject) => {
+            let callbackForResult = function (err, res) {
+                if (err) {
+                    reject(err);
+                }
+                resolve(res);
+            };
+            this.requestRawWithCallback(info, data, callbackForResult);
+        });
+    }
+    /**
+     * Raw request with callback.
+     * @param info
+     * @param data
+     * @param onResult
+     */
+    requestRawWithCallback(info, data, onResult) {
+        let socket;
+        let isDataString = typeof (data) === 'string';
+        if (typeof (data) === 'string') {
+            info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8');
+        }
+        let callbackCalled = false;
+        let handleResult = (err, res) => {
+            if (!callbackCalled) {
+                callbackCalled = true;
+                onResult(err, res);
+            }
+        };
+        let req = info.httpModule.request(info.options, (msg) => {
+            let res = new HttpClientResponse(msg);
+            handleResult(null, res);
+        });
+        req.on('socket', (sock) => {
+            socket = sock;
+        });
+        // If we ever get disconnected, we want the socket to timeout eventually
+        req.setTimeout(this._socketTimeout || 3 * 60000, () => {
+            if (socket) {
+                socket.end();
+            }
+            handleResult(new Error('Request timeout: ' + info.options.path), null);
+        });
+        req.on('error', function (err) {
+            // err has statusCode property
+            // res should have headers
+            handleResult(err, null);
+        });
+        if (data && typeof (data) === 'string') {
+            req.write(data, 'utf8');
+        }
+        if (data && typeof (data) !== 'string') {
+            data.on('close', function () {
+                req.end();
+            });
+            data.pipe(req);
+        }
+        else {
+            req.end();
+        }
+    }
+    _prepareRequest(method, requestUrl, headers) {
+        const info = {};
+        info.parsedUrl = url.parse(requestUrl);
+        const usingSsl = info.parsedUrl.protocol === 'https:';
+        info.httpModule = usingSsl ? https : http;
+        const defaultPort = usingSsl ? 443 : 80;
+        info.options = {};
+        info.options.host = info.parsedUrl.hostname;
+        info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort;
+        info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
+        info.options.method = method;
+        info.options.headers = this._mergeHeaders(headers);
+        info.options.headers["user-agent"] = this.userAgent;
+        info.options.agent = this._getAgent(requestUrl);
+        // gives handlers an opportunity to participate
+        if (this.handlers && !this._isPresigned(requestUrl)) {
+            this.handlers.forEach((handler) => {
+                handler.prepareRequest(info.options);
+            });
+        }
+        return info;
+    }
+    _isPresigned(requestUrl) {
+        if (this.requestOptions && this.requestOptions.presignedUrlPatterns) {
+            const patterns = this.requestOptions.presignedUrlPatterns;
+            for (let i = 0; i < patterns.length; i++) {
+                if (requestUrl.match(patterns[i])) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    _mergeHeaders(headers) {
+        const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {});
+        if (this.requestOptions && this.requestOptions.headers) {
+            return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
+        }
+        return lowercaseKeys(headers || {});
+    }
+    _getAgent(requestUrl) {
+        let agent;
+        let proxy = this._getProxy(requestUrl);
+        let useProxy = proxy.proxyUrl && proxy.proxyUrl.hostname && !this._isBypassProxy(requestUrl);
+        if (this._keepAlive && useProxy) {
+            agent = this._proxyAgent;
+        }
+        if (this._keepAlive && !useProxy) {
+            agent = this._agent;
+        }
+        // if agent is already assigned use that agent.
+        if (!!agent) {
+            return agent;
+        }
+        let parsedUrl = url.parse(requestUrl);
+        const usingSsl = parsedUrl.protocol === 'https:';
+        let maxSockets = 100;
+        if (!!this.requestOptions) {
+            maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
+        }
+        if (useProxy) {
+            // If using proxy, need tunnel
+            if (!tunnel) {
+                tunnel = require('tunnel');
+            }
+            const agentOptions = {
+                maxSockets: maxSockets,
+                keepAlive: this._keepAlive,
+                proxy: {
+                    proxyAuth: proxy.proxyAuth,
+                    host: proxy.proxyUrl.hostname,
+                    port: proxy.proxyUrl.port
+                },
+            };
+            let tunnelAgent;
+            const overHttps = proxy.proxyUrl.protocol === 'https:';
+            if (usingSsl) {
+                tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
+            }
+            else {
+                tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
+            }
+            agent = tunnelAgent(agentOptions);
+            this._proxyAgent = agent;
+        }
+        // if reusing agent across request and tunneling agent isn't assigned create a new agent
+        if (this._keepAlive && !agent) {
+            const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
+            agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
+            this._agent = agent;
+        }
+        // if not using private agent and tunnel agent isn't setup then use global agent
+        if (!agent) {
+            agent = usingSsl ? https.globalAgent : http.globalAgent;
+        }
+        if (usingSsl && this._ignoreSslError) {
+            // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
+            // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
+            // we have to cast it to any and change it directly
+            agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false });
+        }
+        if (usingSsl && this._certConfig) {
+            agent.options = Object.assign(agent.options || {}, { ca: this._ca, cert: this._cert, key: this._key, passphrase: this._certConfig.passphrase });
+        }
+        return agent;
+    }
+    _getProxy(requestUrl) {
+        const parsedUrl = url.parse(requestUrl);
+        let usingSsl = parsedUrl.protocol === 'https:';
+        let proxyConfig = this._httpProxy;
+        // fallback to http_proxy and https_proxy env
+        let https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY];
+        let http_proxy = process.env[EnvironmentVariables.HTTP_PROXY];
+        if (!proxyConfig) {
+            if (https_proxy && usingSsl) {
+                proxyConfig = {
+                    proxyUrl: https_proxy
+                };
+            }
+            else if (http_proxy) {
+                proxyConfig = {
+                    proxyUrl: http_proxy
+                };
+            }
+        }
+        let proxyUrl;
+        let proxyAuth;
+        if (proxyConfig) {
+            if (proxyConfig.proxyUrl.length > 0) {
+                proxyUrl = url.parse(proxyConfig.proxyUrl);
+            }
+            if (proxyConfig.proxyUsername || proxyConfig.proxyPassword) {
+                proxyAuth = proxyConfig.proxyUsername + ":" + proxyConfig.proxyPassword;
+            }
+        }
+        return { proxyUrl: proxyUrl, proxyAuth: proxyAuth };
+    }
+    _isBypassProxy(requestUrl) {
+        if (!this._httpProxyBypassHosts) {
+            return false;
+        }
+        let bypass = false;
+        this._httpProxyBypassHosts.forEach(bypassHost => {
+            if (bypassHost.test(requestUrl)) {
+                bypass = true;
+            }
+        });
+        return bypass;
+    }
+    _performExponentialBackoff(retryNumber) {
+        retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
+        const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
+        return new Promise(resolve => setTimeout(() => resolve(), ms));
+    }
+}
+exports.HttpClient = HttpClient;
diff --git a/setup-maven/node_modules/typed-rest-client/Index.d.ts b/setup-maven/node_modules/typed-rest-client/Index.d.ts
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Index.d.ts
diff --git a/setup-maven/node_modules/typed-rest-client/Index.js b/setup-maven/node_modules/typed-rest-client/Index.js
new file mode 100644
index 0000000..c8ad2e5
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Index.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/setup-maven/node_modules/typed-rest-client/Interfaces.d.ts b/setup-maven/node_modules/typed-rest-client/Interfaces.d.ts
new file mode 100644
index 0000000..5900e26
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Interfaces.d.ts
@@ -0,0 +1,62 @@
+/// <reference types="node" />
+import http = require("http");
+import url = require("url");
+export interface IHeaders {
+    [key: string]: any;
+}
+export interface IBasicCredentials {
+    username: string;
+    password: string;
+}
+export interface IHttpClient {
+    options(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
+    get(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
+    del(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
+    post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
+    patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
+    put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
+    sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
+    request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise<IHttpClientResponse>;
+    requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise<IHttpClientResponse>;
+    requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void;
+}
+export interface IRequestHandler {
+    prepareRequest(options: http.RequestOptions): void;
+    canHandleAuthentication(response: IHttpClientResponse): boolean;
+    handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs: any): Promise<IHttpClientResponse>;
+}
+export interface IHttpClientResponse {
+    message: http.IncomingMessage;
+    readBody(): Promise<string>;
+}
+export interface IRequestInfo {
+    options: http.RequestOptions;
+    parsedUrl: url.Url;
+    httpModule: any;
+}
+export interface IRequestOptions {
+    headers?: IHeaders;
+    socketTimeout?: number;
+    ignoreSslError?: boolean;
+    proxy?: IProxyConfiguration;
+    cert?: ICertConfiguration;
+    allowRedirects?: boolean;
+    maxRedirects?: number;
+    maxSockets?: number;
+    keepAlive?: boolean;
+    presignedUrlPatterns?: RegExp[];
+    allowRetries?: boolean;
+    maxRetries?: number;
+}
+export interface IProxyConfiguration {
+    proxyUrl: string;
+    proxyUsername?: string;
+    proxyPassword?: string;
+    proxyBypassHosts?: string[];
+}
+export interface ICertConfiguration {
+    caFile?: string;
+    certFile?: string;
+    keyFile?: string;
+    passphrase?: string;
+}
diff --git a/setup-maven/node_modules/typed-rest-client/Interfaces.js b/setup-maven/node_modules/typed-rest-client/Interfaces.js
new file mode 100644
index 0000000..2bc6be2
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Interfaces.js
@@ -0,0 +1,5 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+;
diff --git a/setup-maven/node_modules/typed-rest-client/LICENSE b/setup-maven/node_modules/typed-rest-client/LICENSE
new file mode 100644
index 0000000..8cddf7e
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/LICENSE
@@ -0,0 +1,21 @@
+Typed Rest Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+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/setup-maven/node_modules/typed-rest-client/README.md b/setup-maven/node_modules/typed-rest-client/README.md
new file mode 100644
index 0000000..0c2b768
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/README.md
@@ -0,0 +1,100 @@
+[![Build Status](https://dev.azure.com/ms/typed-rest-client/_apis/build/status/Microsoft.typed-rest-client?branchName=master)](https://dev.azure.com/ms/typed-rest-client/_build/latest?definitionId=42&branchName=master)
+
+# Typed REST and HTTP Client with TypeScript Typings
+
+A lightweight REST and HTTP client optimized for use with TypeScript with generics and async await.
+
+## Features
+
+  - REST and HTTP client with TypeScript generics and async/await/Promises
+  - Typings included so no need to acquire separately (great for intellisense and no versioning drift)
+  - Basic, Bearer and NTLM Support out of the box.  Extensible handlers for others.
+  - Proxy support
+  - Certificate support (Self-signed server and client cert)
+  - Redirects supported
+
+Intellisense and compile support:
+
+![intellisense](./docs/intellisense.png)
+
+## Install
+
+```
+npm install typed-rest-client --save
+```
+
+Or to install the latest preview:
+```
+npm install typed-rest-client@preview --save
+```
+
+## Samples
+
+See the [samples](./samples) for complete coding examples. Also see the [REST](./test/tests/resttests.ts) and [HTTP](./test/tests/httptests.ts) tests for detailed examples.
+
+## Errors
+
+### HTTP
+
+The HTTP client does not throw unless truly exceptional.
+
+* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body.
+* Redirects (3xx) will be followed by default.
+
+
+See [HTTP tests](./test/tests/httptests.ts) for detailed examples.
+
+### REST
+
+The REST client is a high-level client which uses the HTTP client.  Its responsibility is to turn a body into a typed resource object.  
+
+* A 200 will be success.  
+* Redirects (3xx) will be followed.  
+* A 404 will not throw but the result object will be null and the result statusCode will be set.
+* Other 4xx and 5xx errors will throw.  The status code will be attached to the error object.  If a RESTful error object is returned (`{ message: xxx}`), then the error message will be that.  Otherwise, it will be a generic, `Failed Request: (xxx)`.
+
+See [REST tests](./test/tests/resttests.ts) for detailed examples.
+
+## Debugging
+
+To enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible:
+
+```
+export NODE_DEBUG=http
+```
+
+or
+
+```
+set NODE_DEBUG=http
+```
+
+
+
+## Node support
+
+The typed-rest-client is built using the latest LTS version of Node 8. We also support the latest LTS for Node 4 and Node 6.
+
+## Contributing
+
+To contribute to this repository, see the [contribution guide](./CONTRIBUTING.md)
+
+To build:
+
+```bash
+$ npm run build
+```
+
+To run all tests:
+```bash
+$ npm test
+```
+
+To just run unit tests:
+```bash
+$ npm run units
+```
+
+## Code of Conduct
+
+This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
diff --git a/setup-maven/node_modules/typed-rest-client/RestClient.d.ts b/setup-maven/node_modules/typed-rest-client/RestClient.d.ts
new file mode 100644
index 0000000..74b33cb
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/RestClient.d.ts
@@ -0,0 +1,77 @@
+/// <reference types="node" />
+import httpm = require('./HttpClient');
+import ifm = require("./Interfaces");
+export interface IRestResponse<T> {
+    statusCode: number;
+    result: T | null;
+    headers: Object;
+}
+export interface IRequestOptions {
+    acceptHeader?: string;
+    additionalHeaders?: ifm.IHeaders;
+    responseProcessor?: Function;
+    deserializeDates?: boolean;
+}
+export declare class RestClient {
+    client: httpm.HttpClient;
+    versionParam: string;
+    /**
+     * Creates an instance of the RestClient
+     * @constructor
+     * @param {string} userAgent - userAgent for requests
+     * @param {string} baseUrl - (Optional) If not specified, use full urls per request.  If supplied and a function passes a relative url, it will be appended to this
+     * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied)
+     * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout)
+     */
+    constructor(userAgent: string, baseUrl?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions);
+    private _baseUrl;
+    /**
+     * Gets a resource from an endpoint
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} requestUrl - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    options<T>(requestUrl: string, options?: IRequestOptions): Promise<IRestResponse<T>>;
+    /**
+     * Gets a resource from an endpoint
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified url or relative path
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    get<T>(resource: string, options?: IRequestOptions): Promise<IRestResponse<T>>;
+    /**
+     * Deletes a resource from an endpoint
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    del<T>(resource: string, options?: IRequestOptions): Promise<IRestResponse<T>>;
+    /**
+     * Creates resource(s) from an endpoint
+     * T type of object returned.
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    create<T>(resource: string, resources: any, options?: IRequestOptions): Promise<IRestResponse<T>>;
+    /**
+     * Updates resource(s) from an endpoint
+     * T type of object returned.
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    update<T>(resource: string, resources: any, options?: IRequestOptions): Promise<IRestResponse<T>>;
+    /**
+     * Replaces resource(s) from an endpoint
+     * T type of object returned.
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    replace<T>(resource: string, resources: any, options?: IRequestOptions): Promise<IRestResponse<T>>;
+    uploadStream<T>(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, options?: IRequestOptions): Promise<IRestResponse<T>>;
+    private _headersFromOptions(options, contentType?);
+    private static dateTimeDeserializer(key, value);
+    private _processResponse<T>(res, options);
+}
diff --git a/setup-maven/node_modules/typed-rest-client/RestClient.js b/setup-maven/node_modules/typed-rest-client/RestClient.js
new file mode 100644
index 0000000..1548b8f
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/RestClient.js
@@ -0,0 +1,217 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const httpm = require("./HttpClient");
+const util = require("./Util");
+class RestClient {
+    /**
+     * Creates an instance of the RestClient
+     * @constructor
+     * @param {string} userAgent - userAgent for requests
+     * @param {string} baseUrl - (Optional) If not specified, use full urls per request.  If supplied and a function passes a relative url, it will be appended to this
+     * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied)
+     * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout)
+     */
+    constructor(userAgent, baseUrl, handlers, requestOptions) {
+        this.client = new httpm.HttpClient(userAgent, handlers, requestOptions);
+        if (baseUrl) {
+            this._baseUrl = baseUrl;
+        }
+    }
+    /**
+     * Gets a resource from an endpoint
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} requestUrl - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    options(requestUrl, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let url = util.getUrl(requestUrl, this._baseUrl);
+            let res = yield this.client.options(url, this._headersFromOptions(options));
+            return this._processResponse(res, options);
+        });
+    }
+    /**
+     * Gets a resource from an endpoint
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified url or relative path
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    get(resource, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let url = util.getUrl(resource, this._baseUrl);
+            let res = yield this.client.get(url, this._headersFromOptions(options));
+            return this._processResponse(res, options);
+        });
+    }
+    /**
+     * Deletes a resource from an endpoint
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    del(resource, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let url = util.getUrl(resource, this._baseUrl);
+            let res = yield this.client.del(url, this._headersFromOptions(options));
+            return this._processResponse(res, options);
+        });
+    }
+    /**
+     * Creates resource(s) from an endpoint
+     * T type of object returned.
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    create(resource, resources, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let url = util.getUrl(resource, this._baseUrl);
+            let headers = this._headersFromOptions(options, true);
+            let data = JSON.stringify(resources, null, 2);
+            let res = yield this.client.post(url, data, headers);
+            return this._processResponse(res, options);
+        });
+    }
+    /**
+     * Updates resource(s) from an endpoint
+     * T type of object returned.
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    update(resource, resources, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let url = util.getUrl(resource, this._baseUrl);
+            let headers = this._headersFromOptions(options, true);
+            let data = JSON.stringify(resources, null, 2);
+            let res = yield this.client.patch(url, data, headers);
+            return this._processResponse(res, options);
+        });
+    }
+    /**
+     * Replaces resource(s) from an endpoint
+     * T type of object returned.
+     * Be aware that not found returns a null.  Other error conditions reject the promise
+     * @param {string} resource - fully qualified or relative url
+     * @param {IRequestOptions} requestOptions - (optional) requestOptions object
+     */
+    replace(resource, resources, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let url = util.getUrl(resource, this._baseUrl);
+            let headers = this._headersFromOptions(options, true);
+            let data = JSON.stringify(resources, null, 2);
+            let res = yield this.client.put(url, data, headers);
+            return this._processResponse(res, options);
+        });
+    }
+    uploadStream(verb, requestUrl, stream, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let url = util.getUrl(requestUrl, this._baseUrl);
+            let headers = this._headersFromOptions(options, true);
+            let res = yield this.client.sendStream(verb, url, stream, headers);
+            return this._processResponse(res, options);
+        });
+    }
+    _headersFromOptions(options, contentType) {
+        options = options || {};
+        let headers = options.additionalHeaders || {};
+        headers["Accept"] = options.acceptHeader || "application/json";
+        if (contentType) {
+            let found = false;
+            for (let header in headers) {
+                if (header.toLowerCase() == "content-type") {
+                    found = true;
+                }
+            }
+            if (!found) {
+                headers["Content-Type"] = 'application/json; charset=utf-8';
+            }
+        }
+        return headers;
+    }
+    static dateTimeDeserializer(key, value) {
+        if (typeof value === 'string') {
+            let a = new Date(value);
+            if (!isNaN(a.valueOf())) {
+                return a;
+            }
+        }
+        return value;
+    }
+    _processResponse(res, options) {
+        return __awaiter(this, void 0, void 0, function* () {
+            return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+                const statusCode = res.message.statusCode;
+                const response = {
+                    statusCode: statusCode,
+                    result: null,
+                    headers: {}
+                };
+                // not found leads to null obj returned
+                if (statusCode == httpm.HttpCodes.NotFound) {
+                    resolve(response);
+                }
+                let obj;
+                let contents;
+                // get the result from the body
+                try {
+                    contents = yield res.readBody();
+                    if (contents && contents.length > 0) {
+                        if (options && options.deserializeDates) {
+                            obj = JSON.parse(contents, RestClient.dateTimeDeserializer);
+                        }
+                        else {
+                            obj = JSON.parse(contents);
+                        }
+                        if (options && options.responseProcessor) {
+                            response.result = options.responseProcessor(obj);
+                        }
+                        else {
+                            response.result = obj;
+                        }
+                    }
+                    response.headers = res.message.headers;
+                }
+                catch (err) {
+                    // Invalid resource (contents not json);  leaving result obj null
+                }
+                // note that 3xx redirects are handled by the http layer.
+                if (statusCode > 299) {
+                    let msg;
+                    // if exception/error in body, attempt to get better error
+                    if (obj && obj.message) {
+                        msg = obj.message;
+                    }
+                    else if (contents && contents.length > 0) {
+                        // it may be the case that the exception is in the body message as string
+                        msg = contents;
+                    }
+                    else {
+                        msg = "Failed request: (" + statusCode + ")";
+                    }
+                    let err = new Error(msg);
+                    // attach statusCode and body obj (if available) to the error object
+                    err['statusCode'] = statusCode;
+                    if (response.result) {
+                        err['result'] = response.result;
+                    }
+                    reject(err);
+                }
+                else {
+                    resolve(response);
+                }
+            }));
+        });
+    }
+}
+exports.RestClient = RestClient;
diff --git a/setup-maven/node_modules/typed-rest-client/ThirdPartyNotice.txt b/setup-maven/node_modules/typed-rest-client/ThirdPartyNotice.txt
new file mode 100644
index 0000000..7bd6774
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/ThirdPartyNotice.txt
@@ -0,0 +1,1318 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Visual Studio Team Services extension (vsts-task-lib) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Visual Studio Team Services extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1.	@types/glob (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git)
+2.	@types/minimatch (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git)
+3.	@types/mocha (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git)
+4.	@types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git)
+5.	@types/shelljs (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git)
+6.	balanced-match (git://github.com/juliangruber/balanced-match.git)
+7.	brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+8.	browser-stdout (git+ssh://git@github.com/kumavis/browser-stdout.git)
+9.	commander (git+https://github.com/tj/commander.js.git)
+10.	concat-map (git://github.com/substack/node-concat-map.git)
+11.	debug (git://github.com/visionmedia/debug.git)
+12.	diff (git://github.com/kpdecker/jsdiff.git)
+13.	escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git)
+14.	fs.realpath (git+https://github.com/isaacs/fs.realpath.git)
+15.	glob (git://github.com/isaacs/node-glob.git)
+16.	graceful-readlink (git://github.com/zhiyelee/graceful-readlink.git)
+17.	growl (git://github.com/tj/node-growl.git)
+18.	has-flag (git+https://github.com/sindresorhus/has-flag.git)
+19.	he (git+https://github.com/mathiasbynens/he.git)
+20.	inflight (git+https://github.com/npm/inflight.git)
+21.	inherits (git://github.com/isaacs/inherits.git)
+22.	interpret (git://github.com/tkellen/node-interpret.git)
+23.	json3 (git://github.com/bestiejs/json3.git)
+24.	lodash.create (git+https://github.com/lodash/lodash.git)
+25.	lodash.isarguments (git+https://github.com/lodash/lodash.git)
+26.	lodash.isarray (git+https://github.com/lodash/lodash.git)
+27.	lodash.keys (git+https://github.com/lodash/lodash.git)
+28.	lodash._baseassign (git+https://github.com/lodash/lodash.git)
+29.	lodash._basecopy (git+https://github.com/lodash/lodash.git)
+30.	lodash._basecreate (git+https://github.com/lodash/lodash.git)
+31.	lodash._getnative (git+https://github.com/lodash/lodash.git)
+32.	lodash._isiterateecall (git+https://github.com/lodash/lodash.git)
+33.	minimatch (git://github.com/isaacs/minimatch.git)
+34.	minimist (git://github.com/substack/minimist.git)
+35.	mkdirp (git+https://github.com/substack/node-mkdirp.git)
+36.	mocha (git+https://github.com/mochajs/mocha.git)
+37.	ms (git+https://github.com/zeit/ms.git)
+38.	once (git://github.com/isaacs/once.git)
+39.	path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git)
+40.	path-parse (git+https://github.com/jbgutierrez/path-parse.git)
+41.	rechoir (git://github.com/tkellen/node-rechoir.git)
+42.	resolve (git://github.com/substack/node-resolve.git)
+43.	semver (git://github.com/npm/node-semver.git)
+44.	shelljs (git://github.com/shelljs/shelljs.git)
+45.	supports-color (git+https://github.com/chalk/supports-color.git)
+46.	tunnel (git+https://github.com/koichik/node-tunnel.git)
+47.	typescript (git+https://github.com/Microsoft/TypeScript.git)
+48.	underscore (git://github.com/jashkenas/underscore.git)
+49.	wrappy (git+https://github.com/npm/wrappy.git)
+
+
+%% @types/glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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
+=========================================
+END OF @types/glob NOTICES, INFORMATION, AND LICENSE
+
+%% @types/minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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
+=========================================
+END OF @types/minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% @types/shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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
+=========================================
+END OF @types/shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
+
+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.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+No license text available.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% browser-stdout NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+No license text available.
+=========================================
+END OF browser-stdout NOTICES, INFORMATION, AND LICENSE
+
+%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
+
+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.
+=========================================
+END OF commander NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+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.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% debug NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
+
+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.
+=========================================
+END OF debug NOTICES, INFORMATION, AND LICENSE
+
+%% diff NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Software License Agreement (BSD License)
+
+Copyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com>
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above
+  copyright notice, this list of conditions and the
+  following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the
+  following disclaimer in the documentation and/or other
+  materials provided with the distribution.
+
+* Neither the name of Kevin Decker nor the names of its
+  contributors may be used to endorse or promote products
+  derived from this software without specific prior
+  written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF diff NOTICES, INFORMATION, AND LICENSE
+
+%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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.
+=========================================
+END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE
+
+%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+----
+
+This library bundles a version of the `fs.realpath` and `fs.realpathSync`
+methods from Node.js v0.10 under the terms of the Node.js MIT license.
+
+Node's license follows, also included at the header of `old.js` which contains
+the licensed code:
+
+  Copyright Joyent, Inc. and other Node contributors.
+
+  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.
+=========================================
+END OF fs.realpath NOTICES, INFORMATION, AND LICENSE
+
+%% glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF glob NOTICES, INFORMATION, AND LICENSE
+
+%% graceful-readlink NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015 Zhiye Li
+
+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.
+=========================================
+END OF graceful-readlink NOTICES, INFORMATION, AND LICENSE
+
+%% growl NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+No license text available.
+=========================================
+END OF growl NOTICES, INFORMATION, AND LICENSE
+
+%% has-flag NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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.
+=========================================
+END OF has-flag NOTICES, INFORMATION, AND LICENSE
+
+%% he NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Mathias Bynens <https://mathiasbynens.be/>
+
+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.
+=========================================
+END OF he NOTICES, INFORMATION, AND LICENSE
+
+%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inflight NOTICES, INFORMATION, AND LICENSE
+
+%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inherits NOTICES, INFORMATION, AND LICENSE
+
+%% interpret NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2014 Tyler Kellen
+
+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.
+=========================================
+END OF interpret NOTICES, INFORMATION, AND LICENSE
+
+%% json3 NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014 Kit Cambridge.
+http://kitcambridge.be/
+
+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.
+=========================================
+END OF json3 NOTICES, INFORMATION, AND LICENSE
+
+%% lodash.create NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash.create NOTICES, INFORMATION, AND LICENSE
+
+%% lodash.isarguments NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright jQuery Foundation and other contributors <https://jquery.org/>
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
+=========================================
+END OF lodash.isarguments NOTICES, INFORMATION, AND LICENSE
+
+%% lodash.isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash.isarray NOTICES, INFORMATION, AND LICENSE
+
+%% lodash.keys NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash.keys NOTICES, INFORMATION, AND LICENSE
+
+%% lodash._baseassign NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash._baseassign NOTICES, INFORMATION, AND LICENSE
+
+%% lodash._basecopy NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash._basecopy NOTICES, INFORMATION, AND LICENSE
+
+%% lodash._basecreate NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash._basecreate NOTICES, INFORMATION, AND LICENSE
+
+%% lodash._getnative NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash._getnative NOTICES, INFORMATION, AND LICENSE
+
+%% lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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.
+=========================================
+END OF lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+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.
+=========================================
+END OF minimist NOTICES, INFORMATION, AND LICENSE
+
+%% mkdirp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+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.
+=========================================
+END OF mkdirp NOTICES, INFORMATION, AND LICENSE
+
+%% mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011-2017 JS Foundation and contributors, https://js.foundation
+
+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.
+=========================================
+END OF mocha NOTICES, INFORMATION, AND LICENSE
+
+%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+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.
+=========================================
+END OF ms NOTICES, INFORMATION, AND LICENSE
+
+%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF once NOTICES, INFORMATION, AND LICENSE
+
+%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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.
+=========================================
+END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE
+
+%% path-parse NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+No license text available.
+=========================================
+END OF path-parse NOTICES, INFORMATION, AND LICENSE
+
+%% rechoir NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015 Tyler Kellen
+
+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.
+=========================================
+END OF rechoir NOTICES, INFORMATION, AND LICENSE
+
+%% resolve NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+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.
+=========================================
+END OF resolve NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) Isaac Z. Schlueter ("Author")
+All rights reserved.
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib <arturadib@gmail.com>
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Artur Adib nor the
+      names of the contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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.
+=========================================
+END OF supports-color NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+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.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% typescript NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ 
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF typescript NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+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.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF wrappy NOTICES, INFORMATION, AND LICENSE
+
diff --git a/setup-maven/node_modules/typed-rest-client/Util.d.ts b/setup-maven/node_modules/typed-rest-client/Util.d.ts
new file mode 100644
index 0000000..32757e8
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Util.d.ts
@@ -0,0 +1,7 @@
+/**
+ * creates an url from a request url and optional base url (http://server:8080)
+ * @param {string} resource - a fully qualified url or relative path
+ * @param {string} baseUrl - an optional baseUrl (http://server:8080)
+ * @return {string} - resultant url
+ */
+export declare function getUrl(resource: string, baseUrl?: string): string;
diff --git a/setup-maven/node_modules/typed-rest-client/Util.js b/setup-maven/node_modules/typed-rest-client/Util.js
new file mode 100644
index 0000000..32981d1
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/Util.js
@@ -0,0 +1,35 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+const url = require("url");
+const path = require("path");
+/**
+ * creates an url from a request url and optional base url (http://server:8080)
+ * @param {string} resource - a fully qualified url or relative path
+ * @param {string} baseUrl - an optional baseUrl (http://server:8080)
+ * @return {string} - resultant url
+ */
+function getUrl(resource, baseUrl) {
+    const pathApi = path.posix || path;
+    if (!baseUrl) {
+        return resource;
+    }
+    else if (!resource) {
+        return baseUrl;
+    }
+    else {
+        const base = url.parse(baseUrl);
+        const resultantUrl = url.parse(resource);
+        // resource (specific per request) elements take priority
+        resultantUrl.protocol = resultantUrl.protocol || base.protocol;
+        resultantUrl.auth = resultantUrl.auth || base.auth;
+        resultantUrl.host = resultantUrl.host || base.host;
+        resultantUrl.pathname = pathApi.resolve(base.pathname, resultantUrl.pathname);
+        if (!resultantUrl.pathname.endsWith('/') && resource.endsWith('/')) {
+            resultantUrl.pathname += '/';
+        }
+        return url.format(resultantUrl);
+    }
+}
+exports.getUrl = getUrl;
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/basiccreds.d.ts b/setup-maven/node_modules/typed-rest-client/handlers/basiccreds.d.ts
new file mode 100644
index 0000000..17ade55
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/basiccreds.d.ts
@@ -0,0 +1,9 @@
+import ifm = require('../Interfaces');
+export declare class BasicCredentialHandler implements ifm.IRequestHandler {
+    username: string;
+    password: string;
+    constructor(username: string, password: string);
+    prepareRequest(options: any): void;
+    canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
+    handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
+}
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/basiccreds.js b/setup-maven/node_modules/typed-rest-client/handlers/basiccreds.js
new file mode 100644
index 0000000..384a39c
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/basiccreds.js
@@ -0,0 +1,24 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+class BasicCredentialHandler {
+    constructor(username, password) {
+        this.username = username;
+        this.password = password;
+    }
+    // currently implements pre-authorization
+    // TODO: support preAuth = false where it hooks on 401
+    prepareRequest(options) {
+        options.headers['Authorization'] = 'Basic ' + new Buffer(this.username + ':' + this.password).toString('base64');
+        options.headers['X-TFS-FedAuthRedirect'] = 'Suppress';
+    }
+    // This handler cannot handle 401
+    canHandleAuthentication(response) {
+        return false;
+    }
+    handleAuthentication(httpClient, requestInfo, objs) {
+        return null;
+    }
+}
+exports.BasicCredentialHandler = BasicCredentialHandler;
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/bearertoken.d.ts b/setup-maven/node_modules/typed-rest-client/handlers/bearertoken.d.ts
new file mode 100644
index 0000000..c08496f
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/bearertoken.d.ts
@@ -0,0 +1,8 @@
+import ifm = require('../Interfaces');
+export declare class BearerCredentialHandler implements ifm.IRequestHandler {
+    token: string;
+    constructor(token: string);
+    prepareRequest(options: any): void;
+    canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
+    handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
+}
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/bearertoken.js b/setup-maven/node_modules/typed-rest-client/handlers/bearertoken.js
new file mode 100644
index 0000000..dad27a7
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/bearertoken.js
@@ -0,0 +1,23 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+class BearerCredentialHandler {
+    constructor(token) {
+        this.token = token;
+    }
+    // currently implements pre-authorization
+    // TODO: support preAuth = false where it hooks on 401
+    prepareRequest(options) {
+        options.headers['Authorization'] = 'Bearer ' + this.token;
+        options.headers['X-TFS-FedAuthRedirect'] = 'Suppress';
+    }
+    // This handler cannot handle 401
+    canHandleAuthentication(response) {
+        return false;
+    }
+    handleAuthentication(httpClient, requestInfo, objs) {
+        return null;
+    }
+}
+exports.BearerCredentialHandler = BearerCredentialHandler;
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/ntlm.d.ts b/setup-maven/node_modules/typed-rest-client/handlers/ntlm.d.ts
new file mode 100644
index 0000000..2f509b0
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/ntlm.d.ts
@@ -0,0 +1,13 @@
+/// <reference types="node" />
+import ifm = require('../Interfaces');
+import http = require("http");
+export declare class NtlmCredentialHandler implements ifm.IRequestHandler {
+    private _ntlmOptions;
+    constructor(username: string, password: string, workstation?: string, domain?: string);
+    prepareRequest(options: http.RequestOptions): void;
+    canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
+    handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
+    private handleAuthenticationPrivate(httpClient, requestInfo, objs, finalCallback);
+    private sendType1Message(httpClient, requestInfo, objs, finalCallback);
+    private sendType3Message(httpClient, requestInfo, objs, res, callback);
+}
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/ntlm.js b/setup-maven/node_modules/typed-rest-client/handlers/ntlm.js
new file mode 100644
index 0000000..5fbca82
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/ntlm.js
@@ -0,0 +1,137 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+const http = require("http");
+const https = require("https");
+const _ = require("underscore");
+const ntlm = require("../opensource/node-http-ntlm/ntlm");
+class NtlmCredentialHandler {
+    constructor(username, password, workstation, domain) {
+        this._ntlmOptions = {};
+        this._ntlmOptions.username = username;
+        this._ntlmOptions.password = password;
+        if (domain !== undefined) {
+            this._ntlmOptions.domain = domain;
+        }
+        else {
+            this._ntlmOptions.domain = '';
+        }
+        if (workstation !== undefined) {
+            this._ntlmOptions.workstation = workstation;
+        }
+        else {
+            this._ntlmOptions.workstation = '';
+        }
+    }
+    prepareRequest(options) {
+        // No headers or options need to be set.  We keep the credentials on the handler itself.
+        // If a (proxy) agent is set, remove it as we don't support proxy for NTLM at this time
+        if (options.agent) {
+            delete options.agent;
+        }
+    }
+    canHandleAuthentication(response) {
+        if (response && response.message && response.message.statusCode === 401) {
+            // Ensure that we're talking NTLM here
+            // Once we have the www-authenticate header, split it so we can ensure we can talk NTLM
+            const wwwAuthenticate = response.message.headers['www-authenticate'];
+            if (wwwAuthenticate) {
+                const mechanisms = wwwAuthenticate.split(', ');
+                const index = mechanisms.indexOf("NTLM");
+                if (index >= 0) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    handleAuthentication(httpClient, requestInfo, objs) {
+        return new Promise((resolve, reject) => {
+            const callbackForResult = function (err, res) {
+                if (err) {
+                    reject(err);
+                }
+                // We have to readbody on the response before continuing otherwise there is a hang.
+                res.readBody().then(() => {
+                    resolve(res);
+                });
+            };
+            this.handleAuthenticationPrivate(httpClient, requestInfo, objs, callbackForResult);
+        });
+    }
+    handleAuthenticationPrivate(httpClient, requestInfo, objs, finalCallback) {
+        // Set up the headers for NTLM authentication
+        requestInfo.options = _.extend(requestInfo.options, {
+            username: this._ntlmOptions.username,
+            password: this._ntlmOptions.password,
+            domain: this._ntlmOptions.domain,
+            workstation: this._ntlmOptions.workstation
+        });
+        if (httpClient.isSsl === true) {
+            requestInfo.options.agent = new https.Agent({ keepAlive: true });
+        }
+        else {
+            requestInfo.options.agent = new http.Agent({ keepAlive: true });
+        }
+        let self = this;
+        // The following pattern of sending the type1 message following immediately (in a setImmediate) is
+        // critical for the NTLM exchange to happen.  If we removed setImmediate (or call in a different manner)
+        // the NTLM exchange will always fail with a 401.
+        this.sendType1Message(httpClient, requestInfo, objs, function (err, res) {
+            if (err) {
+                return finalCallback(err, null, null);
+            }
+            /// We have to readbody on the response before continuing otherwise there is a hang.
+            res.readBody().then(() => {
+                // It is critical that we have setImmediate here due to how connection requests are queued.
+                // If setImmediate is removed then the NTLM handshake will not work.
+                // setImmediate allows us to queue a second request on the same connection. If this second 
+                // request is not queued on the connection when the first request finishes then node closes
+                // the connection. NTLM requires both requests to be on the same connection so we need this.
+                setImmediate(function () {
+                    self.sendType3Message(httpClient, requestInfo, objs, res, finalCallback);
+                });
+            });
+        });
+    }
+    // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js
+    sendType1Message(httpClient, requestInfo, objs, finalCallback) {
+        const type1msg = ntlm.createType1Message(this._ntlmOptions);
+        const type1options = {
+            headers: {
+                'Connection': 'keep-alive',
+                'Authorization': type1msg
+            },
+            timeout: requestInfo.options.timeout || 0,
+            agent: requestInfo.httpModule,
+        };
+        const type1info = {};
+        type1info.httpModule = requestInfo.httpModule;
+        type1info.parsedUrl = requestInfo.parsedUrl;
+        type1info.options = _.extend(type1options, _.omit(requestInfo.options, 'headers'));
+        return httpClient.requestRawWithCallback(type1info, objs, finalCallback);
+    }
+    // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js
+    sendType3Message(httpClient, requestInfo, objs, res, callback) {
+        if (!res.message.headers && !res.message.headers['www-authenticate']) {
+            throw new Error('www-authenticate not found on response of second request');
+        }
+        const type2msg = ntlm.parseType2Message(res.message.headers['www-authenticate']);
+        const type3msg = ntlm.createType3Message(type2msg, this._ntlmOptions);
+        const type3options = {
+            headers: {
+                'Authorization': type3msg,
+                'Connection': 'Close'
+            },
+            agent: requestInfo.httpModule,
+        };
+        const type3info = {};
+        type3info.httpModule = requestInfo.httpModule;
+        type3info.parsedUrl = requestInfo.parsedUrl;
+        type3options.headers = _.extend(type3options.headers, requestInfo.options.headers);
+        type3info.options = _.extend(type3options, _.omit(requestInfo.options, 'headers'));
+        return httpClient.requestRawWithCallback(type3info, objs, callback);
+    }
+}
+exports.NtlmCredentialHandler = NtlmCredentialHandler;
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts b/setup-maven/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts
new file mode 100644
index 0000000..4bb77fd
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts
@@ -0,0 +1,8 @@
+import ifm = require('../Interfaces');
+export declare class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler {
+    token: string;
+    constructor(token: string);
+    prepareRequest(options: any): void;
+    canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
+    handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
+}
diff --git a/setup-maven/node_modules/typed-rest-client/handlers/personalaccesstoken.js b/setup-maven/node_modules/typed-rest-client/handlers/personalaccesstoken.js
new file mode 100644
index 0000000..4bb88f8
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/handlers/personalaccesstoken.js
@@ -0,0 +1,23 @@
+"use strict";
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+class PersonalAccessTokenCredentialHandler {
+    constructor(token) {
+        this.token = token;
+    }
+    // currently implements pre-authorization
+    // TODO: support preAuth = false where it hooks on 401
+    prepareRequest(options) {
+        options.headers['Authorization'] = 'Basic ' + new Buffer('PAT:' + this.token).toString('base64');
+        options.headers['X-TFS-FedAuthRedirect'] = 'Suppress';
+    }
+    // This handler cannot handle 401
+    canHandleAuthentication(response) {
+        return false;
+    }
+    handleAuthentication(httpClient, requestInfo, objs) {
+        return null;
+    }
+}
+exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
diff --git a/setup-maven/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js b/setup-maven/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js
new file mode 100644
index 0000000..adf7602
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js
@@ -0,0 +1,389 @@
+var crypto = require('crypto');
+
+var flags = {
+	NTLM_NegotiateUnicode                :  0x00000001,
+	NTLM_NegotiateOEM                    :  0x00000002,
+	NTLM_RequestTarget                   :  0x00000004,
+	NTLM_Unknown9                        :  0x00000008,
+	NTLM_NegotiateSign                   :  0x00000010,
+	NTLM_NegotiateSeal                   :  0x00000020,
+	NTLM_NegotiateDatagram               :  0x00000040,
+	NTLM_NegotiateLanManagerKey          :  0x00000080,
+	NTLM_Unknown8                        :  0x00000100,
+	NTLM_NegotiateNTLM                   :  0x00000200,
+	NTLM_NegotiateNTOnly                 :  0x00000400,
+	NTLM_Anonymous                       :  0x00000800,
+	NTLM_NegotiateOemDomainSupplied      :  0x00001000,
+	NTLM_NegotiateOemWorkstationSupplied :  0x00002000,
+	NTLM_Unknown6                        :  0x00004000,
+	NTLM_NegotiateAlwaysSign             :  0x00008000,
+	NTLM_TargetTypeDomain                :  0x00010000,
+	NTLM_TargetTypeServer                :  0x00020000,
+	NTLM_TargetTypeShare                 :  0x00040000,
+	NTLM_NegotiateExtendedSecurity       :  0x00080000,
+	NTLM_NegotiateIdentify               :  0x00100000,
+	NTLM_Unknown5                        :  0x00200000,
+	NTLM_RequestNonNTSessionKey          :  0x00400000,
+	NTLM_NegotiateTargetInfo             :  0x00800000,
+	NTLM_Unknown4                        :  0x01000000,
+	NTLM_NegotiateVersion                :  0x02000000,
+	NTLM_Unknown3                        :  0x04000000,
+	NTLM_Unknown2                        :  0x08000000,
+	NTLM_Unknown1                        :  0x10000000,
+	NTLM_Negotiate128                    :  0x20000000,
+	NTLM_NegotiateKeyExchange            :  0x40000000,
+	NTLM_Negotiate56                     :  0x80000000
+};
+var typeflags = {
+	NTLM_TYPE1_FLAGS : 	  flags.NTLM_NegotiateUnicode
+						+ flags.NTLM_NegotiateOEM
+						+ flags.NTLM_RequestTarget
+						+ flags.NTLM_NegotiateNTLM
+						+ flags.NTLM_NegotiateOemDomainSupplied
+						+ flags.NTLM_NegotiateOemWorkstationSupplied
+						+ flags.NTLM_NegotiateAlwaysSign
+						+ flags.NTLM_NegotiateExtendedSecurity
+						+ flags.NTLM_NegotiateVersion
+						+ flags.NTLM_Negotiate128
+						+ flags.NTLM_Negotiate56,
+
+	NTLM_TYPE2_FLAGS :    flags.NTLM_NegotiateUnicode
+						+ flags.NTLM_RequestTarget
+						+ flags.NTLM_NegotiateNTLM
+						+ flags.NTLM_NegotiateAlwaysSign
+						+ flags.NTLM_NegotiateExtendedSecurity
+						+ flags.NTLM_NegotiateTargetInfo
+						+ flags.NTLM_NegotiateVersion
+						+ flags.NTLM_Negotiate128
+						+ flags.NTLM_Negotiate56
+};
+
+function createType1Message(options){
+	var domain = escape(options.domain.toUpperCase());
+	var workstation = escape(options.workstation.toUpperCase());
+	var protocol = 'NTLMSSP\0';
+
+	var BODY_LENGTH = 40;
+
+	var type1flags = typeflags.NTLM_TYPE1_FLAGS;
+	if(!domain || domain === '')
+		type1flags = type1flags - flags.NTLM_NegotiateOemDomainSupplied;
+
+	var pos = 0;
+	var buf = new Buffer(BODY_LENGTH + domain.length + workstation.length);
+
+
+	buf.write(protocol, pos, protocol.length); pos += protocol.length; // protocol
+	buf.writeUInt32LE(1, pos); pos += 4;          // type 1
+	buf.writeUInt32LE(type1flags, pos); pos += 4; // TYPE1 flag
+
+	buf.writeUInt16LE(domain.length, pos); pos += 2; // domain length
+	buf.writeUInt16LE(domain.length, pos); pos += 2; // domain max length
+	buf.writeUInt32LE(BODY_LENGTH + workstation.length, pos); pos += 4; // domain buffer offset
+
+	buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation length
+	buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation max length
+	buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; // workstation buffer offset
+
+	buf.writeUInt8(5, pos); pos += 1;      //ProductMajorVersion
+	buf.writeUInt8(1, pos); pos += 1;      //ProductMinorVersion
+	buf.writeUInt16LE(2600, pos); pos += 2; //ProductBuild
+
+	buf.writeUInt8(0 , pos); pos += 1; //VersionReserved1
+	buf.writeUInt8(0 , pos); pos += 1; //VersionReserved2
+	buf.writeUInt8(0 , pos); pos += 1; //VersionReserved3
+	buf.writeUInt8(15, pos); pos += 1; //NTLMRevisionCurrent
+
+	buf.write(workstation, pos, workstation.length, 'ascii'); pos += workstation.length; // workstation string
+	buf.write(domain     , pos, domain.length     , 'ascii'); pos += domain.length;
+
+	return 'NTLM ' + buf.toString('base64');
+}
+
+function parseType2Message(rawmsg, callback){
+	var match = rawmsg.match(/NTLM (.+)?/);
+	if(!match || !match[1])
+		return callback(new Error("Couldn't find NTLM in the message type2 comming from the server"));
+
+	var buf = new Buffer(match[1], 'base64');
+
+	var msg = {};
+
+	msg.signature = buf.slice(0, 8);
+	msg.type = buf.readInt16LE(8);
+
+	if(msg.type != 2)
+		return callback(new Error("Server didn't return a type 2 message"));
+
+	msg.targetNameLen = buf.readInt16LE(12);
+	msg.targetNameMaxLen = buf.readInt16LE(14);
+	msg.targetNameOffset = buf.readInt32LE(16);
+	msg.targetName  = buf.slice(msg.targetNameOffset, msg.targetNameOffset + msg.targetNameMaxLen);
+
+    msg.negotiateFlags = buf.readInt32LE(20);
+    msg.serverChallenge = buf.slice(24, 32);
+    msg.reserved = buf.slice(32, 40);
+
+    if(msg.negotiateFlags & flags.NTLM_NegotiateTargetInfo){
+    	msg.targetInfoLen = buf.readInt16LE(40);
+    	msg.targetInfoMaxLen = buf.readInt16LE(42);
+    	msg.targetInfoOffset = buf.readInt32LE(44);
+    	msg.targetInfo = buf.slice(msg.targetInfoOffset, msg.targetInfoOffset + msg.targetInfoLen);
+    }
+	return msg;
+}
+
+function createType3Message(msg2, options){
+	var nonce = msg2.serverChallenge;
+	var username = options.username;
+	var password = options.password;
+	var negotiateFlags = msg2.negotiateFlags;
+
+	var isUnicode = negotiateFlags & flags.NTLM_NegotiateUnicode;
+	var isNegotiateExtendedSecurity = negotiateFlags & flags.NTLM_NegotiateExtendedSecurity;
+
+	var BODY_LENGTH = 72;
+
+	var domainName = escape(options.domain.toUpperCase());
+	var workstation = escape(options.workstation.toUpperCase());
+
+	var workstationBytes, domainNameBytes, usernameBytes, encryptedRandomSessionKeyBytes;
+
+	var encryptedRandomSessionKey = "";
+	if(isUnicode){
+		workstationBytes = new Buffer(workstation, 'utf16le');
+		domainNameBytes = new Buffer(domainName, 'utf16le');
+		usernameBytes = new Buffer(username, 'utf16le');
+		encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'utf16le');
+	}else{
+		workstationBytes = new Buffer(workstation, 'ascii');
+		domainNameBytes = new Buffer(domainName, 'ascii');
+		usernameBytes = new Buffer(username, 'ascii');
+		encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'ascii');
+	}
+
+	var lmChallengeResponse = calc_resp(create_LM_hashed_password_v1(password), nonce);
+	var ntChallengeResponse = calc_resp(create_NT_hashed_password_v1(password), nonce);
+
+	if(isNegotiateExtendedSecurity){
+		var pwhash = create_NT_hashed_password_v1(password);
+	 	var clientChallenge = "";
+	 	for(var i=0; i < 8; i++){
+	 		clientChallenge += String.fromCharCode( Math.floor(Math.random()*256) );
+	   	}
+	   	var clientChallengeBytes = new Buffer(clientChallenge, 'ascii');
+	    var challenges = ntlm2sr_calc_resp(pwhash, nonce, clientChallengeBytes);
+	    lmChallengeResponse = challenges.lmChallengeResponse;
+	    ntChallengeResponse = challenges.ntChallengeResponse;
+	}
+
+	var signature = 'NTLMSSP\0';
+
+	var pos = 0;
+	var buf = new Buffer(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length + encryptedRandomSessionKeyBytes.length);
+
+	buf.write(signature, pos, signature.length); pos += signature.length;
+	buf.writeUInt32LE(3, pos); pos += 4;          // type 1
+
+	buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseLen
+	buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseMaxLen
+	buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length, pos); pos += 4; // LmChallengeResponseOffset
+
+	buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseLen
+	buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseMaxLen
+	buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length, pos); pos += 4; // NtChallengeResponseOffset
+
+	buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameLen
+	buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameMaxLen
+	buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; 			  // DomainNameOffset
+
+	buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameLen
+	buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameMaxLen
+	buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length, pos); pos += 4; // UserNameOffset
+
+	buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationLen
+	buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationMaxLen
+	buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length, pos); pos += 4; // WorkstationOffset
+
+	buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyLen
+	buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyMaxLen
+	buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length, pos); pos += 4; // EncryptedRandomSessionKeyOffset
+
+	buf.writeUInt32LE(typeflags.NTLM_TYPE2_FLAGS, pos); pos += 4; // NegotiateFlags
+
+	buf.writeUInt8(5, pos); pos++; // ProductMajorVersion
+	buf.writeUInt8(1, pos); pos++; // ProductMinorVersion
+	buf.writeUInt16LE(2600, pos); pos += 2; // ProductBuild
+	buf.writeUInt8(0, pos); pos++; // VersionReserved1
+	buf.writeUInt8(0, pos); pos++; // VersionReserved2
+	buf.writeUInt8(0, pos); pos++; // VersionReserved3
+	buf.writeUInt8(15, pos); pos++; // NTLMRevisionCurrent
+
+	domainNameBytes.copy(buf, pos); pos += domainNameBytes.length;
+	usernameBytes.copy(buf, pos); pos += usernameBytes.length;
+	workstationBytes.copy(buf, pos); pos += workstationBytes.length;
+	lmChallengeResponse.copy(buf, pos); pos += lmChallengeResponse.length;
+	ntChallengeResponse.copy(buf, pos); pos += ntChallengeResponse.length;
+	encryptedRandomSessionKeyBytes.copy(buf, pos); pos += encryptedRandomSessionKeyBytes.length;
+
+	return 'NTLM ' + buf.toString('base64');
+}
+
+function create_LM_hashed_password_v1(password){
+	// fix the password length to 14 bytes
+	password = password.toUpperCase();
+	var passwordBytes = new Buffer(password, 'ascii');
+
+	var passwordBytesPadded = new Buffer(14);
+	passwordBytesPadded.fill("\0");
+	var sourceEnd = 14;
+	if(passwordBytes.length < 14) sourceEnd = passwordBytes.length;
+	passwordBytes.copy(passwordBytesPadded, 0, 0, sourceEnd);
+
+	// split into 2 parts of 7 bytes:
+	var firstPart = passwordBytesPadded.slice(0,7);
+	var secondPart = passwordBytesPadded.slice(7);
+
+	function encrypt(buf){
+		var key = insertZerosEvery7Bits(buf);
+		var des = crypto.createCipheriv('DES-ECB', key, '');
+		return des.update("KGS!@#$%"); // page 57 in [MS-NLMP]);
+	}
+
+	var firstPartEncrypted = encrypt(firstPart);
+	var secondPartEncrypted = encrypt(secondPart);
+
+	return Buffer.concat([firstPartEncrypted, secondPartEncrypted]);
+}
+
+function insertZerosEvery7Bits(buf){
+	var binaryArray = bytes2binaryArray(buf);
+	var newBinaryArray = [];
+	for(var i=0; i<binaryArray.length; i++){
+		newBinaryArray.push(binaryArray[i]);
+
+		if((i+1)%7 === 0){
+			newBinaryArray.push(0);
+		}
+	}
+	return binaryArray2bytes(newBinaryArray);
+}
+
+function bytes2binaryArray(buf){
+	var hex2binary = {
+		0: [0,0,0,0],
+		1: [0,0,0,1],
+		2: [0,0,1,0],
+		3: [0,0,1,1],
+		4: [0,1,0,0],
+		5: [0,1,0,1],
+		6: [0,1,1,0],
+		7: [0,1,1,1],
+		8: [1,0,0,0],
+		9: [1,0,0,1],
+		A: [1,0,1,0],
+		B: [1,0,1,1],
+		C: [1,1,0,0],
+		D: [1,1,0,1],
+		E: [1,1,1,0],
+		F: [1,1,1,1]
+	};
+
+	var hexString = buf.toString('hex').toUpperCase();
+	var array = [];
+	for(var i=0; i<hexString.length; i++){
+   		var hexchar = hexString.charAt(i);
+   		array = array.concat(hex2binary[hexchar]);
+   	}
+   	return array;
+}
+
+function binaryArray2bytes(array){
+	var binary2hex = {
+		'0000': 0,
+		'0001': 1,
+		'0010': 2,
+		'0011': 3,
+		'0100': 4,
+		'0101': 5,
+		'0110': 6,
+		'0111': 7,
+		'1000': 8,
+		'1001': 9,
+		'1010': 'A',
+		'1011': 'B',
+		'1100': 'C',
+		'1101': 'D',
+		'1110': 'E',
+		'1111': 'F'
+	};
+
+ 	var bufArray = [];
+
+	for(var i=0; i<array.length; i +=8 ){
+		if((i+7) > array.length)
+			break;
+
+		var binString1 = '' + array[i] + '' + array[i+1] + '' + array[i+2] + '' + array[i+3];
+		var binString2 = '' + array[i+4] + '' + array[i+5] + '' + array[i+6] + '' + array[i+7];
+   		var hexchar1 = binary2hex[binString1];
+   		var hexchar2 = binary2hex[binString2];
+
+   		var buf = new Buffer(hexchar1 + '' + hexchar2, 'hex');
+   		bufArray.push(buf);
+   	}
+
+   	return Buffer.concat(bufArray);
+}
+
+function create_NT_hashed_password_v1(password){
+	var buf = new Buffer(password, 'utf16le');
+	var md4 = crypto.createHash('md4');
+	md4.update(buf);
+	return new Buffer(md4.digest());
+}
+
+function calc_resp(password_hash, server_challenge){
+    // padding with zeros to make the hash 21 bytes long
+    var passHashPadded = new Buffer(21);
+    passHashPadded.fill("\0");
+    password_hash.copy(passHashPadded, 0, 0, password_hash.length);
+
+    var resArray = [];
+
+    var des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(0,7)), '');
+    resArray.push( des.update(server_challenge.slice(0,8)) );
+
+    des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(7,14)), '');
+    resArray.push( des.update(server_challenge.slice(0,8)) );
+
+    des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(14,21)), '');
+    resArray.push( des.update(server_challenge.slice(0,8)) );
+
+   	return Buffer.concat(resArray);
+}
+
+function ntlm2sr_calc_resp(responseKeyNT, serverChallenge, clientChallenge){
+	// padding with zeros to make the hash 16 bytes longer
+    var lmChallengeResponse = new Buffer(clientChallenge.length + 16);
+    lmChallengeResponse.fill("\0");
+    clientChallenge.copy(lmChallengeResponse, 0, 0, clientChallenge.length);
+
+    var buf = Buffer.concat([serverChallenge, clientChallenge]);
+    var md5 = crypto.createHash('md5');
+    md5.update(buf);
+    var sess = md5.digest();
+    var ntChallengeResponse = calc_resp(responseKeyNT, sess.slice(0,8));
+
+    return {
+    	lmChallengeResponse: lmChallengeResponse,
+    	ntChallengeResponse: ntChallengeResponse
+    };
+}
+
+exports.createType1Message = createType1Message;
+exports.parseType2Message = parseType2Message;
+exports.createType3Message = createType3Message;
+
+
+
diff --git a/setup-maven/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt b/setup-maven/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt
new file mode 100644
index 0000000..b341600
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt
@@ -0,0 +1,6 @@
+// This software (ntlm.js) was copied from a file of the same name at https://github.com/SamDecrock/node-http-ntlm/blob/master/ntlm.js.
+//
+// As of this writing, it is a part of the node-http-ntlm module produced by SamDecrock.
+//
+// It is used as a part of the NTLM support provided by the vso-node-api library.
+//
diff --git a/setup-maven/node_modules/typed-rest-client/package.json b/setup-maven/node_modules/typed-rest-client/package.json
new file mode 100644
index 0000000..a0bce6b
--- /dev/null
+++ b/setup-maven/node_modules/typed-rest-client/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "typed-rest-client@^1.5.0",
+  "_id": "typed-rest-client@1.5.0",
+  "_inBundle": false,
+  "_integrity": "sha512-DVZRlmsfnTjp6ZJaatcdyvvwYwbWvR4YDNFDqb+qdTxpvaVP99YCpBkA8rxsLtAPjBVoDe4fNsnMIdZTiPuKWg==",
+  "_location": "/typed-rest-client",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "typed-rest-client@^1.5.0",
+    "name": "typed-rest-client",
+    "escapedName": "typed-rest-client",
+    "rawSpec": "^1.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.5.0"
+  },
+  "_requiredBy": [
+    "/",
+    "/@actions/tool-cache"
+  ],
+  "_resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz",
+  "_shasum": "c0dda6e775b942fd46a2d99f2160a94953206fc2",
+  "_spec": "typed-rest-client@^1.5.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven",
+  "author": {
+    "name": "Microsoft Corporation"
+  },
+  "bugs": {
+    "url": "https://github.com/Microsoft/typed-rest-client/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "tunnel": "0.0.4",
+    "underscore": "1.8.3"
+  },
+  "deprecated": false,
+  "description": "Node Rest and Http Clients for use with TypeScript",
+  "devDependencies": {
+    "@types/mocha": "^2.2.44",
+    "@types/node": "^6.0.92",
+    "@types/shelljs": "0.7.4",
+    "mocha": "^3.5.3",
+    "nock": "9.6.1",
+    "react-scripts": "1.1.5",
+    "semver": "4.3.3",
+    "shelljs": "0.7.6",
+    "typescript": "3.1.5"
+  },
+  "homepage": "https://github.com/Microsoft/typed-rest-client#readme",
+  "keywords": [
+    "rest",
+    "http",
+    "client",
+    "typescript",
+    "node"
+  ],
+  "license": "MIT",
+  "main": "./RestClient.js",
+  "name": "typed-rest-client",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/Microsoft/typed-rest-client.git"
+  },
+  "scripts": {
+    "bt": "node make.js buildtest",
+    "build": "node make.js build",
+    "samples": "node make.js samples",
+    "test": "node make.js test",
+    "units": "node make.js units",
+    "validate": "node make.js validate"
+  },
+  "version": "1.5.0"
+}
diff --git a/setup-maven/node_modules/underscore/LICENSE b/setup-maven/node_modules/underscore/LICENSE
new file mode 100644
index 0000000..ad0e71b
--- /dev/null
+++ b/setup-maven/node_modules/underscore/LICENSE
@@ -0,0 +1,23 @@
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+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/setup-maven/node_modules/underscore/README.md b/setup-maven/node_modules/underscore/README.md
new file mode 100644
index 0000000..c2ba259
--- /dev/null
+++ b/setup-maven/node_modules/underscore/README.md
@@ -0,0 +1,22 @@
+                       __
+                      /\ \                                                         __
+     __  __    ___    \_\ \     __   _ __   ____    ___    ___   _ __    __       /\_\    ____
+    /\ \/\ \ /' _ `\  /'_  \  /'__`\/\  __\/ ,__\  / ___\ / __`\/\  __\/'__`\     \/\ \  /',__\
+    \ \ \_\ \/\ \/\ \/\ \ \ \/\  __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\  __/  __  \ \ \/\__, `\
+     \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/
+      \/___/  \/_/\/_/\/__,_ /\/____/ \/_/ \/___/  \/____/\/___/  \/_/ \/____/\/_//\ \_\ \/___/
+                                                                                  \ \____/
+                                                                                   \/___/
+
+Underscore.js is a utility-belt library for JavaScript that provides
+support for the usual functional suspects (each, map, reduce, filter...)
+without extending any core JavaScript objects.
+
+For Docs, License, Tests, and pre-packed downloads, see:
+http://underscorejs.org
+
+Underscore is an open-sourced component of DocumentCloud:
+https://github.com/documentcloud
+
+Many thanks to our contributors:
+https://github.com/jashkenas/underscore/contributors
diff --git a/setup-maven/node_modules/underscore/package.json b/setup-maven/node_modules/underscore/package.json
new file mode 100644
index 0000000..ffa4c1d
--- /dev/null
+++ b/setup-maven/node_modules/underscore/package.json
@@ -0,0 +1,73 @@
+{
+  "_from": "underscore@1.8.3",
+  "_id": "underscore@1.8.3",
+  "_inBundle": false,
+  "_integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+  "_location": "/underscore",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "underscore@1.8.3",
+    "name": "underscore",
+    "escapedName": "underscore",
+    "rawSpec": "1.8.3",
+    "saveSpec": null,
+    "fetchSpec": "1.8.3"
+  },
+  "_requiredBy": [
+    "/typed-rest-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+  "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
+  "_spec": "underscore@1.8.3",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/typed-rest-client",
+  "author": {
+    "name": "Jeremy Ashkenas",
+    "email": "jeremy@documentcloud.org"
+  },
+  "bugs": {
+    "url": "https://github.com/jashkenas/underscore/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "JavaScript's functional programming helper library.",
+  "devDependencies": {
+    "docco": "*",
+    "eslint": "0.6.x",
+    "karma": "~0.12.31",
+    "karma-qunit": "~0.1.4",
+    "qunit-cli": "~0.2.0",
+    "uglify-js": "2.4.x"
+  },
+  "files": [
+    "underscore.js",
+    "underscore-min.js",
+    "underscore-min.map",
+    "LICENSE"
+  ],
+  "homepage": "http://underscorejs.org",
+  "keywords": [
+    "util",
+    "functional",
+    "server",
+    "client",
+    "browser"
+  ],
+  "license": "MIT",
+  "main": "underscore.js",
+  "name": "underscore",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/jashkenas/underscore.git"
+  },
+  "scripts": {
+    "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/    .*/\" -m --source-map underscore-min.map -o underscore-min.js",
+    "doc": "docco underscore.js",
+    "lint": "eslint underscore.js test/*.js",
+    "test": "npm run test-node && npm run lint",
+    "test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start",
+    "test-node": "qunit-cli test/*.js"
+  },
+  "version": "1.8.3"
+}
diff --git a/setup-maven/node_modules/underscore/underscore-min.js b/setup-maven/node_modules/underscore/underscore-min.js
new file mode 100644
index 0000000..f01025b
--- /dev/null
+++ b/setup-maven/node_modules/underscore/underscore-min.js
@@ -0,0 +1,6 @@
+//     Underscore.js 1.8.3
+//     http://underscorejs.org
+//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+//     Underscore may be freely distributed under the MIT license.
+(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])<u?i=a+1:o=a}return i},m.indexOf=r(1,m.findIndex,m.sortedIndex),m.lastIndexOf=r(-1,m.findLastIndex),m.range=function(n,t,r){null==t&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e<arguments.length;)i.push(arguments[e++]);return E(n,r,this,this,i)};return r},m.bindAll=function(n){var t,r,e=arguments.length;if(1>=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this);
+//# sourceMappingURL=underscore-min.map
\ No newline at end of file
diff --git a/setup-maven/node_modules/underscore/underscore-min.map b/setup-maven/node_modules/underscore/underscore-min.map
new file mode 100644
index 0000000..cf356bf
--- /dev/null
+++ b/setup-maven/node_modules/underscore/underscore-min.map
@@ -0,0 +1 @@
+{"version":3,"file":"underscore-min.js","sources":["underscore.js"],"names":["createReduce","dir","iterator","obj","iteratee","memo","keys","index","length","currentKey","context","optimizeCb","isArrayLike","_","arguments","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","idx","i","Math","max","min","slice","call","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","constructor","proto","isFunction","prototype","ObjProto","prop","has","contains","push","root","this","previousUnderscore","ArrayProto","Array","Object","FuncProto","Function","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","nativeBind","bind","nativeCreate","create","Ctor","_wrapped","exports","module","VERSION","func","argCount","value","other","collection","accumulator","apply","identity","isObject","matcher","property","Infinity","createAssigner","keysFunc","undefinedOnly","source","l","key","baseCreate","result","MAX_ARRAY_INDEX","pow","each","forEach","map","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","includes","include","fromIndex","guard","values","indexOf","invoke","method","args","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","n","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","indexBy","countBy","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","startIndex","output","isArguments","j","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","object","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","stop","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extend","extendOwn","assign","pick","oiteratee","omit","String","defaults","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","name","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n"," "," ","escapeChar","template","text","settings","oldSettings","offset","variable","render","e","data","argument","chain","instance","_chain","mixin","valueOf","toJSON","define","amd"],"mappings":";;;;CAKC,WA4KC,QAASA,GAAaC,GAGpB,QAASC,GAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,GAClD,KAAOD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAAK,CACjD,GAAIQ,GAAaH,EAAOA,EAAKC,GAASA,CACtCF,GAAOD,EAASC,EAAMF,EAAIM,GAAaA,EAAYN,GAErD,MAAOE,GAGT,MAAO,UAASF,EAAKC,EAAUC,EAAMK,GACnCN,EAAWO,EAAWP,EAAUM,EAAS,EACzC,IAAIJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBD,EAAQN,EAAM,EAAI,EAAIO,EAAS,CAMnC,OAJIM,WAAUN,OAAS,IACrBH,EAAOF,EAAIG,EAAOA,EAAKC,GAASA,GAChCA,GAASN,GAEJC,EAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,IA+ZtD,QAASO,GAA2Bd,GAClC,MAAO,UAASe,EAAOC,EAAWP,GAChCO,EAAYC,EAAGD,EAAWP,EAG1B,KAFA,GAAIF,GAASW,EAAUH,GACnBT,EAAQN,EAAM,EAAI,EAAIO,EAAS,EAC5BD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAC5C,GAAIgB,EAAUD,EAAMT,GAAQA,EAAOS,GAAQ,MAAOT,EAEpD,QAAQ,GAsBZ,QAASa,GAAkBnB,EAAKoB,EAAeC,GAC7C,MAAO,UAASN,EAAOO,EAAMC,GAC3B,GAAIC,GAAI,EAAGjB,EAASW,EAAUH,EAC9B,IAAkB,gBAAPQ,GACLvB,EAAM,EACNwB,EAAID,GAAO,EAAIA,EAAME,KAAKC,IAAIH,EAAMhB,EAAQiB,GAE5CjB,EAASgB,GAAO,EAAIE,KAAKE,IAAIJ,EAAM,EAAGhB,GAAUgB,EAAMhB,EAAS,MAE9D,IAAIc,GAAeE,GAAOhB,EAE/B,MADAgB,GAAMF,EAAYN,EAAOO,GAClBP,EAAMQ,KAASD,EAAOC,GAAO,CAEtC,IAAID,IAASA,EAEX,MADAC,GAAMH,EAAcQ,EAAMC,KAAKd,EAAOS,EAAGjB,GAASK,EAAEkB,OAC7CP,GAAO,EAAIA,EAAMC,GAAK,CAE/B,KAAKD,EAAMvB,EAAM,EAAIwB,EAAIjB,EAAS,EAAGgB,GAAO,GAAWhB,EAANgB,EAAcA,GAAOvB,EACpE,GAAIe,EAAMQ,KAASD,EAAM,MAAOC,EAElC,QAAQ,GAqPZ,QAASQ,GAAoB7B,EAAKG,GAChC,GAAI2B,GAAaC,EAAmB1B,OAChC2B,EAAchC,EAAIgC,YAClBC,EAASvB,EAAEwB,WAAWF,IAAgBA,EAAYG,WAAcC,EAGhEC,EAAO,aAGX,KAFI3B,EAAE4B,IAAItC,EAAKqC,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAAOlC,EAAKqC,KAAKH,GAEpDP,KACLO,EAAON,EAAmBD,GACtBO,IAAQrC,IAAOA,EAAIqC,KAAUJ,EAAMI,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAChElC,EAAKqC,KAAKH,GA74BhB,GAAII,GAAOC,KAGPC,EAAqBF,EAAK/B,EAG1BkC,EAAaC,MAAMV,UAAWC,EAAWU,OAAOX,UAAWY,EAAYC,SAASb,UAIlFK,EAAmBI,EAAWJ,KAC9Bd,EAAmBkB,EAAWlB,MAC9BuB,EAAmBb,EAASa,SAC5BC,EAAmBd,EAASc,eAK5BC,EAAqBN,MAAMO,QAC3BC,EAAqBP,OAAO3C,KAC5BmD,EAAqBP,EAAUQ,KAC/BC,EAAqBV,OAAOW,OAG1BC,EAAO,aAGPhD,EAAI,SAASV,GACf,MAAIA,aAAeU,GAAUV,EACvB0C,eAAgBhC,QACtBgC,KAAKiB,SAAW3D,GADiB,GAAIU,GAAEV,GAOlB,oBAAZ4D,UACa,mBAAXC,SAA0BA,OAAOD,UAC1CA,QAAUC,OAAOD,QAAUlD,GAE7BkD,QAAQlD,EAAIA,GAEZ+B,EAAK/B,EAAIA,EAIXA,EAAEoD,QAAU,OAKZ,IAAItD,GAAa,SAASuD,EAAMxD,EAASyD,GACvC,GAAIzD,QAAiB,GAAG,MAAOwD,EAC/B,QAAoB,MAAZC,EAAmB,EAAIA,GAC7B,IAAK,GAAG,MAAO,UAASC,GACtB,MAAOF,GAAKpC,KAAKpB,EAAS0D,GAE5B,KAAK,GAAG,MAAO,UAASA,EAAOC,GAC7B,MAAOH,GAAKpC,KAAKpB,EAAS0D,EAAOC,GAEnC,KAAK,GAAG,MAAO,UAASD,EAAO7D,EAAO+D,GACpC,MAAOJ,GAAKpC,KAAKpB,EAAS0D,EAAO7D,EAAO+D,GAE1C,KAAK,GAAG,MAAO,UAASC,EAAaH,EAAO7D,EAAO+D,GACjD,MAAOJ,GAAKpC,KAAKpB,EAAS6D,EAAaH,EAAO7D,EAAO+D,IAGzD,MAAO,YACL,MAAOJ,GAAKM,MAAM9D,EAASI,aAO3BI,EAAK,SAASkD,EAAO1D,EAASyD,GAChC,MAAa,OAATC,EAAsBvD,EAAE4D,SACxB5D,EAAEwB,WAAW+B,GAAezD,EAAWyD,EAAO1D,EAASyD,GACvDtD,EAAE6D,SAASN,GAAevD,EAAE8D,QAAQP,GACjCvD,EAAE+D,SAASR,GAEpBvD,GAAET,SAAW,SAASgE,EAAO1D,GAC3B,MAAOQ,GAAGkD,EAAO1D,EAASmE,KAI5B,IAAIC,GAAiB,SAASC,EAAUC,GACtC,MAAO,UAAS7E,GACd,GAAIK,GAASM,UAAUN,MACvB,IAAa,EAATA,GAAqB,MAAPL,EAAa,MAAOA,EACtC,KAAK,GAAII,GAAQ,EAAWC,EAARD,EAAgBA,IAIlC,IAAK,GAHD0E,GAASnE,UAAUP,GACnBD,EAAOyE,EAASE,GAChBC,EAAI5E,EAAKE,OACJiB,EAAI,EAAOyD,EAAJzD,EAAOA,IAAK,CAC1B,GAAI0D,GAAM7E,EAAKmB,EACVuD,IAAiB7E,EAAIgF,SAAc,KAAGhF,EAAIgF,GAAOF,EAAOE,IAGjE,MAAOhF,KAKPiF,EAAa,SAAS9C,GACxB,IAAKzB,EAAE6D,SAASpC,GAAY,QAC5B,IAAIqB,EAAc,MAAOA,GAAarB,EACtCuB,GAAKvB,UAAYA,CACjB,IAAI+C,GAAS,GAAIxB,EAEjB,OADAA,GAAKvB,UAAY,KACV+C,GAGLT,EAAW,SAASO,GACtB,MAAO,UAAShF,GACd,MAAc,OAAPA,MAAmB,GAAIA,EAAIgF,KAQlCG,EAAkB5D,KAAK6D,IAAI,EAAG,IAAM,EACpCpE,EAAYyD,EAAS,UACrBhE,EAAc,SAAS0D,GACzB,GAAI9D,GAASW,EAAUmD,EACvB,OAAwB,gBAAV9D,IAAsBA,GAAU,GAAe8E,GAAV9E,EASrDK,GAAE2E,KAAO3E,EAAE4E,QAAU,SAAStF,EAAKC,EAAUM,GAC3CN,EAAWO,EAAWP,EAAUM,EAChC,IAAIe,GAAGjB,CACP,IAAII,EAAYT,GACd,IAAKsB,EAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC3CrB,EAASD,EAAIsB,GAAIA,EAAGtB,OAEjB,CACL,GAAIG,GAAOO,EAAEP,KAAKH,EAClB,KAAKsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAC5CrB,EAASD,EAAIG,EAAKmB,IAAKnB,EAAKmB,GAAItB,GAGpC,MAAOA,IAITU,EAAE6E,IAAM7E,EAAE8E,QAAU,SAASxF,EAAKC,EAAUM,GAC1CN,EAAWc,EAAGd,EAAUM,EAIxB,KAAK,GAHDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBoF,EAAU5C,MAAMxC,GACXD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtCqF,GAAQrF,GAASH,EAASD,EAAIM,GAAaA,EAAYN,GAEzD,MAAOyF,IA+BT/E,EAAEgF,OAAShF,EAAEiF,MAAQjF,EAAEkF,OAAS/F,EAAa,GAG7Ca,EAAEmF,YAAcnF,EAAEoF,MAAQjG,GAAc,GAGxCa,EAAEqF,KAAOrF,EAAEsF,OAAS,SAAShG,EAAKc,EAAWP,GAC3C,GAAIyE,EAMJ,OAJEA,GADEvE,EAAYT,GACRU,EAAEuF,UAAUjG,EAAKc,EAAWP,GAE5BG,EAAEwF,QAAQlG,EAAKc,EAAWP,GAE9ByE,QAAa,IAAKA,KAAS,EAAUhF,EAAIgF,GAA7C,QAKFtE,EAAEyF,OAASzF,EAAE0F,OAAS,SAASpG,EAAKc,EAAWP,GAC7C,GAAIkF,KAKJ,OAJA3E,GAAYC,EAAGD,EAAWP,GAC1BG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC7BvF,EAAUmD,EAAO7D,EAAOiG,IAAOZ,EAAQjD,KAAKyB,KAE3CwB,GAIT/E,EAAE4F,OAAS,SAAStG,EAAKc,EAAWP,GAClC,MAAOG,GAAEyF,OAAOnG,EAAKU,EAAE6F,OAAOxF,EAAGD,IAAaP,IAKhDG,EAAE8F,MAAQ9F,EAAE+F,IAAM,SAASzG,EAAKc,EAAWP,GACzCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,KAAKU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE3D,OAAO,GAKTU,EAAEgG,KAAOhG,EAAEiG,IAAM,SAAS3G,EAAKc,EAAWP,GACxCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,IAAIU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE1D,OAAO,GAKTU,EAAE6B,SAAW7B,EAAEkG,SAAWlG,EAAEmG,QAAU,SAAS7G,EAAKoB,EAAM0F,EAAWC,GAGnE,MAFKtG,GAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,KACd,gBAAb8G,IAAyBC,KAAOD,EAAY,GAChDpG,EAAEuG,QAAQjH,EAAKoB,EAAM0F,IAAc,GAI5CpG,EAAEwG,OAAS,SAASlH,EAAKmH,GACvB,GAAIC,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7B0G,EAAS3G,EAAEwB,WAAWiF,EAC1B,OAAOzG,GAAE6E,IAAIvF,EAAK,SAASiE,GACzB,GAAIF,GAAOsD,EAASF,EAASlD,EAAMkD,EACnC,OAAe,OAARpD,EAAeA,EAAOA,EAAKM,MAAMJ,EAAOmD,MAKnD1G,EAAE4G,MAAQ,SAAStH,EAAKgF,GACtB,MAAOtE,GAAE6E,IAAIvF,EAAKU,EAAE+D,SAASO,KAK/BtE,EAAE6G,MAAQ,SAASvH,EAAKwH,GACtB,MAAO9G,GAAEyF,OAAOnG,EAAKU,EAAE8D,QAAQgD,KAKjC9G,EAAE+G,UAAY,SAASzH,EAAKwH,GAC1B,MAAO9G,GAAEqF,KAAK/F,EAAKU,EAAE8D,QAAQgD,KAI/B9G,EAAEc,IAAM,SAASxB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,GAAUR,IAAUiD,GAAgBjD,GAExC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACR2C,EAAQiB,IACVA,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IAC9BqB,EAAWC,GAAgBD,KAAchD,KAAYQ,KAAYR,OACnEQ,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAITxE,EAAEe,IAAM,SAASzB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,EAASR,IAAUiD,EAAejD,GAEtC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACA4D,EAARjB,IACFiB,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IACnBsB,EAAXD,GAAwChD,MAAbgD,GAAoChD,MAAXQ,KACtDA,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAKTxE,EAAEkH,QAAU,SAAS5H,GAInB,IAAK,GAAe6H,GAHhBC,EAAMrH,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,GACxCK,EAASyH,EAAIzH,OACb0H,EAAWlF,MAAMxC,GACZD,EAAQ,EAAiBC,EAARD,EAAgBA,IACxCyH,EAAOnH,EAAEsH,OAAO,EAAG5H,GACfyH,IAASzH,IAAO2H,EAAS3H,GAAS2H,EAASF,IAC/CE,EAASF,GAAQC,EAAI1H,EAEvB,OAAO2H,IAMTrH,EAAEuH,OAAS,SAASjI,EAAKkI,EAAGnB,GAC1B,MAAS,OAALmB,GAAanB,GACVtG,EAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,IAC/BA,EAAIU,EAAEsH,OAAOhI,EAAIK,OAAS,KAE5BK,EAAEkH,QAAQ5H,GAAK0B,MAAM,EAAGH,KAAKC,IAAI,EAAG0G,KAI7CxH,EAAEyH,OAAS,SAASnI,EAAKC,EAAUM,GAEjC,MADAN,GAAWc,EAAGd,EAAUM,GACjBG,EAAE4G,MAAM5G,EAAE6E,IAAIvF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC/C,OACEpC,MAAOA,EACP7D,MAAOA,EACPgI,SAAUnI,EAASgE,EAAO7D,EAAOiG,MAElCgC,KAAK,SAASC,EAAMC,GACrB,GAAIC,GAAIF,EAAKF,SACTK,EAAIF,EAAMH,QACd,IAAII,IAAMC,EAAG,CACX,GAAID,EAAIC,GAAKD,QAAW,GAAG,MAAO,EAClC,IAAQC,EAAJD,GAASC,QAAW,GAAG,OAAQ,EAErC,MAAOH,GAAKlI,MAAQmI,EAAMnI,QACxB,SAIN,IAAIsI,GAAQ,SAASC,GACnB,MAAO,UAAS3I,EAAKC,EAAUM,GAC7B,GAAI2E,KAMJ,OALAjF,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,GAC1B,GAAI4E,GAAM/E,EAASgE,EAAO7D,EAAOJ,EACjC2I,GAASzD,EAAQjB,EAAOe,KAEnBE,GAMXxE,GAAEkI,QAAUF,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,GAAKxC,KAAKyB,GAAaiB,EAAOF,IAAQf,KAKvEvD,EAAEmI,QAAUH,EAAM,SAASxD,EAAQjB,EAAOe,GACxCE,EAAOF,GAAOf,IAMhBvD,EAAEoI,QAAUJ,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,KAAaE,EAAOF,GAAO,IAI5DtE,EAAEqI,QAAU,SAAS/I,GACnB,MAAKA,GACDU,EAAE0C,QAAQpD,GAAa0B,EAAMC,KAAK3B,GAClCS,EAAYT,GAAaU,EAAE6E,IAAIvF,EAAKU,EAAE4D,UACnC5D,EAAEsG,OAAOhH,OAIlBU,EAAEsI,KAAO,SAAShJ,GAChB,MAAW,OAAPA,EAAoB,EACjBS,EAAYT,GAAOA,EAAIK,OAASK,EAAEP,KAAKH,GAAKK,QAKrDK,EAAEuI,UAAY,SAASjJ,EAAKc,EAAWP,GACrCO,EAAYC,EAAGD,EAAWP,EAC1B,IAAI2I,MAAWC,IAIf,OAHAzI,GAAE2E,KAAKrF,EAAK,SAASiE,EAAOe,EAAKhF,IAC9Bc,EAAUmD,EAAOe,EAAKhF,GAAOkJ,EAAOC,GAAM3G,KAAKyB,MAE1CiF,EAAMC,IAShBzI,EAAE0I,MAAQ1I,EAAE2I,KAAO3I,EAAE4I,KAAO,SAASzI,EAAOqH,EAAGnB,GAC7C,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAM,GAC9BH,EAAE6I,QAAQ1I,EAAOA,EAAMR,OAAS6H,IAMzCxH,EAAE6I,QAAU,SAAS1I,EAAOqH,EAAGnB,GAC7B,MAAOrF,GAAMC,KAAKd,EAAO,EAAGU,KAAKC,IAAI,EAAGX,EAAMR,QAAe,MAAL6H,GAAanB,EAAQ,EAAImB,MAKnFxH,EAAE8I,KAAO,SAAS3I,EAAOqH,EAAGnB,GAC1B,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAMA,EAAMR,OAAS,GAC7CK,EAAE+I,KAAK5I,EAAOU,KAAKC,IAAI,EAAGX,EAAMR,OAAS6H,KAMlDxH,EAAE+I,KAAO/I,EAAEgJ,KAAOhJ,EAAEiJ,KAAO,SAAS9I,EAAOqH,EAAGnB,GAC5C,MAAOrF,GAAMC,KAAKd,EAAY,MAALqH,GAAanB,EAAQ,EAAImB,IAIpDxH,EAAEkJ,QAAU,SAAS/I,GACnB,MAAOH,GAAEyF,OAAOtF,EAAOH,EAAE4D,UAI3B,IAAIuF,GAAU,SAASC,EAAOC,EAASC,EAAQC,GAE7C,IAAK,GADDC,MAAa7I,EAAM,EACdC,EAAI2I,GAAc,EAAG5J,EAASW,EAAU8I,GAAYzJ,EAAJiB,EAAYA,IAAK,CACxE,GAAI2C,GAAQ6F,EAAMxI,EAClB,IAAIb,EAAYwD,KAAWvD,EAAE0C,QAAQa,IAAUvD,EAAEyJ,YAAYlG,IAAS,CAE/D8F,IAAS9F,EAAQ4F,EAAQ5F,EAAO8F,EAASC,GAC9C,IAAII,GAAI,EAAGC,EAAMpG,EAAM5D,MAEvB,KADA6J,EAAO7J,QAAUgK,EACNA,EAAJD,GACLF,EAAO7I,KAAS4C,EAAMmG,SAEdJ,KACVE,EAAO7I,KAAS4C,GAGpB,MAAOiG,GAITxJ,GAAEmJ,QAAU,SAAShJ,EAAOkJ,GAC1B,MAAOF,GAAQhJ,EAAOkJ,GAAS,IAIjCrJ,EAAE4J,QAAU,SAASzJ,GACnB,MAAOH,GAAE6J,WAAW1J,EAAOa,EAAMC,KAAKhB,UAAW,KAMnDD,EAAE8J,KAAO9J,EAAE+J,OAAS,SAAS5J,EAAO6J,EAAUzK,EAAUM,GACjDG,EAAEiK,UAAUD,KACfnK,EAAUN,EACVA,EAAWyK,EACXA,GAAW,GAEG,MAAZzK,IAAkBA,EAAWc,EAAGd,EAAUM,GAG9C,KAAK,GAFD2E,MACA0F,KACKtJ,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAI2C,GAAQpD,EAAMS,GACdoG,EAAWzH,EAAWA,EAASgE,EAAO3C,EAAGT,GAASoD,CAClDyG,IACGpJ,GAAKsJ,IAASlD,GAAUxC,EAAO1C,KAAKyB,GACzC2G,EAAOlD,GACEzH,EACJS,EAAE6B,SAASqI,EAAMlD,KACpBkD,EAAKpI,KAAKkF,GACVxC,EAAO1C,KAAKyB,IAEJvD,EAAE6B,SAAS2C,EAAQjB,IAC7BiB,EAAO1C,KAAKyB,GAGhB,MAAOiB,IAKTxE,EAAEmK,MAAQ,WACR,MAAOnK,GAAE8J,KAAKX,EAAQlJ,WAAW,GAAM,KAKzCD,EAAEoK,aAAe,SAASjK,GAGxB,IAAK,GAFDqE,MACA6F,EAAapK,UAAUN,OAClBiB,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAIF,GAAOP,EAAMS,EACjB,KAAIZ,EAAE6B,SAAS2C,EAAQ9D,GAAvB,CACA,IAAK,GAAIgJ,GAAI,EAAOW,EAAJX,GACT1J,EAAE6B,SAAS5B,UAAUyJ,GAAIhJ,GADAgJ,KAG5BA,IAAMW,GAAY7F,EAAO1C,KAAKpB,IAEpC,MAAO8D,IAKTxE,EAAE6J,WAAa,SAAS1J,GACtB,GAAI4I,GAAOI,EAAQlJ,WAAW,GAAM,EAAM,EAC1C,OAAOD,GAAEyF,OAAOtF,EAAO,SAASoD,GAC9B,OAAQvD,EAAE6B,SAASkH,EAAMxF,MAM7BvD,EAAEsK,IAAM,WACN,MAAOtK,GAAEuK,MAAMtK,YAKjBD,EAAEuK,MAAQ,SAASpK,GAIjB,IAAK,GAHDR,GAASQ,GAASH,EAAEc,IAAIX,EAAOG,GAAWX,QAAU,EACpD6E,EAASrC,MAAMxC,GAEVD,EAAQ,EAAWC,EAARD,EAAgBA,IAClC8E,EAAO9E,GAASM,EAAE4G,MAAMzG,EAAOT,EAEjC,OAAO8E,IAMTxE,EAAEwK,OAAS,SAAS7E,EAAMW,GAExB,IAAK,GADD9B,MACK5D,EAAI,EAAGjB,EAASW,EAAUqF,GAAWhG,EAAJiB,EAAYA,IAChD0F,EACF9B,EAAOmB,EAAK/E,IAAM0F,EAAO1F,GAEzB4D,EAAOmB,EAAK/E,GAAG,IAAM+E,EAAK/E,GAAG,EAGjC,OAAO4D,IAiBTxE,EAAEuF,UAAYrF,EAA2B,GACzCF,EAAEyK,cAAgBvK,GAA4B,GAI9CF,EAAES,YAAc,SAASN,EAAOb,EAAKC,EAAUM,GAC7CN,EAAWc,EAAGd,EAAUM,EAAS,EAGjC,KAFA,GAAI0D,GAAQhE,EAASD,GACjBoL,EAAM,EAAGC,EAAOrK,EAAUH,GACjBwK,EAAND,GAAY,CACjB,GAAIE,GAAM/J,KAAKgK,OAAOH,EAAMC,GAAQ,EAChCpL,GAASY,EAAMyK,IAAQrH,EAAOmH,EAAME,EAAM,EAAQD,EAAOC,EAE/D,MAAOF,IAgCT1K,EAAEuG,QAAUhG,EAAkB,EAAGP,EAAEuF,UAAWvF,EAAES,aAChDT,EAAE8K,YAAcvK,GAAmB,EAAGP,EAAEyK,eAKxCzK,EAAE+K,MAAQ,SAASC,EAAOC,EAAMC,GAClB,MAARD,IACFA,EAAOD,GAAS,EAChBA,EAAQ,GAEVE,EAAOA,GAAQ,CAKf,KAAK,GAHDvL,GAASkB,KAAKC,IAAID,KAAKsK,MAAMF,EAAOD,GAASE,GAAO,GACpDH,EAAQ5I,MAAMxC,GAETgB,EAAM,EAAShB,EAANgB,EAAcA,IAAOqK,GAASE,EAC9CH,EAAMpK,GAAOqK,CAGf,OAAOD,GAQT,IAAIK,GAAe,SAASC,EAAYC,EAAWzL,EAAS0L,EAAgB7E,GAC1E,KAAM6E,YAA0BD,IAAY,MAAOD,GAAW1H,MAAM9D,EAAS6G,EAC7E,IAAI8E,GAAOjH,EAAW8G,EAAW5J,WAC7B+C,EAAS6G,EAAW1H,MAAM6H,EAAM9E,EACpC,OAAI1G,GAAE6D,SAASW,GAAgBA,EACxBgH,EAMTxL,GAAE6C,KAAO,SAASQ,EAAMxD,GACtB,GAAI+C,GAAcS,EAAKR,OAASD,EAAY,MAAOA,GAAWe,MAAMN,EAAMrC,EAAMC,KAAKhB,UAAW,GAChG,KAAKD,EAAEwB,WAAW6B,GAAO,KAAM,IAAIoI,WAAU,oCAC7C,IAAI/E,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7ByL,EAAQ,WACV,MAAON,GAAa/H,EAAMqI,EAAO7L,EAASmC,KAAM0E,EAAKiF,OAAO3K,EAAMC,KAAKhB,aAEzE,OAAOyL,IAMT1L,EAAE4L,QAAU,SAASvI,GACnB,GAAIwI,GAAY7K,EAAMC,KAAKhB,UAAW,GAClCyL,EAAQ,WAGV,IAAK,GAFDI,GAAW,EAAGnM,EAASkM,EAAUlM,OACjC+G,EAAOvE,MAAMxC,GACRiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B8F,EAAK9F,GAAKiL,EAAUjL,KAAOZ,EAAIC,UAAU6L,KAAcD,EAAUjL,EAEnE,MAAOkL,EAAW7L,UAAUN,QAAQ+G,EAAK5E,KAAK7B,UAAU6L,KACxD,OAAOV,GAAa/H,EAAMqI,EAAO1J,KAAMA,KAAM0E,GAE/C,OAAOgF,IAMT1L,EAAE+L,QAAU,SAASzM,GACnB,GAAIsB,GAA8B0D,EAA3B3E,EAASM,UAAUN,MAC1B,IAAc,GAAVA,EAAa,KAAM,IAAIqM,OAAM,wCACjC,KAAKpL,EAAI,EAAOjB,EAAJiB,EAAYA,IACtB0D,EAAMrE,UAAUW,GAChBtB,EAAIgF,GAAOtE,EAAE6C,KAAKvD,EAAIgF,GAAMhF,EAE9B,OAAOA,IAITU,EAAEiM,QAAU,SAAS5I,EAAM6I,GACzB,GAAID,GAAU,SAAS3H,GACrB,GAAI6H,GAAQF,EAAQE,MAChBC,EAAU,IAAMF,EAASA,EAAOvI,MAAM3B,KAAM/B,WAAaqE,EAE7D,OADKtE,GAAE4B,IAAIuK,EAAOC,KAAUD,EAAMC,GAAW/I,EAAKM,MAAM3B,KAAM/B,YACvDkM,EAAMC,GAGf,OADAH,GAAQE,SACDF,GAKTjM,EAAEqM,MAAQ,SAAShJ,EAAMiJ,GACvB,GAAI5F,GAAO1F,EAAMC,KAAKhB,UAAW,EACjC,OAAOsM,YAAW,WAChB,MAAOlJ,GAAKM,MAAM,KAAM+C,IACvB4F,IAKLtM,EAAEwM,MAAQxM,EAAE4L,QAAQ5L,EAAEqM,MAAOrM,EAAG,GAOhCA,EAAEyM,SAAW,SAASpJ,EAAMiJ,EAAMI,GAChC,GAAI7M,GAAS6G,EAAMlC,EACfmI,EAAU,KACVC,EAAW,CACVF,KAASA,KACd,IAAIG,GAAQ,WACVD,EAAWF,EAAQI,WAAY,EAAQ,EAAI9M,EAAE+M,MAC7CJ,EAAU,KACVnI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,MAEjC,OAAO,YACL,GAAIqG,GAAM/M,EAAE+M,KACPH,IAAYF,EAAQI,WAAY,IAAOF,EAAWG,EACvD,IAAIC,GAAYV,GAAQS,EAAMH,EAc9B,OAbA/M,GAAUmC,KACV0E,EAAOzG,UACU,GAAb+M,GAAkBA,EAAYV,GAC5BK,IACFM,aAAaN,GACbA,EAAU,MAEZC,EAAWG,EACXvI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,OACrBiG,GAAWD,EAAQQ,YAAa,IAC1CP,EAAUJ,WAAWM,EAAOG,IAEvBxI,IAQXxE,EAAEmN,SAAW,SAAS9J,EAAMiJ,EAAMc,GAChC,GAAIT,GAASjG,EAAM7G,EAASwN,EAAW7I,EAEnCqI,EAAQ,WACV,GAAI/D,GAAO9I,EAAE+M,MAAQM,CAEVf,GAAPxD,GAAeA,GAAQ,EACzB6D,EAAUJ,WAAWM,EAAOP,EAAOxD,IAEnC6D,EAAU,KACLS,IACH5I,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,QAKrC,OAAO,YACL7G,EAAUmC,KACV0E,EAAOzG,UACPoN,EAAYrN,EAAE+M,KACd,IAAIO,GAAUF,IAAcT,CAO5B,OANKA,KAASA,EAAUJ,WAAWM,EAAOP,IACtCgB,IACF9I,EAASnB,EAAKM,MAAM9D,EAAS6G,GAC7B7G,EAAU6G,EAAO,MAGZlC,IAOXxE,EAAEuN,KAAO,SAASlK,EAAMmK,GACtB,MAAOxN,GAAE4L,QAAQ4B,EAASnK,IAI5BrD,EAAE6F,OAAS,SAASzF,GAClB,MAAO,YACL,OAAQA,EAAUuD,MAAM3B,KAAM/B,aAMlCD,EAAEyN,QAAU,WACV,GAAI/G,GAAOzG,UACP+K,EAAQtE,EAAK/G,OAAS,CAC1B,OAAO,YAGL,IAFA,GAAIiB,GAAIoK,EACJxG,EAASkC,EAAKsE,GAAOrH,MAAM3B,KAAM/B,WAC9BW,KAAK4D,EAASkC,EAAK9F,GAAGK,KAAKe,KAAMwC,EACxC,OAAOA,KAKXxE,EAAE0N,MAAQ,SAASC,EAAOtK,GACxB,MAAO,YACL,QAAMsK,EAAQ,EACLtK,EAAKM,MAAM3B,KAAM/B,WAD1B,SAOJD,EAAE4N,OAAS,SAASD,EAAOtK,GACzB,GAAI7D,EACJ,OAAO,YAKL,QAJMmO,EAAQ,IACZnO,EAAO6D,EAAKM,MAAM3B,KAAM/B,YAEb,GAAT0N,IAAYtK,EAAO,MAChB7D,IAMXQ,EAAE6N,KAAO7N,EAAE4L,QAAQ5L,EAAE4N,OAAQ,EAM7B,IAAIE,KAAevL,SAAU,MAAMwL,qBAAqB,YACpD1M,GAAsB,UAAW,gBAAiB,WAClC,uBAAwB,iBAAkB,iBAqB9DrB,GAAEP,KAAO,SAASH,GAChB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIqD,EAAY,MAAOA,GAAWrD,EAClC,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAASU,EAAE4B,IAAItC,EAAKgF,IAAM7E,EAAKqC,KAAKwC,EAGpD,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEgO,QAAU,SAAS1O,GACnB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAAKG,EAAKqC,KAAKwC,EAG/B,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEsG,OAAS,SAAShH,GAIlB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACd2G,EAASnE,MAAMxC,GACViB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B0F,EAAO1F,GAAKtB,EAAIG,EAAKmB,GAEvB,OAAO0F,IAKTtG,EAAEiO,UAAY,SAAS3O,EAAKC,EAAUM,GACpCN,EAAWc,EAAGd,EAAUM,EAKtB,KAAK,GADDD,GAHFH,EAAQO,EAAEP,KAAKH,GACbK,EAASF,EAAKE,OACdoF,KAEKrF,EAAQ,EAAWC,EAARD,EAAgBA,IAClCE,EAAaH,EAAKC,GAClBqF,EAAQnF,GAAcL,EAASD,EAAIM,GAAaA,EAAYN,EAE9D,OAAOyF,IAIX/E,EAAEkO,MAAQ,SAAS5O,GAIjB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACduO,EAAQ/L,MAAMxC,GACTiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1BsN,EAAMtN,IAAMnB,EAAKmB,GAAItB,EAAIG,EAAKmB,IAEhC,OAAOsN,IAITlO,EAAEmO,OAAS,SAAS7O,GAGlB,IAAK,GAFDkF,MACA/E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAChD4D,EAAOlF,EAAIG,EAAKmB,KAAOnB,EAAKmB,EAE9B,OAAO4D,IAKTxE,EAAEoO,UAAYpO,EAAEqO,QAAU,SAAS/O,GACjC,GAAIgP,KACJ,KAAK,GAAIhK,KAAOhF,GACVU,EAAEwB,WAAWlC,EAAIgF,KAAOgK,EAAMxM,KAAKwC,EAEzC,OAAOgK,GAAM3G,QAIf3H,EAAEuO,OAAStK,EAAejE,EAAEgO,SAI5BhO,EAAEwO,UAAYxO,EAAEyO,OAASxK,EAAejE,EAAEP,MAG1CO,EAAEwF,QAAU,SAASlG,EAAKc,EAAWP,GACnCO,EAAYC,EAAGD,EAAWP,EAE1B,KAAK,GADmByE,GAApB7E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAEhD,GADA0D,EAAM7E,EAAKmB,GACPR,EAAUd,EAAIgF,GAAMA,EAAKhF,GAAM,MAAOgF,IAK9CtE,EAAE0O,KAAO,SAASlE,EAAQmE,EAAW9O,GACnC,GAA+BN,GAAUE,EAArC+E,KAAalF,EAAMkL,CACvB,IAAW,MAAPlL,EAAa,MAAOkF,EACpBxE,GAAEwB,WAAWmN,IACflP,EAAOO,EAAEgO,QAAQ1O,GACjBC,EAAWO,EAAW6O,EAAW9O,KAEjCJ,EAAO0J,EAAQlJ,WAAW,GAAO,EAAO,GACxCV,EAAW,SAASgE,EAAOe,EAAKhF,GAAO,MAAOgF,KAAOhF,IACrDA,EAAM8C,OAAO9C,GAEf,KAAK,GAAIsB,GAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAAK,CACrD,GAAI0D,GAAM7E,EAAKmB,GACX2C,EAAQjE,EAAIgF,EACZ/E,GAASgE,EAAOe,EAAKhF,KAAMkF,EAAOF,GAAOf,GAE/C,MAAOiB,IAITxE,EAAE4O,KAAO,SAAStP,EAAKC,EAAUM,GAC/B,GAAIG,EAAEwB,WAAWjC,GACfA,EAAWS,EAAE6F,OAAOtG,OACf,CACL,GAAIE,GAAOO,EAAE6E,IAAIsE,EAAQlJ,WAAW,GAAO,EAAO,GAAI4O,OACtDtP,GAAW,SAASgE,EAAOe,GACzB,OAAQtE,EAAE6B,SAASpC,EAAM6E,IAG7B,MAAOtE,GAAE0O,KAAKpP,EAAKC,EAAUM,IAI/BG,EAAE8O,SAAW7K,EAAejE,EAAEgO,SAAS,GAKvChO,EAAE+C,OAAS,SAAStB,EAAWsN,GAC7B,GAAIvK,GAASD,EAAW9C,EAExB,OADIsN,IAAO/O,EAAEwO,UAAUhK,EAAQuK,GACxBvK,GAITxE,EAAEgP,MAAQ,SAAS1P,GACjB,MAAKU,GAAE6D,SAASvE,GACTU,EAAE0C,QAAQpD,GAAOA,EAAI0B,QAAUhB,EAAEuO,UAAWjP,GADtBA,GAO/BU,EAAEiP,IAAM,SAAS3P,EAAK4P,GAEpB,MADAA,GAAY5P,GACLA,GAITU,EAAEmP,QAAU,SAAS3E,EAAQ1D,GAC3B,GAAIrH,GAAOO,EAAEP,KAAKqH,GAAQnH,EAASF,EAAKE,MACxC,IAAc,MAAV6K,EAAgB,OAAQ7K,CAE5B,KAAK,GADDL,GAAM8C,OAAOoI,GACR5J,EAAI,EAAOjB,EAAJiB,EAAYA,IAAK,CAC/B,GAAI0D,GAAM7E,EAAKmB,EACf,IAAIkG,EAAMxC,KAAShF,EAAIgF,MAAUA,IAAOhF,IAAM,OAAO,EAEvD,OAAO,EAKT,IAAI8P,GAAK,SAAStH,EAAGC,EAAGsH,EAAQC,GAG9B,GAAIxH,IAAMC,EAAG,MAAa,KAAND,GAAW,EAAIA,IAAM,EAAIC,CAE7C,IAAS,MAALD,GAAkB,MAALC,EAAW,MAAOD,KAAMC,CAErCD,aAAa9H,KAAG8H,EAAIA,EAAE7E,UACtB8E,YAAa/H,KAAG+H,EAAIA,EAAE9E,SAE1B,IAAIsM,GAAYhN,EAAStB,KAAK6G,EAC9B,IAAIyH,IAAchN,EAAStB,KAAK8G,GAAI,OAAO,CAC3C,QAAQwH,GAEN,IAAK,kBAEL,IAAK,kBAGH,MAAO,GAAKzH,GAAM,GAAKC,CACzB,KAAK,kBAGH,OAAKD,KAAOA,GAAWC,KAAOA,EAEhB,KAAND,EAAU,GAAKA,IAAM,EAAIC,GAAKD,KAAOC,CAC/C,KAAK,gBACL,IAAK,mBAIH,OAAQD,KAAOC,EAGnB,GAAIyH,GAA0B,mBAAdD,CAChB,KAAKC,EAAW,CACd,GAAgB,gBAAL1H,IAA6B,gBAALC,GAAe,OAAO,CAIzD,IAAI0H,GAAQ3H,EAAExG,YAAaoO,EAAQ3H,EAAEzG,WACrC,IAAImO,IAAUC,KAAW1P,EAAEwB,WAAWiO,IAAUA,YAAiBA,IACxCzP,EAAEwB,WAAWkO,IAAUA,YAAiBA,KACzC,eAAiB5H,IAAK,eAAiBC,GAC7D,OAAO,EAQXsH,EAASA,MACTC,EAASA,KAET,KADA,GAAI3P,GAAS0P,EAAO1P,OACbA,KAGL,GAAI0P,EAAO1P,KAAYmI,EAAG,MAAOwH,GAAO3P,KAAYoI,CAQtD,IAJAsH,EAAOvN,KAAKgG,GACZwH,EAAOxN,KAAKiG,GAGRyH,EAAW,CAGb,GADA7P,EAASmI,EAAEnI,OACPA,IAAWoI,EAAEpI,OAAQ,OAAO,CAEhC,MAAOA,KACL,IAAKyP,EAAGtH,EAAEnI,GAASoI,EAAEpI,GAAS0P,EAAQC,GAAS,OAAO,MAEnD,CAEL,GAAsBhL,GAAlB7E,EAAOO,EAAEP,KAAKqI,EAGlB,IAFAnI,EAASF,EAAKE,OAEVK,EAAEP,KAAKsI,GAAGpI,SAAWA,EAAQ,OAAO,CACxC,MAAOA,KAGL,GADA2E,EAAM7E,EAAKE,IACLK,EAAE4B,IAAImG,EAAGzD,KAAQ8K,EAAGtH,EAAExD,GAAMyD,EAAEzD,GAAM+K,EAAQC,GAAU,OAAO,EAMvE,MAFAD,GAAOM,MACPL,EAAOK,OACA,EAIT3P,GAAE4P,QAAU,SAAS9H,EAAGC,GACtB,MAAOqH,GAAGtH,EAAGC,IAKf/H,EAAE6P,QAAU,SAASvQ,GACnB,MAAW,OAAPA,GAAoB,EACpBS,EAAYT,KAASU,EAAE0C,QAAQpD,IAAQU,EAAE8P,SAASxQ,IAAQU,EAAEyJ,YAAYnK,IAA6B,IAAfA,EAAIK,OAChE,IAAvBK,EAAEP,KAAKH,GAAKK,QAIrBK,EAAE+P,UAAY,SAASzQ,GACrB,SAAUA,GAAwB,IAAjBA,EAAI0Q,WAKvBhQ,EAAE0C,QAAUD,GAAiB,SAASnD,GACpC,MAA8B,mBAAvBiD,EAAStB,KAAK3B,IAIvBU,EAAE6D,SAAW,SAASvE,GACpB,GAAI2Q,SAAc3Q,EAClB,OAAgB,aAAT2Q,GAAgC,WAATA,KAAuB3Q,GAIvDU,EAAE2E,MAAM,YAAa,WAAY,SAAU,SAAU,OAAQ,SAAU,SAAU,SAASuL,GACxFlQ,EAAE,KAAOkQ,GAAQ,SAAS5Q,GACxB,MAAOiD,GAAStB,KAAK3B,KAAS,WAAa4Q,EAAO,OAMjDlQ,EAAEyJ,YAAYxJ,aACjBD,EAAEyJ,YAAc,SAASnK,GACvB,MAAOU,GAAE4B,IAAItC,EAAK,YAMJ,kBAAP,KAAyC,gBAAb6Q,aACrCnQ,EAAEwB,WAAa,SAASlC,GACtB,MAAqB,kBAAPA,KAAqB,IAKvCU,EAAEoQ,SAAW,SAAS9Q,GACpB,MAAO8Q,UAAS9Q,KAAS4B,MAAMmP,WAAW/Q,KAI5CU,EAAEkB,MAAQ,SAAS5B,GACjB,MAAOU,GAAEsQ,SAAShR,IAAQA,KAASA,GAIrCU,EAAEiK,UAAY,SAAS3K,GACrB,MAAOA,MAAQ,GAAQA,KAAQ,GAAgC,qBAAvBiD,EAAStB,KAAK3B,IAIxDU,EAAEuQ,OAAS,SAASjR,GAClB,MAAe,QAARA,GAITU,EAAEwQ,YAAc,SAASlR,GACvB,MAAOA,SAAa,IAKtBU,EAAE4B,IAAM,SAAStC,EAAKgF,GACpB,MAAc,OAAPhF,GAAekD,EAAevB,KAAK3B,EAAKgF,IAQjDtE,EAAEyQ,WAAa,WAEb,MADA1O,GAAK/B,EAAIiC,EACFD,MAIThC,EAAE4D,SAAW,SAASL,GACpB,MAAOA,IAITvD,EAAE0Q,SAAW,SAASnN,GACpB,MAAO,YACL,MAAOA,KAIXvD,EAAE2Q,KAAO,aAET3Q,EAAE+D,SAAWA,EAGb/D,EAAE4Q,WAAa,SAAStR,GACtB,MAAc,OAAPA,EAAc,aAAe,SAASgF,GAC3C,MAAOhF,GAAIgF,KAMftE,EAAE8D,QAAU9D,EAAE6Q,QAAU,SAAS/J,GAE/B,MADAA,GAAQ9G,EAAEwO,aAAc1H,GACjB,SAASxH,GACd,MAAOU,GAAEmP,QAAQ7P,EAAKwH,KAK1B9G,EAAE2N,MAAQ,SAASnG,EAAGjI,EAAUM,GAC9B,GAAIiR,GAAQ3O,MAAMtB,KAAKC,IAAI,EAAG0G,GAC9BjI,GAAWO,EAAWP,EAAUM,EAAS,EACzC,KAAK,GAAIe,GAAI,EAAO4G,EAAJ5G,EAAOA,IAAKkQ,EAAMlQ,GAAKrB,EAASqB,EAChD,OAAOkQ,IAIT9Q,EAAEsH,OAAS,SAASvG,EAAKD,GAKvB,MAJW,OAAPA,IACFA,EAAMC,EACNA,EAAM,GAEDA,EAAMF,KAAKgK,MAAMhK,KAAKyG,UAAYxG,EAAMC,EAAM,KAIvDf,EAAE+M,IAAMgE,KAAKhE,KAAO,WAClB,OAAO,GAAIgE,OAAOC,UAIpB,IAAIC,IACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAEHC,EAAcxR,EAAEmO,OAAO8C,GAGvBQ,EAAgB,SAAS5M,GAC3B,GAAI6M,GAAU,SAASC,GACrB,MAAO9M,GAAI8M,IAGTvN,EAAS,MAAQpE,EAAEP,KAAKoF,GAAK+M,KAAK,KAAO,IACzCC,EAAaC,OAAO1N,GACpB2N,EAAgBD,OAAO1N,EAAQ,IACnC,OAAO,UAAS4N,GAEd,MADAA,GAAmB,MAAVA,EAAiB,GAAK,GAAKA,EAC7BH,EAAWI,KAAKD,GAAUA,EAAOE,QAAQH,EAAeL,GAAWM,GAG9EhS,GAAEmS,OAASV,EAAcR,GACzBjR,EAAEoS,SAAWX,EAAcD,GAI3BxR,EAAEwE,OAAS,SAASgG,EAAQzG,EAAUsO,GACpC,GAAI9O,GAAkB,MAAViH,MAAsB,GAAIA,EAAOzG,EAI7C,OAHIR,SAAe,KACjBA,EAAQ8O,GAEHrS,EAAEwB,WAAW+B,GAASA,EAAMtC,KAAKuJ,GAAUjH,EAKpD,IAAI+O,GAAY,CAChBtS,GAAEuS,SAAW,SAASC,GACpB,GAAIC,KAAOH,EAAY,EACvB,OAAOE,GAASA,EAASC,EAAKA,GAKhCzS,EAAE0S,kBACAC,SAAc,kBACdC,YAAc,mBACdT,OAAc,mBAMhB,IAAIU,GAAU,OAIVC,GACFxB,IAAU,IACVyB,KAAU,KACVC,KAAU,IACVC,KAAU,IACVC,SAAU,QACVC,SAAU,SAGRzB,EAAU,4BAEV0B,EAAa,SAASzB,GACxB,MAAO,KAAOmB,EAAQnB,GAOxB3R,GAAEqT,SAAW,SAASC,EAAMC,EAAUC,IAC/BD,GAAYC,IAAaD,EAAWC,GACzCD,EAAWvT,EAAE8O,YAAayE,EAAUvT,EAAE0S,iBAGtC,IAAI5O,GAAUgO,SACXyB,EAASpB,QAAUU,GAASzO,QAC5BmP,EAASX,aAAeC,GAASzO,QACjCmP,EAASZ,UAAYE,GAASzO,QAC/BwN,KAAK,KAAO,KAAM,KAGhBlS,EAAQ,EACR0E,EAAS,QACbkP,GAAKpB,QAAQpO,EAAS,SAAS6N,EAAOQ,EAAQS,EAAaD,EAAUc,GAanE,MAZArP,IAAUkP,EAAKtS,MAAMtB,EAAO+T,GAAQvB,QAAQR,EAAS0B,GACrD1T,EAAQ+T,EAAS9B,EAAMhS,OAEnBwS,EACF/N,GAAU,cAAgB+N,EAAS,iCAC1BS,EACTxO,GAAU,cAAgBwO,EAAc,uBAC/BD,IACTvO,GAAU,OAASuO,EAAW,YAIzBhB,IAETvN,GAAU,OAGLmP,EAASG,WAAUtP,EAAS,mBAAqBA,EAAS,OAE/DA,EAAS,2CACP,oDACAA,EAAS,eAEX,KACE,GAAIuP,GAAS,GAAIrR,UAASiR,EAASG,UAAY,MAAO,IAAKtP,GAC3D,MAAOwP,GAEP,KADAA,GAAExP,OAASA,EACLwP,EAGR,GAAIP,GAAW,SAASQ,GACtB,MAAOF,GAAO1S,KAAKe,KAAM6R,EAAM7T,IAI7B8T,EAAWP,EAASG,UAAY,KAGpC,OAFAL,GAASjP,OAAS,YAAc0P,EAAW,OAAS1P,EAAS,IAEtDiP,GAITrT,EAAE+T,MAAQ,SAASzU,GACjB,GAAI0U,GAAWhU,EAAEV,EAEjB,OADA0U,GAASC,QAAS,EACXD,EAUT,IAAIxP,GAAS,SAASwP,EAAU1U,GAC9B,MAAO0U,GAASC,OAASjU,EAAEV,GAAKyU,QAAUzU,EAI5CU,GAAEkU,MAAQ,SAAS5U,GACjBU,EAAE2E,KAAK3E,EAAEoO,UAAU9O,GAAM,SAAS4Q,GAChC,GAAI7M,GAAOrD,EAAEkQ,GAAQ5Q,EAAI4Q,EACzBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAIxJ,IAAQ1E,KAAKiB,SAEjB,OADAnB,GAAK6B,MAAM+C,EAAMzG,WACVuE,EAAOxC,KAAMqB,EAAKM,MAAM3D,EAAG0G,QAMxC1G,EAAEkU,MAAMlU,GAGRA,EAAE2E,MAAM,MAAO,OAAQ,UAAW,QAAS,OAAQ,SAAU,WAAY,SAASuL,GAChF,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAI5Q,GAAM0C,KAAKiB,QAGf,OAFAwD,GAAO9C,MAAMrE,EAAKW,WACJ,UAATiQ,GAA6B,WAATA,GAAqC,IAAf5Q,EAAIK,cAAqBL,GAAI,GACrEkF,EAAOxC,KAAM1C,MAKxBU,EAAE2E,MAAM,SAAU,OAAQ,SAAU,SAASuL,GAC3C,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,MAAO1L,GAAOxC,KAAMyE,EAAO9C,MAAM3B,KAAKiB,SAAUhD,eAKpDD,EAAEyB,UAAU8B,MAAQ,WAClB,MAAOvB,MAAKiB,UAKdjD,EAAEyB,UAAU0S,QAAUnU,EAAEyB,UAAU2S,OAASpU,EAAEyB,UAAU8B,MAEvDvD,EAAEyB,UAAUc,SAAW,WACrB,MAAO,GAAKP,KAAKiB,UAUG,kBAAXoR,SAAyBA,OAAOC,KACzCD,OAAO,gBAAkB,WACvB,MAAOrU,OAGXiB,KAAKe"}
\ No newline at end of file
diff --git a/setup-maven/node_modules/underscore/underscore.js b/setup-maven/node_modules/underscore/underscore.js
new file mode 100644
index 0000000..b29332f
--- /dev/null
+++ b/setup-maven/node_modules/underscore/underscore.js
@@ -0,0 +1,1548 @@
+//     Underscore.js 1.8.3
+//     http://underscorejs.org
+//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+//     Underscore may be freely distributed under the MIT license.
+
+(function() {
+
+  // Baseline setup
+  // --------------
+
+  // Establish the root object, `window` in the browser, or `exports` on the server.
+  var root = this;
+
+  // Save the previous value of the `_` variable.
+  var previousUnderscore = root._;
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var
+    push             = ArrayProto.push,
+    slice            = ArrayProto.slice,
+    toString         = ObjProto.toString,
+    hasOwnProperty   = ObjProto.hasOwnProperty;
+
+  // All **ECMAScript 5** native function implementations that we hope to use
+  // are declared here.
+  var
+    nativeIsArray      = Array.isArray,
+    nativeKeys         = Object.keys,
+    nativeBind         = FuncProto.bind,
+    nativeCreate       = Object.create;
+
+  // Naked function reference for surrogate-prototype-swapping.
+  var Ctor = function(){};
+
+  // Create a safe reference to the Underscore object for use below.
+  var _ = function(obj) {
+    if (obj instanceof _) return obj;
+    if (!(this instanceof _)) return new _(obj);
+    this._wrapped = obj;
+  };
+
+  // Export the Underscore object for **Node.js**, with
+  // backwards-compatibility for the old `require()` API. If we're in
+  // the browser, add `_` as a global object.
+  if (typeof exports !== 'undefined') {
+    if (typeof module !== 'undefined' && module.exports) {
+      exports = module.exports = _;
+    }
+    exports._ = _;
+  } else {
+    root._ = _;
+  }
+
+  // Current version.
+  _.VERSION = '1.8.3';
+
+  // Internal function that returns an efficient (for current engines) version
+  // of the passed-in callback, to be repeatedly applied in other Underscore
+  // functions.
+  var optimizeCb = function(func, context, argCount) {
+    if (context === void 0) return func;
+    switch (argCount == null ? 3 : argCount) {
+      case 1: return function(value) {
+        return func.call(context, value);
+      };
+      case 2: return function(value, other) {
+        return func.call(context, value, other);
+      };
+      case 3: return function(value, index, collection) {
+        return func.call(context, value, index, collection);
+      };
+      case 4: return function(accumulator, value, index, collection) {
+        return func.call(context, accumulator, value, index, collection);
+      };
+    }
+    return function() {
+      return func.apply(context, arguments);
+    };
+  };
+
+  // A mostly-internal function to generate callbacks that can be applied
+  // to each element in a collection, returning the desired result — either
+  // identity, an arbitrary callback, a property matcher, or a property accessor.
+  var cb = function(value, context, argCount) {
+    if (value == null) return _.identity;
+    if (_.isFunction(value)) return optimizeCb(value, context, argCount);
+    if (_.isObject(value)) return _.matcher(value);
+    return _.property(value);
+  };
+  _.iteratee = function(value, context) {
+    return cb(value, context, Infinity);
+  };
+
+  // An internal function for creating assigner functions.
+  var createAssigner = function(keysFunc, undefinedOnly) {
+    return function(obj) {
+      var length = arguments.length;
+      if (length < 2 || obj == null) return obj;
+      for (var index = 1; index < length; index++) {
+        var source = arguments[index],
+            keys = keysFunc(source),
+            l = keys.length;
+        for (var i = 0; i < l; i++) {
+          var key = keys[i];
+          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
+        }
+      }
+      return obj;
+    };
+  };
+
+  // An internal function for creating a new object that inherits from another.
+  var baseCreate = function(prototype) {
+    if (!_.isObject(prototype)) return {};
+    if (nativeCreate) return nativeCreate(prototype);
+    Ctor.prototype = prototype;
+    var result = new Ctor;
+    Ctor.prototype = null;
+    return result;
+  };
+
+  var property = function(key) {
+    return function(obj) {
+      return obj == null ? void 0 : obj[key];
+    };
+  };
+
+  // Helper for collection methods to determine whether a collection
+  // should be iterated as an array or as an object
+  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+  var getLength = property('length');
+  var isArrayLike = function(collection) {
+    var length = getLength(collection);
+    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
+  };
+
+  // Collection Functions
+  // --------------------
+
+  // The cornerstone, an `each` implementation, aka `forEach`.
+  // Handles raw objects in addition to array-likes. Treats all
+  // sparse array-likes as if they were dense.
+  _.each = _.forEach = function(obj, iteratee, context) {
+    iteratee = optimizeCb(iteratee, context);
+    var i, length;
+    if (isArrayLike(obj)) {
+      for (i = 0, length = obj.length; i < length; i++) {
+        iteratee(obj[i], i, obj);
+      }
+    } else {
+      var keys = _.keys(obj);
+      for (i = 0, length = keys.length; i < length; i++) {
+        iteratee(obj[keys[i]], keys[i], obj);
+      }
+    }
+    return obj;
+  };
+
+  // Return the results of applying the iteratee to each element.
+  _.map = _.collect = function(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var keys = !isArrayLike(obj) && _.keys(obj),
+        length = (keys || obj).length,
+        results = Array(length);
+    for (var index = 0; index < length; index++) {
+      var currentKey = keys ? keys[index] : index;
+      results[index] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  };
+
+  // Create a reducing function iterating left or right.
+  function createReduce(dir) {
+    // Optimized iterator function as using arguments.length
+    // in the main function will deoptimize the, see #1991.
+    function iterator(obj, iteratee, memo, keys, index, length) {
+      for (; index >= 0 && index < length; index += dir) {
+        var currentKey = keys ? keys[index] : index;
+        memo = iteratee(memo, obj[currentKey], currentKey, obj);
+      }
+      return memo;
+    }
+
+    return function(obj, iteratee, memo, context) {
+      iteratee = optimizeCb(iteratee, context, 4);
+      var keys = !isArrayLike(obj) && _.keys(obj),
+          length = (keys || obj).length,
+          index = dir > 0 ? 0 : length - 1;
+      // Determine the initial value if none is provided.
+      if (arguments.length < 3) {
+        memo = obj[keys ? keys[index] : index];
+        index += dir;
+      }
+      return iterator(obj, iteratee, memo, keys, index, length);
+    };
+  }
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`.
+  _.reduce = _.foldl = _.inject = createReduce(1);
+
+  // The right-associative version of reduce, also known as `foldr`.
+  _.reduceRight = _.foldr = createReduce(-1);
+
+  // Return the first value which passes a truth test. Aliased as `detect`.
+  _.find = _.detect = function(obj, predicate, context) {
+    var key;
+    if (isArrayLike(obj)) {
+      key = _.findIndex(obj, predicate, context);
+    } else {
+      key = _.findKey(obj, predicate, context);
+    }
+    if (key !== void 0 && key !== -1) return obj[key];
+  };
+
+  // Return all the elements that pass a truth test.
+  // Aliased as `select`.
+  _.filter = _.select = function(obj, predicate, context) {
+    var results = [];
+    predicate = cb(predicate, context);
+    _.each(obj, function(value, index, list) {
+      if (predicate(value, index, list)) results.push(value);
+    });
+    return results;
+  };
+
+  // Return all the elements for which a truth test fails.
+  _.reject = function(obj, predicate, context) {
+    return _.filter(obj, _.negate(cb(predicate)), context);
+  };
+
+  // Determine whether all of the elements match a truth test.
+  // Aliased as `all`.
+  _.every = _.all = function(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var keys = !isArrayLike(obj) && _.keys(obj),
+        length = (keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = keys ? keys[index] : index;
+      if (!predicate(obj[currentKey], currentKey, obj)) return false;
+    }
+    return true;
+  };
+
+  // Determine if at least one element in the object matches a truth test.
+  // Aliased as `any`.
+  _.some = _.any = function(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var keys = !isArrayLike(obj) && _.keys(obj),
+        length = (keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = keys ? keys[index] : index;
+      if (predicate(obj[currentKey], currentKey, obj)) return true;
+    }
+    return false;
+  };
+
+  // Determine if the array or object contains a given item (using `===`).
+  // Aliased as `includes` and `include`.
+  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
+    if (!isArrayLike(obj)) obj = _.values(obj);
+    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+    return _.indexOf(obj, item, fromIndex) >= 0;
+  };
+
+  // Invoke a method (with arguments) on every item in a collection.
+  _.invoke = function(obj, method) {
+    var args = slice.call(arguments, 2);
+    var isFunc = _.isFunction(method);
+    return _.map(obj, function(value) {
+      var func = isFunc ? method : value[method];
+      return func == null ? func : func.apply(value, args);
+    });
+  };
+
+  // Convenience version of a common use case of `map`: fetching a property.
+  _.pluck = function(obj, key) {
+    return _.map(obj, _.property(key));
+  };
+
+  // Convenience version of a common use case of `filter`: selecting only objects
+  // containing specific `key:value` pairs.
+  _.where = function(obj, attrs) {
+    return _.filter(obj, _.matcher(attrs));
+  };
+
+  // Convenience version of a common use case of `find`: getting the first object
+  // containing specific `key:value` pairs.
+  _.findWhere = function(obj, attrs) {
+    return _.find(obj, _.matcher(attrs));
+  };
+
+  // Return the maximum element (or element-based computation).
+  _.max = function(obj, iteratee, context) {
+    var result = -Infinity, lastComputed = -Infinity,
+        value, computed;
+    if (iteratee == null && obj != null) {
+      obj = isArrayLike(obj) ? obj : _.values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value > result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      _.each(obj, function(value, index, list) {
+        computed = iteratee(value, index, list);
+        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+          result = value;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  };
+
+  // Return the minimum element (or element-based computation).
+  _.min = function(obj, iteratee, context) {
+    var result = Infinity, lastComputed = Infinity,
+        value, computed;
+    if (iteratee == null && obj != null) {
+      obj = isArrayLike(obj) ? obj : _.values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value < result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      _.each(obj, function(value, index, list) {
+        computed = iteratee(value, index, list);
+        if (computed < lastComputed || computed === Infinity && result === Infinity) {
+          result = value;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  };
+
+  // Shuffle a collection, using the modern version of the
+  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+  _.shuffle = function(obj) {
+    var set = isArrayLike(obj) ? obj : _.values(obj);
+    var length = set.length;
+    var shuffled = Array(length);
+    for (var index = 0, rand; index < length; index++) {
+      rand = _.random(0, index);
+      if (rand !== index) shuffled[index] = shuffled[rand];
+      shuffled[rand] = set[index];
+    }
+    return shuffled;
+  };
+
+  // Sample **n** random values from a collection.
+  // If **n** is not specified, returns a single random element.
+  // The internal `guard` argument allows it to work with `map`.
+  _.sample = function(obj, n, guard) {
+    if (n == null || guard) {
+      if (!isArrayLike(obj)) obj = _.values(obj);
+      return obj[_.random(obj.length - 1)];
+    }
+    return _.shuffle(obj).slice(0, Math.max(0, n));
+  };
+
+  // Sort the object's values by a criterion produced by an iteratee.
+  _.sortBy = function(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    return _.pluck(_.map(obj, function(value, index, list) {
+      return {
+        value: value,
+        index: index,
+        criteria: iteratee(value, index, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria;
+      var b = right.criteria;
+      if (a !== b) {
+        if (a > b || a === void 0) return 1;
+        if (a < b || b === void 0) return -1;
+      }
+      return left.index - right.index;
+    }), 'value');
+  };
+
+  // An internal function used for aggregate "group by" operations.
+  var group = function(behavior) {
+    return function(obj, iteratee, context) {
+      var result = {};
+      iteratee = cb(iteratee, context);
+      _.each(obj, function(value, index) {
+        var key = iteratee(value, index, obj);
+        behavior(result, value, key);
+      });
+      return result;
+    };
+  };
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  _.groupBy = group(function(result, value, key) {
+    if (_.has(result, key)) result[key].push(value); else result[key] = [value];
+  });
+
+  // Indexes the object's values by a criterion, similar to `groupBy`, but for
+  // when you know that your index values will be unique.
+  _.indexBy = group(function(result, value, key) {
+    result[key] = value;
+  });
+
+  // Counts instances of an object that group by a certain criterion. Pass
+  // either a string attribute to count by, or a function that returns the
+  // criterion.
+  _.countBy = group(function(result, value, key) {
+    if (_.has(result, key)) result[key]++; else result[key] = 1;
+  });
+
+  // Safely create a real, live array from anything iterable.
+  _.toArray = function(obj) {
+    if (!obj) return [];
+    if (_.isArray(obj)) return slice.call(obj);
+    if (isArrayLike(obj)) return _.map(obj, _.identity);
+    return _.values(obj);
+  };
+
+  // Return the number of elements in an object.
+  _.size = function(obj) {
+    if (obj == null) return 0;
+    return isArrayLike(obj) ? obj.length : _.keys(obj).length;
+  };
+
+  // Split a collection into two arrays: one whose elements all satisfy the given
+  // predicate, and one whose elements all do not satisfy the predicate.
+  _.partition = function(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var pass = [], fail = [];
+    _.each(obj, function(value, key, obj) {
+      (predicate(value, key, obj) ? pass : fail).push(value);
+    });
+    return [pass, fail];
+  };
+
+  // Array Functions
+  // ---------------
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. Aliased as `head` and `take`. The **guard** check
+  // allows it to work with `_.map`.
+  _.first = _.head = _.take = function(array, n, guard) {
+    if (array == null) return void 0;
+    if (n == null || guard) return array[0];
+    return _.initial(array, array.length - n);
+  };
+
+  // Returns everything but the last entry of the array. Especially useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N.
+  _.initial = function(array, n, guard) {
+    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+  };
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array.
+  _.last = function(array, n, guard) {
+    if (array == null) return void 0;
+    if (n == null || guard) return array[array.length - 1];
+    return _.rest(array, Math.max(0, array.length - n));
+  };
+
+  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+  // Especially useful on the arguments object. Passing an **n** will return
+  // the rest N values in the array.
+  _.rest = _.tail = _.drop = function(array, n, guard) {
+    return slice.call(array, n == null || guard ? 1 : n);
+  };
+
+  // Trim out all falsy values from an array.
+  _.compact = function(array) {
+    return _.filter(array, _.identity);
+  };
+
+  // Internal implementation of a recursive `flatten` function.
+  var flatten = function(input, shallow, strict, startIndex) {
+    var output = [], idx = 0;
+    for (var i = startIndex || 0, length = getLength(input); i < length; i++) {
+      var value = input[i];
+      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
+        //flatten current level of array or arguments object
+        if (!shallow) value = flatten(value, shallow, strict);
+        var j = 0, len = value.length;
+        output.length += len;
+        while (j < len) {
+          output[idx++] = value[j++];
+        }
+      } else if (!strict) {
+        output[idx++] = value;
+      }
+    }
+    return output;
+  };
+
+  // Flatten out an array, either recursively (by default), or just one level.
+  _.flatten = function(array, shallow) {
+    return flatten(array, shallow, false);
+  };
+
+  // Return a version of the array that does not contain the specified value(s).
+  _.without = function(array) {
+    return _.difference(array, slice.call(arguments, 1));
+  };
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // Aliased as `unique`.
+  _.uniq = _.unique = function(array, isSorted, iteratee, context) {
+    if (!_.isBoolean(isSorted)) {
+      context = iteratee;
+      iteratee = isSorted;
+      isSorted = false;
+    }
+    if (iteratee != null) iteratee = cb(iteratee, context);
+    var result = [];
+    var seen = [];
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var value = array[i],
+          computed = iteratee ? iteratee(value, i, array) : value;
+      if (isSorted) {
+        if (!i || seen !== computed) result.push(value);
+        seen = computed;
+      } else if (iteratee) {
+        if (!_.contains(seen, computed)) {
+          seen.push(computed);
+          result.push(value);
+        }
+      } else if (!_.contains(result, value)) {
+        result.push(value);
+      }
+    }
+    return result;
+  };
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  _.union = function() {
+    return _.uniq(flatten(arguments, true, true));
+  };
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays.
+  _.intersection = function(array) {
+    var result = [];
+    var argsLength = arguments.length;
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var item = array[i];
+      if (_.contains(result, item)) continue;
+      for (var j = 1; j < argsLength; j++) {
+        if (!_.contains(arguments[j], item)) break;
+      }
+      if (j === argsLength) result.push(item);
+    }
+    return result;
+  };
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  _.difference = function(array) {
+    var rest = flatten(arguments, true, true, 1);
+    return _.filter(array, function(value){
+      return !_.contains(rest, value);
+    });
+  };
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  _.zip = function() {
+    return _.unzip(arguments);
+  };
+
+  // Complement of _.zip. Unzip accepts an array of arrays and groups
+  // each array's elements on shared indices
+  _.unzip = function(array) {
+    var length = array && _.max(array, getLength).length || 0;
+    var result = Array(length);
+
+    for (var index = 0; index < length; index++) {
+      result[index] = _.pluck(array, index);
+    }
+    return result;
+  };
+
+  // Converts lists into objects. Pass either a single array of `[key, value]`
+  // pairs, or two parallel arrays of the same length -- one of keys, and one of
+  // the corresponding values.
+  _.object = function(list, values) {
+    var result = {};
+    for (var i = 0, length = getLength(list); i < length; i++) {
+      if (values) {
+        result[list[i]] = values[i];
+      } else {
+        result[list[i][0]] = list[i][1];
+      }
+    }
+    return result;
+  };
+
+  // Generator function to create the findIndex and findLastIndex functions
+  function createPredicateIndexFinder(dir) {
+    return function(array, predicate, context) {
+      predicate = cb(predicate, context);
+      var length = getLength(array);
+      var index = dir > 0 ? 0 : length - 1;
+      for (; index >= 0 && index < length; index += dir) {
+        if (predicate(array[index], index, array)) return index;
+      }
+      return -1;
+    };
+  }
+
+  // Returns the first index on an array-like that passes a predicate test
+  _.findIndex = createPredicateIndexFinder(1);
+  _.findLastIndex = createPredicateIndexFinder(-1);
+
+  // Use a comparator function to figure out the smallest index at which
+  // an object should be inserted so as to maintain order. Uses binary search.
+  _.sortedIndex = function(array, obj, iteratee, context) {
+    iteratee = cb(iteratee, context, 1);
+    var value = iteratee(obj);
+    var low = 0, high = getLength(array);
+    while (low < high) {
+      var mid = Math.floor((low + high) / 2);
+      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+    }
+    return low;
+  };
+
+  // Generator function to create the indexOf and lastIndexOf functions
+  function createIndexFinder(dir, predicateFind, sortedIndex) {
+    return function(array, item, idx) {
+      var i = 0, length = getLength(array);
+      if (typeof idx == 'number') {
+        if (dir > 0) {
+            i = idx >= 0 ? idx : Math.max(idx + length, i);
+        } else {
+            length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+        }
+      } else if (sortedIndex && idx && length) {
+        idx = sortedIndex(array, item);
+        return array[idx] === item ? idx : -1;
+      }
+      if (item !== item) {
+        idx = predicateFind(slice.call(array, i, length), _.isNaN);
+        return idx >= 0 ? idx + i : -1;
+      }
+      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+        if (array[idx] === item) return idx;
+      }
+      return -1;
+    };
+  }
+
+  // Return the position of the first occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
+  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](http://docs.python.org/library/functions.html#range).
+  _.range = function(start, stop, step) {
+    if (stop == null) {
+      stop = start || 0;
+      start = 0;
+    }
+    step = step || 1;
+
+    var length = Math.max(Math.ceil((stop - start) / step), 0);
+    var range = Array(length);
+
+    for (var idx = 0; idx < length; idx++, start += step) {
+      range[idx] = start;
+    }
+
+    return range;
+  };
+
+  // Function (ahem) Functions
+  // ------------------
+
+  // Determines whether to execute a function as a constructor
+  // or a normal function with the provided arguments
+  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
+    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+    var self = baseCreate(sourceFunc.prototype);
+    var result = sourceFunc.apply(self, args);
+    if (_.isObject(result)) return result;
+    return self;
+  };
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+  // available.
+  _.bind = function(func, context) {
+    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
+    var args = slice.call(arguments, 2);
+    var bound = function() {
+      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
+    };
+    return bound;
+  };
+
+  // Partially apply a function by creating a version that has had some of its
+  // arguments pre-filled, without changing its dynamic `this` context. _ acts
+  // as a placeholder, allowing any combination of arguments to be pre-filled.
+  _.partial = function(func) {
+    var boundArgs = slice.call(arguments, 1);
+    var bound = function() {
+      var position = 0, length = boundArgs.length;
+      var args = Array(length);
+      for (var i = 0; i < length; i++) {
+        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
+      }
+      while (position < arguments.length) args.push(arguments[position++]);
+      return executeBound(func, bound, this, this, args);
+    };
+    return bound;
+  };
+
+  // Bind a number of an object's methods to that object. Remaining arguments
+  // are the method names to be bound. Useful for ensuring that all callbacks
+  // defined on an object belong to it.
+  _.bindAll = function(obj) {
+    var i, length = arguments.length, key;
+    if (length <= 1) throw new Error('bindAll must be passed function names');
+    for (i = 1; i < length; i++) {
+      key = arguments[i];
+      obj[key] = _.bind(obj[key], obj);
+    }
+    return obj;
+  };
+
+  // Memoize an expensive function by storing its results.
+  _.memoize = function(func, hasher) {
+    var memoize = function(key) {
+      var cache = memoize.cache;
+      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
+      return cache[address];
+    };
+    memoize.cache = {};
+    return memoize;
+  };
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  _.delay = function(func, wait) {
+    var args = slice.call(arguments, 2);
+    return setTimeout(function(){
+      return func.apply(null, args);
+    }, wait);
+  };
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  _.defer = _.partial(_.delay, _, 1);
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time. Normally, the throttled function will run
+  // as much as it can, without ever going more than once per `wait` duration;
+  // but if you'd like to disable the execution on the leading edge, pass
+  // `{leading: false}`. To disable execution on the trailing edge, ditto.
+  _.throttle = function(func, wait, options) {
+    var context, args, result;
+    var timeout = null;
+    var previous = 0;
+    if (!options) options = {};
+    var later = function() {
+      previous = options.leading === false ? 0 : _.now();
+      timeout = null;
+      result = func.apply(context, args);
+      if (!timeout) context = args = null;
+    };
+    return function() {
+      var now = _.now();
+      if (!previous && options.leading === false) previous = now;
+      var remaining = wait - (now - previous);
+      context = this;
+      args = arguments;
+      if (remaining <= 0 || remaining > wait) {
+        if (timeout) {
+          clearTimeout(timeout);
+          timeout = null;
+        }
+        previous = now;
+        result = func.apply(context, args);
+        if (!timeout) context = args = null;
+      } else if (!timeout && options.trailing !== false) {
+        timeout = setTimeout(later, remaining);
+      }
+      return result;
+    };
+  };
+
+  // Returns a function, that, as long as it continues to be invoked, will not
+  // be triggered. The function will be called after it stops being called for
+  // N milliseconds. If `immediate` is passed, trigger the function on the
+  // leading edge, instead of the trailing.
+  _.debounce = function(func, wait, immediate) {
+    var timeout, args, context, timestamp, result;
+
+    var later = function() {
+      var last = _.now() - timestamp;
+
+      if (last < wait && last >= 0) {
+        timeout = setTimeout(later, wait - last);
+      } else {
+        timeout = null;
+        if (!immediate) {
+          result = func.apply(context, args);
+          if (!timeout) context = args = null;
+        }
+      }
+    };
+
+    return function() {
+      context = this;
+      args = arguments;
+      timestamp = _.now();
+      var callNow = immediate && !timeout;
+      if (!timeout) timeout = setTimeout(later, wait);
+      if (callNow) {
+        result = func.apply(context, args);
+        context = args = null;
+      }
+
+      return result;
+    };
+  };
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  _.wrap = function(func, wrapper) {
+    return _.partial(wrapper, func);
+  };
+
+  // Returns a negated version of the passed-in predicate.
+  _.negate = function(predicate) {
+    return function() {
+      return !predicate.apply(this, arguments);
+    };
+  };
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  _.compose = function() {
+    var args = arguments;
+    var start = args.length - 1;
+    return function() {
+      var i = start;
+      var result = args[start].apply(this, arguments);
+      while (i--) result = args[i].call(this, result);
+      return result;
+    };
+  };
+
+  // Returns a function that will only be executed on and after the Nth call.
+  _.after = function(times, func) {
+    return function() {
+      if (--times < 1) {
+        return func.apply(this, arguments);
+      }
+    };
+  };
+
+  // Returns a function that will only be executed up to (but not including) the Nth call.
+  _.before = function(times, func) {
+    var memo;
+    return function() {
+      if (--times > 0) {
+        memo = func.apply(this, arguments);
+      }
+      if (times <= 1) func = null;
+      return memo;
+    };
+  };
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  _.once = _.partial(_.before, 2);
+
+  // Object Functions
+  // ----------------
+
+  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+  function collectNonEnumProps(obj, keys) {
+    var nonEnumIdx = nonEnumerableProps.length;
+    var constructor = obj.constructor;
+    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
+
+    // Constructor is a special case.
+    var prop = 'constructor';
+    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
+
+    while (nonEnumIdx--) {
+      prop = nonEnumerableProps[nonEnumIdx];
+      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
+        keys.push(prop);
+      }
+    }
+  }
+
+  // Retrieve the names of an object's own properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`
+  _.keys = function(obj) {
+    if (!_.isObject(obj)) return [];
+    if (nativeKeys) return nativeKeys(obj);
+    var keys = [];
+    for (var key in obj) if (_.has(obj, key)) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  };
+
+  // Retrieve all the property names of an object.
+  _.allKeys = function(obj) {
+    if (!_.isObject(obj)) return [];
+    var keys = [];
+    for (var key in obj) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  };
+
+  // Retrieve the values of an object's properties.
+  _.values = function(obj) {
+    var keys = _.keys(obj);
+    var length = keys.length;
+    var values = Array(length);
+    for (var i = 0; i < length; i++) {
+      values[i] = obj[keys[i]];
+    }
+    return values;
+  };
+
+  // Returns the results of applying the iteratee to each element of the object
+  // In contrast to _.map it returns an object
+  _.mapObject = function(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var keys =  _.keys(obj),
+          length = keys.length,
+          results = {},
+          currentKey;
+      for (var index = 0; index < length; index++) {
+        currentKey = keys[index];
+        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+      }
+      return results;
+  };
+
+  // Convert an object into a list of `[key, value]` pairs.
+  _.pairs = function(obj) {
+    var keys = _.keys(obj);
+    var length = keys.length;
+    var pairs = Array(length);
+    for (var i = 0; i < length; i++) {
+      pairs[i] = [keys[i], obj[keys[i]]];
+    }
+    return pairs;
+  };
+
+  // Invert the keys and values of an object. The values must be serializable.
+  _.invert = function(obj) {
+    var result = {};
+    var keys = _.keys(obj);
+    for (var i = 0, length = keys.length; i < length; i++) {
+      result[obj[keys[i]]] = keys[i];
+    }
+    return result;
+  };
+
+  // Return a sorted list of the function names available on the object.
+  // Aliased as `methods`
+  _.functions = _.methods = function(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (_.isFunction(obj[key])) names.push(key);
+    }
+    return names.sort();
+  };
+
+  // Extend a given object with all the properties in passed-in object(s).
+  _.extend = createAssigner(_.allKeys);
+
+  // Assigns a given object with all the own properties in the passed-in object(s)
+  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+  _.extendOwn = _.assign = createAssigner(_.keys);
+
+  // Returns the first key on an object that passes a predicate test
+  _.findKey = function(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var keys = _.keys(obj), key;
+    for (var i = 0, length = keys.length; i < length; i++) {
+      key = keys[i];
+      if (predicate(obj[key], key, obj)) return key;
+    }
+  };
+
+  // Return a copy of the object only containing the whitelisted properties.
+  _.pick = function(object, oiteratee, context) {
+    var result = {}, obj = object, iteratee, keys;
+    if (obj == null) return result;
+    if (_.isFunction(oiteratee)) {
+      keys = _.allKeys(obj);
+      iteratee = optimizeCb(oiteratee, context);
+    } else {
+      keys = flatten(arguments, false, false, 1);
+      iteratee = function(value, key, obj) { return key in obj; };
+      obj = Object(obj);
+    }
+    for (var i = 0, length = keys.length; i < length; i++) {
+      var key = keys[i];
+      var value = obj[key];
+      if (iteratee(value, key, obj)) result[key] = value;
+    }
+    return result;
+  };
+
+   // Return a copy of the object without the blacklisted properties.
+  _.omit = function(obj, iteratee, context) {
+    if (_.isFunction(iteratee)) {
+      iteratee = _.negate(iteratee);
+    } else {
+      var keys = _.map(flatten(arguments, false, false, 1), String);
+      iteratee = function(value, key) {
+        return !_.contains(keys, key);
+      };
+    }
+    return _.pick(obj, iteratee, context);
+  };
+
+  // Fill in a given object with default properties.
+  _.defaults = createAssigner(_.allKeys, true);
+
+  // Creates an object that inherits from the given prototype object.
+  // If additional properties are provided then they will be added to the
+  // created object.
+  _.create = function(prototype, props) {
+    var result = baseCreate(prototype);
+    if (props) _.extendOwn(result, props);
+    return result;
+  };
+
+  // Create a (shallow-cloned) duplicate of an object.
+  _.clone = function(obj) {
+    if (!_.isObject(obj)) return obj;
+    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+  };
+
+  // Invokes interceptor with the obj, and then returns obj.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  _.tap = function(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  };
+
+  // Returns whether an object has a given set of `key:value` pairs.
+  _.isMatch = function(object, attrs) {
+    var keys = _.keys(attrs), length = keys.length;
+    if (object == null) return !length;
+    var obj = Object(object);
+    for (var i = 0; i < length; i++) {
+      var key = keys[i];
+      if (attrs[key] !== obj[key] || !(key in obj)) return false;
+    }
+    return true;
+  };
+
+
+  // Internal recursive comparison function for `isEqual`.
+  var eq = function(a, b, aStack, bStack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
+    if (a === b) return a !== 0 || 1 / a === 1 / b;
+    // A strict comparison is necessary because `null == undefined`.
+    if (a == null || b == null) return a === b;
+    // Unwrap any wrapped objects.
+    if (a instanceof _) a = a._wrapped;
+    if (b instanceof _) b = b._wrapped;
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className !== toString.call(b)) return false;
+    switch (className) {
+      // Strings, numbers, regular expressions, dates, and booleans are compared by value.
+      case '[object RegExp]':
+      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return '' + a === '' + b;
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive.
+        // Object(NaN) is equivalent to NaN
+        if (+a !== +a) return +b !== +b;
+        // An `egal` comparison is performed for other numeric values.
+        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a === +b;
+    }
+
+    var areArrays = className === '[object Array]';
+    if (!areArrays) {
+      if (typeof a != 'object' || typeof b != 'object') return false;
+
+      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+      // from different frames are.
+      var aCtor = a.constructor, bCtor = b.constructor;
+      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
+                               _.isFunction(bCtor) && bCtor instanceof bCtor)
+                          && ('constructor' in a && 'constructor' in b)) {
+        return false;
+      }
+    }
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+    // Initializing stack of traversed objects.
+    // It's done here since we only need them for objects and arrays comparison.
+    aStack = aStack || [];
+    bStack = bStack || [];
+    var length = aStack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (aStack[length] === a) return bStack[length] === b;
+    }
+
+    // Add the first object to the stack of traversed objects.
+    aStack.push(a);
+    bStack.push(b);
+
+    // Recursively compare objects and arrays.
+    if (areArrays) {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      length = a.length;
+      if (length !== b.length) return false;
+      // Deep compare the contents, ignoring non-numeric properties.
+      while (length--) {
+        if (!eq(a[length], b[length], aStack, bStack)) return false;
+      }
+    } else {
+      // Deep compare objects.
+      var keys = _.keys(a), key;
+      length = keys.length;
+      // Ensure that both objects contain the same number of properties before comparing deep equality.
+      if (_.keys(b).length !== length) return false;
+      while (length--) {
+        // Deep compare each member
+        key = keys[length];
+        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    aStack.pop();
+    bStack.pop();
+    return true;
+  };
+
+  // Perform a deep comparison to check if two objects are equal.
+  _.isEqual = function(a, b) {
+    return eq(a, b);
+  };
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  _.isEmpty = function(obj) {
+    if (obj == null) return true;
+    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
+    return _.keys(obj).length === 0;
+  };
+
+  // Is a given value a DOM element?
+  _.isElement = function(obj) {
+    return !!(obj && obj.nodeType === 1);
+  };
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native Array.isArray
+  _.isArray = nativeIsArray || function(obj) {
+    return toString.call(obj) === '[object Array]';
+  };
+
+  // Is a given variable an object?
+  _.isObject = function(obj) {
+    var type = typeof obj;
+    return type === 'function' || type === 'object' && !!obj;
+  };
+
+  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
+  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
+    _['is' + name] = function(obj) {
+      return toString.call(obj) === '[object ' + name + ']';
+    };
+  });
+
+  // Define a fallback version of the method in browsers (ahem, IE < 9), where
+  // there isn't any inspectable "Arguments" type.
+  if (!_.isArguments(arguments)) {
+    _.isArguments = function(obj) {
+      return _.has(obj, 'callee');
+    };
+  }
+
+  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
+  // IE 11 (#1621), and in Safari 8 (#1929).
+  if (typeof /./ != 'function' && typeof Int8Array != 'object') {
+    _.isFunction = function(obj) {
+      return typeof obj == 'function' || false;
+    };
+  }
+
+  // Is a given object a finite number?
+  _.isFinite = function(obj) {
+    return isFinite(obj) && !isNaN(parseFloat(obj));
+  };
+
+  // Is the given value `NaN`? (NaN is the only number which does not equal itself).
+  _.isNaN = function(obj) {
+    return _.isNumber(obj) && obj !== +obj;
+  };
+
+  // Is a given value a boolean?
+  _.isBoolean = function(obj) {
+    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+  };
+
+  // Is a given value equal to null?
+  _.isNull = function(obj) {
+    return obj === null;
+  };
+
+  // Is a given variable undefined?
+  _.isUndefined = function(obj) {
+    return obj === void 0;
+  };
+
+  // Shortcut function for checking if an object has a given property directly
+  // on itself (in other words, not on a prototype).
+  _.has = function(obj, key) {
+    return obj != null && hasOwnProperty.call(obj, key);
+  };
+
+  // Utility Functions
+  // -----------------
+
+  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+  // previous owner. Returns a reference to the Underscore object.
+  _.noConflict = function() {
+    root._ = previousUnderscore;
+    return this;
+  };
+
+  // Keep the identity function around for default iteratees.
+  _.identity = function(value) {
+    return value;
+  };
+
+  // Predicate-generating functions. Often useful outside of Underscore.
+  _.constant = function(value) {
+    return function() {
+      return value;
+    };
+  };
+
+  _.noop = function(){};
+
+  _.property = property;
+
+  // Generates a function for a given object that returns a given property.
+  _.propertyOf = function(obj) {
+    return obj == null ? function(){} : function(key) {
+      return obj[key];
+    };
+  };
+
+  // Returns a predicate for checking whether an object has a given set of
+  // `key:value` pairs.
+  _.matcher = _.matches = function(attrs) {
+    attrs = _.extendOwn({}, attrs);
+    return function(obj) {
+      return _.isMatch(obj, attrs);
+    };
+  };
+
+  // Run a function **n** times.
+  _.times = function(n, iteratee, context) {
+    var accum = Array(Math.max(0, n));
+    iteratee = optimizeCb(iteratee, context, 1);
+    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+    return accum;
+  };
+
+  // Return a random integer between min and max (inclusive).
+  _.random = function(min, max) {
+    if (max == null) {
+      max = min;
+      min = 0;
+    }
+    return min + Math.floor(Math.random() * (max - min + 1));
+  };
+
+  // A (possibly faster) way to get the current timestamp as an integer.
+  _.now = Date.now || function() {
+    return new Date().getTime();
+  };
+
+   // List of HTML entities for escaping.
+  var escapeMap = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#x27;',
+    '`': '&#x60;'
+  };
+  var unescapeMap = _.invert(escapeMap);
+
+  // Functions for escaping and unescaping strings to/from HTML interpolation.
+  var createEscaper = function(map) {
+    var escaper = function(match) {
+      return map[match];
+    };
+    // Regexes for identifying a key that needs to be escaped
+    var source = '(?:' + _.keys(map).join('|') + ')';
+    var testRegexp = RegExp(source);
+    var replaceRegexp = RegExp(source, 'g');
+    return function(string) {
+      string = string == null ? '' : '' + string;
+      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+    };
+  };
+  _.escape = createEscaper(escapeMap);
+  _.unescape = createEscaper(unescapeMap);
+
+  // If the value of the named `property` is a function then invoke it with the
+  // `object` as context; otherwise, return it.
+  _.result = function(object, property, fallback) {
+    var value = object == null ? void 0 : object[property];
+    if (value === void 0) {
+      value = fallback;
+    }
+    return _.isFunction(value) ? value.call(object) : value;
+  };
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  _.uniqueId = function(prefix) {
+    var id = ++idCounter + '';
+    return prefix ? prefix + id : id;
+  };
+
+  // By default, Underscore uses ERB-style template delimiters, change the
+  // following template settings to use alternative delimiters.
+  _.templateSettings = {
+    evaluate    : /<%([\s\S]+?)%>/g,
+    interpolate : /<%=([\s\S]+?)%>/g,
+    escape      : /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /(.)^/;
+
+  // Certain characters need to be escaped so that they can be put into a
+  // string literal.
+  var escapes = {
+    "'":      "'",
+    '\\':     '\\',
+    '\r':     'r',
+    '\n':     'n',
+    '\u2028': 'u2028',
+    '\u2029': 'u2029'
+  };
+
+  var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
+
+  var escapeChar = function(match) {
+    return '\\' + escapes[match];
+  };
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  // NB: `oldSettings` only exists for backwards compatibility.
+  _.template = function(text, settings, oldSettings) {
+    if (!settings && oldSettings) settings = oldSettings;
+    settings = _.defaults({}, settings, _.templateSettings);
+
+    // Combine delimiters into one regular expression via alternation.
+    var matcher = RegExp([
+      (settings.escape || noMatch).source,
+      (settings.interpolate || noMatch).source,
+      (settings.evaluate || noMatch).source
+    ].join('|') + '|$', 'g');
+
+    // Compile the template source, escaping string literals appropriately.
+    var index = 0;
+    var source = "__p+='";
+    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+      source += text.slice(index, offset).replace(escaper, escapeChar);
+      index = offset + match.length;
+
+      if (escape) {
+        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+      } else if (interpolate) {
+        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+      } else if (evaluate) {
+        source += "';\n" + evaluate + "\n__p+='";
+      }
+
+      // Adobe VMs need the match returned to produce the correct offest.
+      return match;
+    });
+    source += "';\n";
+
+    // If a variable is not specified, place data values in local scope.
+    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+    source = "var __t,__p='',__j=Array.prototype.join," +
+      "print=function(){__p+=__j.call(arguments,'');};\n" +
+      source + 'return __p;\n';
+
+    try {
+      var render = new Function(settings.variable || 'obj', '_', source);
+    } catch (e) {
+      e.source = source;
+      throw e;
+    }
+
+    var template = function(data) {
+      return render.call(this, data, _);
+    };
+
+    // Provide the compiled source as a convenience for precompilation.
+    var argument = settings.variable || 'obj';
+    template.source = 'function(' + argument + '){\n' + source + '}';
+
+    return template;
+  };
+
+  // Add a "chain" function. Start chaining a wrapped Underscore object.
+  _.chain = function(obj) {
+    var instance = _(obj);
+    instance._chain = true;
+    return instance;
+  };
+
+  // OOP
+  // ---------------
+  // If Underscore is called as a function, it returns a wrapped object that
+  // can be used OO-style. This wrapper holds altered versions of all the
+  // underscore functions. Wrapped objects may be chained.
+
+  // Helper function to continue chaining intermediate results.
+  var result = function(instance, obj) {
+    return instance._chain ? _(obj).chain() : obj;
+  };
+
+  // Add your own custom functions to the Underscore object.
+  _.mixin = function(obj) {
+    _.each(_.functions(obj), function(name) {
+      var func = _[name] = obj[name];
+      _.prototype[name] = function() {
+        var args = [this._wrapped];
+        push.apply(args, arguments);
+        return result(this, func.apply(_, args));
+      };
+    });
+  };
+
+  // Add all of the Underscore functions to the wrapper object.
+  _.mixin(_);
+
+  // Add all mutator Array functions to the wrapper.
+  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    _.prototype[name] = function() {
+      var obj = this._wrapped;
+      method.apply(obj, arguments);
+      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
+      return result(this, obj);
+    };
+  });
+
+  // Add all accessor Array functions to the wrapper.
+  _.each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    _.prototype[name] = function() {
+      return result(this, method.apply(this._wrapped, arguments));
+    };
+  });
+
+  // Extracts the result from a wrapped and chained object.
+  _.prototype.value = function() {
+    return this._wrapped;
+  };
+
+  // Provide unwrapping proxy for some methods used in engine operations
+  // such as arithmetic and JSON stringification.
+  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
+
+  _.prototype.toString = function() {
+    return '' + this._wrapped;
+  };
+
+  // AMD registration happens at the end for compatibility with AMD loaders
+  // that may not enforce next-turn semantics on modules. Even though general
+  // practice for AMD registration is to be anonymous, underscore registers
+  // as a named module because, like jQuery, it is a base library that is
+  // popular enough to be bundled in a third party lib, but not be part of
+  // an AMD load request. Those cases could generate an error when an
+  // anonymous define() is called outside of a loader request.
+  if (typeof define === 'function' && define.amd) {
+    define('underscore', [], function() {
+      return _;
+    });
+  }
+}.call(this));
diff --git a/setup-maven/node_modules/universal-user-agent/.travis.yml b/setup-maven/node_modules/universal-user-agent/.travis.yml
new file mode 100644
index 0000000..d540895
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/.travis.yml
@@ -0,0 +1,38 @@
+language: node_js
+cache:
+  directories:
+    - ~/.npm
+    - node_modules/cypress/dist
+
+# Trigger a push build on master and greenkeeper branches + PRs build on every branches
+# Avoid double build on PRs (See https://github.com/travis-ci/travis-ci/issues/1147)
+branches:
+  only:
+    - master
+    - /^greenkeeper.*$/
+
+stages:
+  - test
+  - name: release
+    if: branch = master AND type IN (push)
+
+jobs:
+  include:
+    - stage: test
+      node_js: 6
+      script: npm run test
+    - node_js: 8
+      script: npm run test
+    - node_js: 10
+      env: Node 10 & coverage upload
+      script:
+        - npm run test
+        - npm run coverage:upload
+    - node_js: lts/*
+      env: browser tests
+      script: npm run test:browser
+
+    - stage: release
+      node_js: lts/*
+      env: semantic-release
+      script: npm run semantic-release
diff --git a/setup-maven/node_modules/universal-user-agent/LICENSE.md b/setup-maven/node_modules/universal-user-agent/LICENSE.md
new file mode 100644
index 0000000..f105ab0
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/LICENSE.md
@@ -0,0 +1,7 @@
+# [ISC License](https://spdx.org/licenses/ISC)
+
+Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m)
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/universal-user-agent/README.md b/setup-maven/node_modules/universal-user-agent/README.md
new file mode 100644
index 0000000..59e809e
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/README.md
@@ -0,0 +1,25 @@
+# universal-user-agent
+
+> Get a user agent string in both browser and node
+
+[![@latest](https://img.shields.io/npm/v/universal-user-agent.svg)](https://www.npmjs.com/package/universal-user-agent)
+[![Build Status](https://travis-ci.com/gr2m/universal-user-agent.svg?branch=master)](https://travis-ci.com/gr2m/universal-user-agent)
+[![Coverage Status](https://coveralls.io/repos/github/gr2m/universal-user-agent/badge.svg)](https://coveralls.io/github/gr2m/universal-user-agent)
+[![Greenkeeper](https://badges.greenkeeper.io/gr2m/universal-user-agent.svg)](https://greenkeeper.io/)
+
+```js
+const getUserAgent = require('universal-user-agent')
+const userAgent = getUserAgent()
+
+// userAgent will look like this
+// in browser: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0"
+// in node: Node.js/v8.9.4 (macOS High Sierra; x64)
+```
+
+## Credits
+
+The Node implementation was originally inspired by [default-user-agent](https://www.npmjs.com/package/default-user-agent).
+
+## License
+
+[ISC](LICENSE.md)
diff --git a/setup-maven/node_modules/universal-user-agent/browser.js b/setup-maven/node_modules/universal-user-agent/browser.js
new file mode 100644
index 0000000..eb12744
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/browser.js
@@ -0,0 +1,6 @@
+module.exports = getUserAgentBrowser
+
+function getUserAgentBrowser () {
+  /* global navigator */
+  return navigator.userAgent
+}
diff --git a/setup-maven/node_modules/universal-user-agent/cypress.json b/setup-maven/node_modules/universal-user-agent/cypress.json
new file mode 100644
index 0000000..a1ff4b8
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/cypress.json
@@ -0,0 +1,4 @@
+{
+  "integrationFolder": "test",
+  "video": false
+}
diff --git a/setup-maven/node_modules/universal-user-agent/index.d.ts b/setup-maven/node_modules/universal-user-agent/index.d.ts
new file mode 100644
index 0000000..04dfc04
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/index.d.ts
@@ -0,0 +1 @@
+export default function getUserAgentNode(): string;
diff --git a/setup-maven/node_modules/universal-user-agent/index.js b/setup-maven/node_modules/universal-user-agent/index.js
new file mode 100644
index 0000000..ef2d06b
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/index.js
@@ -0,0 +1,15 @@
+module.exports = getUserAgentNode
+
+const osName = require('os-name')
+
+function getUserAgentNode () {
+  try {
+    return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`
+  } catch (error) {
+    if (/wmic os get Caption/.test(error.message)) {
+      return 'Windows <version undetectable>'
+    }
+
+    throw error
+  }
+}
diff --git a/setup-maven/node_modules/universal-user-agent/package.json b/setup-maven/node_modules/universal-user-agent/package.json
new file mode 100644
index 0000000..21e51ed
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/package.json
@@ -0,0 +1,82 @@
+{
+  "_from": "universal-user-agent@^2.0.3",
+  "_id": "universal-user-agent@2.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q==",
+  "_location": "/universal-user-agent",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "universal-user-agent@^2.0.3",
+    "name": "universal-user-agent",
+    "escapedName": "universal-user-agent",
+    "rawSpec": "^2.0.3",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.3"
+  },
+  "_requiredBy": [
+    "/@octokit/graphql"
+  ],
+  "_resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.1.0.tgz",
+  "_shasum": "5abfbcc036a1ba490cb941f8fd68c46d3669e8e4",
+  "_spec": "universal-user-agent@^2.0.3",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@octokit/graphql",
+  "author": {
+    "name": "Gregor Martynus",
+    "url": "https://github.com/gr2m"
+  },
+  "browser": "browser.js",
+  "bugs": {
+    "url": "https://github.com/gr2m/universal-user-agent/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "os-name": "^3.0.0"
+  },
+  "deprecated": false,
+  "description": "Get a user agent string in both browser and node",
+  "devDependencies": {
+    "chai": "^4.1.2",
+    "coveralls": "^3.0.2",
+    "cypress": "^3.1.0",
+    "mocha": "^6.0.0",
+    "nyc": "^14.0.0",
+    "proxyquire": "^2.1.0",
+    "semantic-release": "^15.9.15",
+    "sinon": "^7.2.4",
+    "sinon-chai": "^3.2.0",
+    "standard": "^12.0.1",
+    "test": "^0.6.0",
+    "travis-deploy-once": "^5.0.7"
+  },
+  "homepage": "https://github.com/gr2m/universal-user-agent#readme",
+  "keywords": [],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "universal-user-agent",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gr2m/universal-user-agent.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter=html && open coverage/index.html",
+    "coverage:upload": "nyc report --reporter=text-lcov | coveralls",
+    "pretest": "standard",
+    "semantic-release": "semantic-release",
+    "test": "nyc mocha \"test/*-test.js\"",
+    "test:browser": "cypress run --browser chrome",
+    "travis-deploy-once": "travis-deploy-once"
+  },
+  "standard": {
+    "globals": [
+      "describe",
+      "it",
+      "beforeEach",
+      "afterEach",
+      "expect"
+    ]
+  },
+  "types": "index.d.ts",
+  "version": "2.1.0"
+}
diff --git a/setup-maven/node_modules/universal-user-agent/test/smoke-test.js b/setup-maven/node_modules/universal-user-agent/test/smoke-test.js
new file mode 100644
index 0000000..d71b2d5
--- /dev/null
+++ b/setup-maven/node_modules/universal-user-agent/test/smoke-test.js
@@ -0,0 +1,57 @@
+// make tests run in both Node & Express
+if (!global.cy) {
+  const chai = require('chai')
+  const sinon = require('sinon')
+  const sinonChai = require('sinon-chai')
+  chai.use(sinonChai)
+  global.expect = chai.expect
+
+  let sandbox
+  beforeEach(() => {
+    sandbox = sinon.createSandbox()
+    global.cy = {
+      stub: function () {
+        return sandbox.stub.apply(sandbox, arguments)
+      },
+      log () {
+        console.log.apply(console, arguments)
+      }
+    }
+  })
+
+  afterEach(() => {
+    sandbox.restore()
+  })
+}
+
+const getUserAgent = require('..')
+
+describe('smoke', () => {
+  it('works', () => {
+    expect(getUserAgent()).to.be.a('string')
+    expect(getUserAgent().length).to.be.above(10)
+  })
+
+  if (!process.browser) { // test on node only
+    const proxyquire = require('proxyquire').noCallThru()
+    it('works around wmic error on Windows (#5)', () => {
+      const getUserAgent = proxyquire('..', {
+        'os-name': () => {
+          throw new Error('Command failed: wmic os get Caption')
+        }
+      })
+
+      expect(getUserAgent()).to.equal('Windows <version undetectable>')
+    })
+
+    it('does not swallow unexpected errors', () => {
+      const getUserAgent = proxyquire('..', {
+        'os-name': () => {
+          throw new Error('oops')
+        }
+      })
+
+      expect(getUserAgent).to.throw('oops')
+    })
+  }
+})
diff --git a/setup-maven/node_modules/uuid/AUTHORS b/setup-maven/node_modules/uuid/AUTHORS
new file mode 100644
index 0000000..5a10523
--- /dev/null
+++ b/setup-maven/node_modules/uuid/AUTHORS
@@ -0,0 +1,5 @@
+Robert Kieffer <robert@broofa.com>
+Christoph Tavan <dev@tavan.de>
+AJ ONeal <coolaj86@gmail.com>
+Vincent Voyer <vincent@zeroload.net>
+Roman Shtylman <shtylman@gmail.com>
diff --git a/setup-maven/node_modules/uuid/CHANGELOG.md b/setup-maven/node_modules/uuid/CHANGELOG.md
new file mode 100644
index 0000000..1ff6978
--- /dev/null
+++ b/setup-maven/node_modules/uuid/CHANGELOG.md
@@ -0,0 +1,112 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [3.3.3](https://github.com/kelektiv/node-uuid/compare/v3.3.2...v3.3.3) (2019-08-19)
+
+<a name="3.3.2"></a>
+## [3.3.2](https://github.com/kelektiv/node-uuid/compare/v3.3.1...v3.3.2) (2018-06-28)
+
+
+### Bug Fixes
+
+* typo ([305d877](https://github.com/kelektiv/node-uuid/commit/305d877))
+
+
+
+<a name="3.3.1"></a>
+## [3.3.1](https://github.com/kelektiv/node-uuid/compare/v3.3.0...v3.3.1) (2018-06-28)
+
+
+### Bug Fixes
+
+* fix [#284](https://github.com/kelektiv/node-uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/kelektiv/node-uuid/commit/f2a60f2))
+
+
+
+<a name="3.3.0"></a>
+# [3.3.0](https://github.com/kelektiv/node-uuid/compare/v3.2.1...v3.3.0) (2018-06-22)
+
+
+### Bug Fixes
+
+* assignment to readonly property to allow running in strict mode ([#270](https://github.com/kelektiv/node-uuid/issues/270)) ([d062fdc](https://github.com/kelektiv/node-uuid/commit/d062fdc))
+* fix [#229](https://github.com/kelektiv/node-uuid/issues/229) ([c9684d4](https://github.com/kelektiv/node-uuid/commit/c9684d4))
+* Get correct version of IE11 crypto ([#274](https://github.com/kelektiv/node-uuid/issues/274)) ([153d331](https://github.com/kelektiv/node-uuid/commit/153d331))
+* mem issue when generating uuid ([#267](https://github.com/kelektiv/node-uuid/issues/267)) ([c47702c](https://github.com/kelektiv/node-uuid/commit/c47702c))
+
+### Features
+
+* enforce Conventional Commit style commit messages ([#282](https://github.com/kelektiv/node-uuid/issues/282)) ([cc9a182](https://github.com/kelektiv/node-uuid/commit/cc9a182))
+
+
+<a name="3.2.1"></a>
+## [3.2.1](https://github.com/kelektiv/node-uuid/compare/v3.2.0...v3.2.1) (2018-01-16)
+
+
+### Bug Fixes
+
+* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b))
+
+
+
+<a name="3.2.0"></a>
+# [3.2.0](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.2.0) (2018-01-16)
+
+
+### Bug Fixes
+
+* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/kelektiv/node-uuid/commit/09fa824))
+* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b))
+
+
+### Features
+
+* Add v3 Support ([#217](https://github.com/kelektiv/node-uuid/issues/217)) ([d94f726](https://github.com/kelektiv/node-uuid/commit/d94f726))
+
+
+# [3.1.0](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.0.1) (2017-06-17)
+
+### Bug Fixes
+
+* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183)
+* Fix typo (#178)
+* Simple typo fix (#165)
+
+### Features
+* v5 support in CLI (#197)
+* V5 support (#188)
+
+
+# 3.0.1 (2016-11-28)
+
+* split uuid versions into separate files
+
+
+# 3.0.0 (2016-11-17)
+
+* remove .parse and .unparse
+
+
+# 2.0.0
+
+* Removed uuid.BufferClass
+
+
+# 1.4.0
+
+* Improved module context detection
+* Removed public RNG functions
+
+
+# 1.3.2
+
+* Improve tests and handling of v1() options (Issue #24)
+* Expose RNG option to allow for perf testing with different generators
+
+
+# 1.3.0
+
+* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!
+* Support for node.js crypto API
+* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code
diff --git a/setup-maven/node_modules/uuid/LICENSE.md b/setup-maven/node_modules/uuid/LICENSE.md
new file mode 100644
index 0000000..8c84e39
--- /dev/null
+++ b/setup-maven/node_modules/uuid/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+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/setup-maven/node_modules/uuid/README.md b/setup-maven/node_modules/uuid/README.md
new file mode 100644
index 0000000..6fc3708
--- /dev/null
+++ b/setup-maven/node_modules/uuid/README.md
@@ -0,0 +1,293 @@
+<!--
+  -- This file is auto-generated from README_js.md. Changes should be made there.
+  -->
+
+# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) #
+
+Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.
+
+Features:
+
+* Support for version 1, 3, 4 and 5 UUIDs
+* Cross-platform
+* Uses cryptographically-strong random number APIs (when available)
+* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883))
+
+[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be
+supported after version 3.x of this module.  Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.]
+
+## Quickstart - CommonJS (Recommended)
+
+```shell
+npm install uuid
+```
+
+Then generate your uuid version of choice ...
+
+Version 1 (timestamp):
+
+```javascript
+const uuidv1 = require('uuid/v1');
+uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d'
+
+```
+
+Version 3 (namespace):
+
+```javascript
+const uuidv3 = require('uuid/v3');
+
+// ... using predefined DNS namespace (for domain names)
+uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6'
+
+// ... using predefined URL namespace (for, well, URLs)
+uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138'
+
+// ... using a custom namespace
+//
+// Note: Custom namespaces should be a UUID string specific to your application!
+// E.g. the one here was generated using this modules `uuid` CLI.
+const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
+uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686'
+
+```
+
+Version 4 (random):
+
+```javascript
+const uuidv4 = require('uuid/v4');
+uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
+
+```
+
+Version 5 (namespace):
+
+```javascript
+const uuidv5 = require('uuid/v5');
+
+// ... using predefined DNS namespace (for domain names)
+uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec'
+
+// ... using predefined URL namespace (for, well, URLs)
+uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1'
+
+// ... using a custom namespace
+//
+// Note: Custom namespaces should be a UUID string specific to your application!
+// E.g. the one here was generated using this modules `uuid` CLI.
+const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
+uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'
+
+```
+
+## Quickstart - Browser-ready Versions
+
+Browser-ready versions of this module are available via [wzrd.in](https://github.com/jfhbrook/wzrd.in).
+
+For version 1 uuids:
+
+```html
+<script src="http://wzrd.in/standalone/uuid%2Fv1@latest"></script>
+<script>
+uuidv1(); // -> v1 UUID
+</script>
+```
+
+For version 3 uuids:
+
+```html
+<script src="http://wzrd.in/standalone/uuid%2Fv3@latest"></script>
+<script>
+uuidv3('http://example.com/hello', uuidv3.URL); // -> v3 UUID
+</script>
+```
+
+For version 4 uuids:
+
+```html
+<script src="http://wzrd.in/standalone/uuid%2Fv4@latest"></script>
+<script>
+uuidv4(); // -> v4 UUID
+</script>
+```
+
+For version 5 uuids:
+
+```html
+<script src="http://wzrd.in/standalone/uuid%2Fv5@latest"></script>
+<script>
+uuidv5('http://example.com/hello', uuidv5.URL); // -> v5 UUID
+</script>
+```
+
+## API
+
+### Version 1
+
+```javascript
+const uuidv1 = require('uuid/v1');
+
+// Incantations
+uuidv1();
+uuidv1(options);
+uuidv1(options, buffer, offset);
+```
+
+Generate and return a RFC4122 v1 (timestamp-based) UUID.
+
+* `options` - (Object) Optional uuid state to apply. Properties may include:
+
+  * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID.  See note 1.
+  * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence.  Default: An internally maintained clockseq is used.
+  * `msecs` - (Number) Time in milliseconds since unix Epoch.  Default: The current time is used.
+  * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.
+
+* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
+* `offset` - (Number) Starting index in `buffer` at which to begin writing.
+
+Returns `buffer`, if specified, otherwise the string form of the UUID
+
+Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process.
+
+Example: Generate string UUID with fully-specified options
+
+```javascript
+const v1options = {
+  node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
+  clockseq: 0x1234,
+  msecs: new Date('2011-11-01').getTime(),
+  nsecs: 5678
+};
+uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab'
+
+```
+
+Example: In-place generation of two binary IDs
+
+```javascript
+// Generate two ids in an array
+const arr = new Array();
+uuidv1(null, arr, 0);  // ⇨ [ 44, 94, 164, 192, 64, 103, 17, 233, 146, 52, 155, 29, 235, 77, 59, 125 ]
+uuidv1(null, arr, 16); // ⇨ [ 44, 94, 164, 192, 64, 103, 17, 233, 146, 52, 155, 29, 235, 77, 59, 125, 44, 94, 164, 193, 64, 103, 17, 233, 146, 52, 155, 29, 235, 77, 59, 125 ]
+
+```
+
+### Version 3
+
+```javascript
+const uuidv3 = require('uuid/v3');
+
+// Incantations
+uuidv3(name, namespace);
+uuidv3(name, namespace, buffer);
+uuidv3(name, namespace, buffer, offset);
+```
+
+Generate and return a RFC4122 v3 UUID.
+
+* `name` - (String | Array[]) "name" to create UUID with
+* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values
+* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
+* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0
+
+Returns `buffer`, if specified, otherwise the string form of the UUID
+
+Example:
+
+```javascript
+uuidv3('hello world', MY_NAMESPACE);  // ⇨ '042ffd34-d989-321c-ad06-f60826172424'
+
+```
+
+### Version 4
+
+```javascript
+const uuidv4 = require('uuid/v4')
+
+// Incantations
+uuidv4();
+uuidv4(options);
+uuidv4(options, buffer, offset);
+```
+
+Generate and return a RFC4122 v4 UUID.
+
+* `options` - (Object) Optional uuid state to apply. Properties may include:
+  * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values
+  * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255)
+* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
+* `offset` - (Number) Starting index in `buffer` at which to begin writing.
+
+Returns `buffer`, if specified, otherwise the string form of the UUID
+
+Example: Generate string UUID with predefined `random` values
+
+```javascript
+const v4options = {
+  random: [
+    0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
+    0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
+  ]
+};
+uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
+
+```
+
+Example: Generate two IDs in a single buffer
+
+```javascript
+const buffer = new Array();
+uuidv4(null, buffer, 0);  // ⇨ [ 155, 29, 235, 77, 59, 125, 75, 173, 155, 221, 43, 13, 123, 61, 203, 109 ]
+uuidv4(null, buffer, 16); // ⇨ [ 155, 29, 235, 77, 59, 125, 75, 173, 155, 221, 43, 13, 123, 61, 203, 109, 27, 157, 107, 205, 187, 253, 75, 45, 155, 93, 171, 141, 251, 189, 75, 237 ]
+
+```
+
+### Version 5
+
+```javascript
+const uuidv5 = require('uuid/v5');
+
+// Incantations
+uuidv5(name, namespace);
+uuidv5(name, namespace, buffer);
+uuidv5(name, namespace, buffer, offset);
+```
+
+Generate and return a RFC4122 v5 UUID.
+
+* `name` - (String | Array[]) "name" to create UUID with
+* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values
+* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
+* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0
+
+Returns `buffer`, if specified, otherwise the string form of the UUID
+
+Example:
+
+```javascript
+uuidv5('hello world', MY_NAMESPACE);  // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b'
+
+```
+
+## Command Line
+
+UUIDs can be generated from the command line with the `uuid` command.
+
+```shell
+$ uuid
+ddeb27fb-d9a0-4624-be4d-4615062daed4
+
+$ uuid v1
+02d37060-d446-11e7-a9fa-7bdae751ebe1
+```
+
+Type `uuid --help` for usage details
+
+## Testing
+
+```shell
+npm test
+```
+
+----
+Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd)
\ No newline at end of file
diff --git a/setup-maven/node_modules/uuid/bin/uuid b/setup-maven/node_modules/uuid/bin/uuid
new file mode 100755
index 0000000..502626e
--- /dev/null
+++ b/setup-maven/node_modules/uuid/bin/uuid
@@ -0,0 +1,65 @@
+#!/usr/bin/env node
+var assert = require('assert');
+
+function usage() {
+  console.log('Usage:');
+  console.log('  uuid');
+  console.log('  uuid v1');
+  console.log('  uuid v3 <name> <namespace uuid>');
+  console.log('  uuid v4');
+  console.log('  uuid v5 <name> <namespace uuid>');
+  console.log('  uuid --help');
+  console.log('\nNote: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122');
+}
+
+var args = process.argv.slice(2);
+
+if (args.indexOf('--help') >= 0) {
+  usage();
+  process.exit(0);
+}
+var version = args.shift() || 'v4';
+
+switch (version) {
+  case 'v1':
+    var uuidV1 = require('../v1');
+    console.log(uuidV1());
+    break;
+
+  case 'v3':
+    var uuidV3 = require('../v3');
+
+    var name = args.shift();
+    var namespace = args.shift();
+    assert(name != null, 'v3 name not specified');
+    assert(namespace != null, 'v3 namespace not specified');
+
+    if (namespace == 'URL') namespace = uuidV3.URL;
+    if (namespace == 'DNS') namespace = uuidV3.DNS;
+
+    console.log(uuidV3(name, namespace));
+    break;
+
+  case 'v4':
+    var uuidV4 = require('../v4');
+    console.log(uuidV4());
+    break;
+
+  case 'v5':
+    var uuidV5 = require('../v5');
+
+    var name = args.shift();
+    var namespace = args.shift();
+    assert(name != null, 'v5 name not specified');
+    assert(namespace != null, 'v5 namespace not specified');
+
+    if (namespace == 'URL') namespace = uuidV5.URL;
+    if (namespace == 'DNS') namespace = uuidV5.DNS;
+
+    console.log(uuidV5(name, namespace));
+    break;
+
+  default:
+    usage();
+    process.exit(1);
+}
diff --git a/setup-maven/node_modules/uuid/index.js b/setup-maven/node_modules/uuid/index.js
new file mode 100644
index 0000000..e96791a
--- /dev/null
+++ b/setup-maven/node_modules/uuid/index.js
@@ -0,0 +1,8 @@
+var v1 = require('./v1');
+var v4 = require('./v4');
+
+var uuid = v4;
+uuid.v1 = v1;
+uuid.v4 = v4;
+
+module.exports = uuid;
diff --git a/setup-maven/node_modules/uuid/lib/bytesToUuid.js b/setup-maven/node_modules/uuid/lib/bytesToUuid.js
new file mode 100644
index 0000000..847c482
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/bytesToUuid.js
@@ -0,0 +1,24 @@
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+var byteToHex = [];
+for (var i = 0; i < 256; ++i) {
+  byteToHex[i] = (i + 0x100).toString(16).substr(1);
+}
+
+function bytesToUuid(buf, offset) {
+  var i = offset || 0;
+  var bth = byteToHex;
+  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
+  return ([bth[buf[i++]], bth[buf[i++]], 
+	bth[buf[i++]], bth[buf[i++]], '-',
+	bth[buf[i++]], bth[buf[i++]], '-',
+	bth[buf[i++]], bth[buf[i++]], '-',
+	bth[buf[i++]], bth[buf[i++]], '-',
+	bth[buf[i++]], bth[buf[i++]],
+	bth[buf[i++]], bth[buf[i++]],
+	bth[buf[i++]], bth[buf[i++]]]).join('');
+}
+
+module.exports = bytesToUuid;
diff --git a/setup-maven/node_modules/uuid/lib/md5-browser.js b/setup-maven/node_modules/uuid/lib/md5-browser.js
new file mode 100644
index 0000000..9b3b6c7
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/md5-browser.js
@@ -0,0 +1,216 @@
+/*
+ * Browser-compatible JavaScript MD5
+ *
+ * Modification of JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+'use strict';
+
+function md5(bytes) {
+  if (typeof(bytes) == 'string') {
+    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
+    bytes = new Array(msg.length);
+    for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i);
+  }
+
+  return md5ToHexEncodedArray(
+    wordsToMd5(
+      bytesToWords(bytes)
+      , bytes.length * 8)
+  );
+}
+
+
+/*
+* Convert an array of little-endian words to an array of bytes
+*/
+function md5ToHexEncodedArray(input) {
+  var i;
+  var x;
+  var output = [];
+  var length32 = input.length * 32;
+  var hexTab = '0123456789abcdef';
+  var hex;
+
+  for (i = 0; i < length32; i += 8) {
+    x = (input[i >> 5] >>> (i % 32)) & 0xFF;
+
+    hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16);
+
+    output.push(hex);
+  }
+  return output;
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function wordsToMd5(x, len) {
+  /* append padding */
+  x[len >> 5] |= 0x80 << (len % 32);
+  x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+  var i;
+  var olda;
+  var oldb;
+  var oldc;
+  var oldd;
+  var a = 1732584193;
+  var b = -271733879;
+  var c = -1732584194;
+
+  var d = 271733878;
+
+  for (i = 0; i < x.length; i += 16) {
+    olda = a;
+    oldb = b;
+    oldc = c;
+    oldd = d;
+
+    a = md5ff(a, b, c, d, x[i], 7, -680876936);
+    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+    b = md5gg(b, c, d, a, x[i], 20, -373897302);
+    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+    d = md5hh(d, a, b, c, x[i], 11, -358537222);
+    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+    a = md5ii(a, b, c, d, x[i], 6, -198630844);
+    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+    a = safeAdd(a, olda);
+    b = safeAdd(b, oldb);
+    c = safeAdd(c, oldc);
+    d = safeAdd(d, oldd);
+  }
+  return [a, b, c, d];
+}
+
+/*
+* Convert an array bytes to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function bytesToWords(input) {
+  var i;
+  var output = [];
+  output[(input.length >> 2) - 1] = undefined;
+  for (i = 0; i < output.length; i += 1) {
+    output[i] = 0;
+  }
+  var length8 = input.length * 8;
+  for (i = 0; i < length8; i += 8) {
+    output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32);
+  }
+
+  return output;
+}
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+  return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+  return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+  return md5cmn((b & c) | ((~b) & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+  return md5cmn((b & d) | (c & (~d)), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+  return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+  return md5cmn(c ^ (b | (~d)), a, b, x, s, t);
+}
+
+module.exports = md5;
diff --git a/setup-maven/node_modules/uuid/lib/md5.js b/setup-maven/node_modules/uuid/lib/md5.js
new file mode 100644
index 0000000..7044b87
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/md5.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var crypto = require('crypto');
+
+function md5(bytes) {
+  if (typeof Buffer.from === 'function') {
+    // Modern Buffer API
+    if (Array.isArray(bytes)) {
+      bytes = Buffer.from(bytes);
+    } else if (typeof bytes === 'string') {
+      bytes = Buffer.from(bytes, 'utf8');
+    }
+  } else {
+    // Pre-v4 Buffer API
+    if (Array.isArray(bytes)) {
+      bytes = new Buffer(bytes);
+    } else if (typeof bytes === 'string') {
+      bytes = new Buffer(bytes, 'utf8');
+    }
+  }
+
+  return crypto.createHash('md5').update(bytes).digest();
+}
+
+module.exports = md5;
diff --git a/setup-maven/node_modules/uuid/lib/rng-browser.js b/setup-maven/node_modules/uuid/lib/rng-browser.js
new file mode 100644
index 0000000..6361fb8
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/rng-browser.js
@@ -0,0 +1,34 @@
+// Unique ID creation requires a high quality random # generator.  In the
+// browser this is a little complicated due to unknown quality of Math.random()
+// and inconsistent support for the `crypto` API.  We do the best we can via
+// feature-detection
+
+// getRandomValues needs to be invoked in a context where "this" is a Crypto
+// implementation. Also, find the complete implementation of crypto on IE11.
+var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||
+                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));
+
+if (getRandomValues) {
+  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto
+  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef
+
+  module.exports = function whatwgRNG() {
+    getRandomValues(rnds8);
+    return rnds8;
+  };
+} else {
+  // Math.random()-based (RNG)
+  //
+  // If all else fails, use Math.random().  It's fast, but is of unspecified
+  // quality.
+  var rnds = new Array(16);
+
+  module.exports = function mathRNG() {
+    for (var i = 0, r; i < 16; i++) {
+      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
+      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
+    }
+
+    return rnds;
+  };
+}
diff --git a/setup-maven/node_modules/uuid/lib/rng.js b/setup-maven/node_modules/uuid/lib/rng.js
new file mode 100644
index 0000000..58f0dc9
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/rng.js
@@ -0,0 +1,8 @@
+// Unique ID creation requires a high quality random # generator.  In node.js
+// this is pretty straight-forward - we use the crypto API.
+
+var crypto = require('crypto');
+
+module.exports = function nodeRNG() {
+  return crypto.randomBytes(16);
+};
diff --git a/setup-maven/node_modules/uuid/lib/sha1-browser.js b/setup-maven/node_modules/uuid/lib/sha1-browser.js
new file mode 100644
index 0000000..5758ed7
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/sha1-browser.js
@@ -0,0 +1,89 @@
+// Adapted from Chris Veness' SHA1 code at
+// http://www.movable-type.co.uk/scripts/sha1.html
+'use strict';
+
+function f(s, x, y, z) {
+  switch (s) {
+    case 0: return (x & y) ^ (~x & z);
+    case 1: return x ^ y ^ z;
+    case 2: return (x & y) ^ (x & z) ^ (y & z);
+    case 3: return x ^ y ^ z;
+  }
+}
+
+function ROTL(x, n) {
+  return (x << n) | (x>>> (32 - n));
+}
+
+function sha1(bytes) {
+  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
+  var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];
+
+  if (typeof(bytes) == 'string') {
+    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
+    bytes = new Array(msg.length);
+    for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i);
+  }
+
+  bytes.push(0x80);
+
+  var l = bytes.length/4 + 2;
+  var N = Math.ceil(l/16);
+  var M = new Array(N);
+
+  for (var i=0; i<N; i++) {
+    M[i] = new Array(16);
+    for (var j=0; j<16; j++) {
+      M[i][j] =
+        bytes[i * 64 + j * 4] << 24 |
+        bytes[i * 64 + j * 4 + 1] << 16 |
+        bytes[i * 64 + j * 4 + 2] << 8 |
+        bytes[i * 64 + j * 4 + 3];
+    }
+  }
+
+  M[N - 1][14] = ((bytes.length - 1) * 8) /
+    Math.pow(2, 32); M[N - 1][14] = Math.floor(M[N - 1][14]);
+  M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff;
+
+  for (var i=0; i<N; i++) {
+    var W = new Array(80);
+
+    for (var t=0; t<16; t++) W[t] = M[i][t];
+    for (var t=16; t<80; t++) {
+      W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);
+    }
+
+    var a = H[0];
+    var b = H[1];
+    var c = H[2];
+    var d = H[3];
+    var e = H[4];
+
+    for (var t=0; t<80; t++) {
+      var s = Math.floor(t/20);
+      var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;
+      e = d;
+      d = c;
+      c = ROTL(b, 30) >>> 0;
+      b = a;
+      a = T;
+    }
+
+    H[0] = (H[0] + a) >>> 0;
+    H[1] = (H[1] + b) >>> 0;
+    H[2] = (H[2] + c) >>> 0;
+    H[3] = (H[3] + d) >>> 0;
+    H[4] = (H[4] + e) >>> 0;
+  }
+
+  return [
+    H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff,
+    H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff,
+    H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff,
+    H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff,
+    H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff
+  ];
+}
+
+module.exports = sha1;
diff --git a/setup-maven/node_modules/uuid/lib/sha1.js b/setup-maven/node_modules/uuid/lib/sha1.js
new file mode 100644
index 0000000..0b54b25
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/sha1.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var crypto = require('crypto');
+
+function sha1(bytes) {
+  if (typeof Buffer.from === 'function') {
+    // Modern Buffer API
+    if (Array.isArray(bytes)) {
+      bytes = Buffer.from(bytes);
+    } else if (typeof bytes === 'string') {
+      bytes = Buffer.from(bytes, 'utf8');
+    }
+  } else {
+    // Pre-v4 Buffer API
+    if (Array.isArray(bytes)) {
+      bytes = new Buffer(bytes);
+    } else if (typeof bytes === 'string') {
+      bytes = new Buffer(bytes, 'utf8');
+    }
+  }
+
+  return crypto.createHash('sha1').update(bytes).digest();
+}
+
+module.exports = sha1;
diff --git a/setup-maven/node_modules/uuid/lib/v35.js b/setup-maven/node_modules/uuid/lib/v35.js
new file mode 100644
index 0000000..8b066cc
--- /dev/null
+++ b/setup-maven/node_modules/uuid/lib/v35.js
@@ -0,0 +1,57 @@
+var bytesToUuid = require('./bytesToUuid');
+
+function uuidToBytes(uuid) {
+  // Note: We assume we're being passed a valid uuid string
+  var bytes = [];
+  uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) {
+    bytes.push(parseInt(hex, 16));
+  });
+
+  return bytes;
+}
+
+function stringToBytes(str) {
+  str = unescape(encodeURIComponent(str)); // UTF8 escape
+  var bytes = new Array(str.length);
+  for (var i = 0; i < str.length; i++) {
+    bytes[i] = str.charCodeAt(i);
+  }
+  return bytes;
+}
+
+module.exports = function(name, version, hashfunc) {
+  var generateUUID = function(value, namespace, buf, offset) {
+    var off = buf && offset || 0;
+
+    if (typeof(value) == 'string') value = stringToBytes(value);
+    if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace);
+
+    if (!Array.isArray(value)) throw TypeError('value must be an array of bytes');
+    if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values');
+
+    // Per 4.3
+    var bytes = hashfunc(namespace.concat(value));
+    bytes[6] = (bytes[6] & 0x0f) | version;
+    bytes[8] = (bytes[8] & 0x3f) | 0x80;
+
+    if (buf) {
+      for (var idx = 0; idx < 16; ++idx) {
+        buf[off+idx] = bytes[idx];
+      }
+    }
+
+    return buf || bytesToUuid(bytes);
+  };
+
+  // Function#name is not settable on some platforms (#270)
+  try {
+    generateUUID.name = name;
+  } catch (err) {
+  }
+
+  // Pre-defined namespaces, per Appendix C
+  generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
+  generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
+
+  return generateUUID;
+};
diff --git a/setup-maven/node_modules/uuid/package.json b/setup-maven/node_modules/uuid/package.json
new file mode 100644
index 0000000..710bbe4
--- /dev/null
+++ b/setup-maven/node_modules/uuid/package.json
@@ -0,0 +1,95 @@
+{
+  "_from": "uuid@^3.3.2",
+  "_id": "uuid@3.3.3",
+  "_inBundle": false,
+  "_integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+  "_location": "/uuid",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "uuid@^3.3.2",
+    "name": "uuid",
+    "escapedName": "uuid",
+    "rawSpec": "^3.3.2",
+    "saveSpec": null,
+    "fetchSpec": "^3.3.2"
+  },
+  "_requiredBy": [
+    "/@actions/tool-cache"
+  ],
+  "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+  "_shasum": "4568f0216e78760ee1dbf3a4d2cf53e224112866",
+  "_spec": "uuid@^3.3.2",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/@actions/tool-cache",
+  "bin": {
+    "uuid": "./bin/uuid"
+  },
+  "browser": {
+    "./lib/rng.js": "./lib/rng-browser.js",
+    "./lib/sha1.js": "./lib/sha1-browser.js",
+    "./lib/md5.js": "./lib/md5-browser.js"
+  },
+  "bugs": {
+    "url": "https://github.com/kelektiv/node-uuid/issues"
+  },
+  "bundleDependencies": false,
+  "commitlint": {
+    "extends": [
+      "@commitlint/config-conventional"
+    ]
+  },
+  "contributors": [
+    {
+      "name": "Robert Kieffer",
+      "email": "robert@broofa.com"
+    },
+    {
+      "name": "Christoph Tavan",
+      "email": "dev@tavan.de"
+    },
+    {
+      "name": "AJ ONeal",
+      "email": "coolaj86@gmail.com"
+    },
+    {
+      "name": "Vincent Voyer",
+      "email": "vincent@zeroload.net"
+    },
+    {
+      "name": "Roman Shtylman",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "deprecated": false,
+  "description": "RFC4122 (v1, v4, and v5) UUIDs",
+  "devDependencies": {
+    "@commitlint/cli": "8.1.0",
+    "@commitlint/config-conventional": "8.1.0",
+    "eslint": "6.2.0",
+    "husky": "3.0.4",
+    "mocha": "6.2.0",
+    "runmd": "1.2.1",
+    "standard-version": "7.0.0"
+  },
+  "homepage": "https://github.com/kelektiv/node-uuid#readme",
+  "keywords": [
+    "uuid",
+    "guid",
+    "rfc4122"
+  ],
+  "license": "MIT",
+  "name": "uuid",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/kelektiv/node-uuid.git"
+  },
+  "scripts": {
+    "commitmsg": "commitlint -E HUSKY_GIT_PARAMS",
+    "md": "runmd --watch --output=README.md README_js.md",
+    "prepare": "runmd --output=README.md README_js.md",
+    "release": "standard-version",
+    "test": "mocha test/test.js"
+  },
+  "version": "3.3.3"
+}
diff --git a/setup-maven/node_modules/uuid/v1.js b/setup-maven/node_modules/uuid/v1.js
new file mode 100644
index 0000000..d84c0f4
--- /dev/null
+++ b/setup-maven/node_modules/uuid/v1.js
@@ -0,0 +1,109 @@
+var rng = require('./lib/rng');
+var bytesToUuid = require('./lib/bytesToUuid');
+
+// **`v1()` - Generate time-based UUID**
+//
+// Inspired by https://github.com/LiosK/UUID.js
+// and http://docs.python.org/library/uuid.html
+
+var _nodeId;
+var _clockseq;
+
+// Previous uuid creation time
+var _lastMSecs = 0;
+var _lastNSecs = 0;
+
+// See https://github.com/broofa/node-uuid for API details
+function v1(options, buf, offset) {
+  var i = buf && offset || 0;
+  var b = buf || [];
+
+  options = options || {};
+  var node = options.node || _nodeId;
+  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;
+
+  // node and clockseq need to be initialized to random values if they're not
+  // specified.  We do this lazily to minimize issues related to insufficient
+  // system entropy.  See #189
+  if (node == null || clockseq == null) {
+    var seedBytes = rng();
+    if (node == null) {
+      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
+      node = _nodeId = [
+        seedBytes[0] | 0x01,
+        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]
+      ];
+    }
+    if (clockseq == null) {
+      // Per 4.2.2, randomize (14 bit) clockseq
+      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
+    }
+  }
+
+  // UUID timestamps are 100 nano-second units since the Gregorian epoch,
+  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
+  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
+  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
+  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();
+
+  // Per 4.2.1.2, use count of uuid's generated during the current clock
+  // cycle to simulate higher resolution clock
+  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
+
+  // Time since last uuid creation (in msecs)
+  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
+
+  // Per 4.2.1.2, Bump clockseq on clock regression
+  if (dt < 0 && options.clockseq === undefined) {
+    clockseq = clockseq + 1 & 0x3fff;
+  }
+
+  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
+  // time interval
+  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
+    nsecs = 0;
+  }
+
+  // Per 4.2.1.2 Throw error if too many uuids are requested
+  if (nsecs >= 10000) {
+    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
+  }
+
+  _lastMSecs = msecs;
+  _lastNSecs = nsecs;
+  _clockseq = clockseq;
+
+  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
+  msecs += 12219292800000;
+
+  // `time_low`
+  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
+  b[i++] = tl >>> 24 & 0xff;
+  b[i++] = tl >>> 16 & 0xff;
+  b[i++] = tl >>> 8 & 0xff;
+  b[i++] = tl & 0xff;
+
+  // `time_mid`
+  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
+  b[i++] = tmh >>> 8 & 0xff;
+  b[i++] = tmh & 0xff;
+
+  // `time_high_and_version`
+  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
+  b[i++] = tmh >>> 16 & 0xff;
+
+  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
+  b[i++] = clockseq >>> 8 | 0x80;
+
+  // `clock_seq_low`
+  b[i++] = clockseq & 0xff;
+
+  // `node`
+  for (var n = 0; n < 6; ++n) {
+    b[i + n] = node[n];
+  }
+
+  return buf ? buf : bytesToUuid(b);
+}
+
+module.exports = v1;
diff --git a/setup-maven/node_modules/uuid/v3.js b/setup-maven/node_modules/uuid/v3.js
new file mode 100644
index 0000000..ee7e14c
--- /dev/null
+++ b/setup-maven/node_modules/uuid/v3.js
@@ -0,0 +1,4 @@
+var v35 = require('./lib/v35.js');
+var md5 = require('./lib/md5');
+
+module.exports = v35('v3', 0x30, md5);
\ No newline at end of file
diff --git a/setup-maven/node_modules/uuid/v4.js b/setup-maven/node_modules/uuid/v4.js
new file mode 100644
index 0000000..1f07be1
--- /dev/null
+++ b/setup-maven/node_modules/uuid/v4.js
@@ -0,0 +1,29 @@
+var rng = require('./lib/rng');
+var bytesToUuid = require('./lib/bytesToUuid');
+
+function v4(options, buf, offset) {
+  var i = buf && offset || 0;
+
+  if (typeof(options) == 'string') {
+    buf = options === 'binary' ? new Array(16) : null;
+    options = null;
+  }
+  options = options || {};
+
+  var rnds = options.random || (options.rng || rng)();
+
+  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+  rnds[6] = (rnds[6] & 0x0f) | 0x40;
+  rnds[8] = (rnds[8] & 0x3f) | 0x80;
+
+  // Copy bytes to buffer, if provided
+  if (buf) {
+    for (var ii = 0; ii < 16; ++ii) {
+      buf[i + ii] = rnds[ii];
+    }
+  }
+
+  return buf || bytesToUuid(rnds);
+}
+
+module.exports = v4;
diff --git a/setup-maven/node_modules/uuid/v5.js b/setup-maven/node_modules/uuid/v5.js
new file mode 100644
index 0000000..4945baf
--- /dev/null
+++ b/setup-maven/node_modules/uuid/v5.js
@@ -0,0 +1,3 @@
+var v35 = require('./lib/v35.js');
+var sha1 = require('./lib/sha1');
+module.exports = v35('v5', 0x50, sha1);
diff --git a/setup-maven/node_modules/which/CHANGELOG.md b/setup-maven/node_modules/which/CHANGELOG.md
new file mode 100644
index 0000000..3d83d26
--- /dev/null
+++ b/setup-maven/node_modules/which/CHANGELOG.md
@@ -0,0 +1,152 @@
+# Changes
+
+
+## 1.3.1
+
+* update deps
+* update travis
+
+## v1.3.0
+
+* Add nothrow option to which.sync
+* update tap
+
+## v1.2.14
+
+* appveyor: drop node 5 and 0.x
+* travis-ci: add node 6, drop 0.x
+
+## v1.2.13
+
+* test: Pass missing option to pass on windows
+* update tap
+* update isexe to 2.0.0
+* neveragain.tech pledge request
+
+## v1.2.12
+
+* Removed unused require
+
+## v1.2.11
+
+* Prevent changelog script from being included in package
+
+## v1.2.10
+
+* Use env.PATH only, not env.Path
+
+## v1.2.9
+
+* fix for paths starting with ../
+* Remove unused `is-absolute` module
+
+## v1.2.8
+
+* bullet items in changelog that contain (but don't start with) #
+
+## v1.2.7
+
+* strip 'update changelog' changelog entries out of changelog
+
+## v1.2.6
+
+* make the changelog bulleted
+
+## v1.2.5
+
+* make a changelog, and keep it up to date
+* don't include tests in package
+* Properly handle relative-path executables
+* appveyor
+* Attach error code to Not Found error
+* Make tests pass on Windows
+
+## v1.2.4
+
+* Fix typo
+
+## v1.2.3
+
+* update isexe, fix regression in pathExt handling
+
+## v1.2.2
+
+* update deps, use isexe module, test windows
+
+## v1.2.1
+
+* Sometimes windows PATH entries are quoted
+* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode.
+* doc cli
+
+## v1.2.0
+
+* Add support for opt.all and -as cli flags
+* test the bin
+* update travis
+* Allow checking for multiple programs in bin/which
+* tap 2
+
+## v1.1.2
+
+* travis
+* Refactored and fixed undefined error on Windows
+* Support strict mode
+
+## v1.1.1
+
+* test +g exes against secondary groups, if available
+* Use windows exe semantics on cygwin & msys
+* cwd should be first in path on win32, not last
+* Handle lower-case 'env.Path' on Windows
+* Update docs
+* use single-quotes
+
+## v1.1.0
+
+* Add tests, depend on is-absolute
+
+## v1.0.9
+
+* which.js: root is allowed to execute files owned by anyone
+
+## v1.0.8
+
+* don't use graceful-fs
+
+## v1.0.7
+
+* add license to package.json
+
+## v1.0.6
+
+* isc license
+
+## 1.0.5
+
+* Awful typo
+
+## 1.0.4
+
+* Test for path absoluteness properly
+* win: Allow '' as a pathext if cmd has a . in it
+
+## 1.0.3
+
+* Remove references to execPath
+* Make `which.sync()` work on Windows by honoring the PATHEXT variable.
+* Make `isExe()` always return true on Windows.
+* MIT
+
+## 1.0.2
+
+* Only files can be exes
+
+## 1.0.1
+
+* Respect the PATHEXT env for win32 support
+* should 0755 the bin
+* binary
+* guts
+* package
+* 1st
diff --git a/setup-maven/node_modules/which/LICENSE b/setup-maven/node_modules/which/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/setup-maven/node_modules/which/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/which/README.md b/setup-maven/node_modules/which/README.md
new file mode 100644
index 0000000..8c0b0cb
--- /dev/null
+++ b/setup-maven/node_modules/which/README.md
@@ -0,0 +1,51 @@
+# which
+
+Like the unix `which` utility.
+
+Finds the first instance of a specified executable in the PATH
+environment variable.  Does not cache the results, so `hash -r` is not
+needed when the PATH changes.
+
+## USAGE
+
+```javascript
+var which = require('which')
+
+// async usage
+which('node', function (er, resolvedPath) {
+  // er is returned if no "node" is found on the PATH
+  // if it is found, then the absolute path to the exec is returned
+})
+
+// sync usage
+// throws if not found
+var resolved = which.sync('node')
+
+// if nothrow option is used, returns null if not found
+resolved = which.sync('node', {nothrow: true})
+
+// Pass options to override the PATH and PATHEXT environment vars.
+which('node', { path: someOtherPath }, function (er, resolved) {
+  if (er)
+    throw er
+  console.log('found at %j', resolved)
+})
+```
+
+## CLI USAGE
+
+Same as the BSD `which(1)` binary.
+
+```
+usage: which [-as] program ...
+```
+
+## OPTIONS
+
+You may pass an options object as the second argument.
+
+- `path`: Use instead of the `PATH` environment variable.
+- `pathExt`: Use instead of the `PATHEXT` environment variable.
+- `all`: Return all matches, instead of just the first one.  Note that
+  this means the function returns an array of strings instead of a
+  single string.
diff --git a/setup-maven/node_modules/which/bin/which b/setup-maven/node_modules/which/bin/which
new file mode 100755
index 0000000..7cee372
--- /dev/null
+++ b/setup-maven/node_modules/which/bin/which
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+var which = require("../")
+if (process.argv.length < 3)
+  usage()
+
+function usage () {
+  console.error('usage: which [-as] program ...')
+  process.exit(1)
+}
+
+var all = false
+var silent = false
+var dashdash = false
+var args = process.argv.slice(2).filter(function (arg) {
+  if (dashdash || !/^-/.test(arg))
+    return true
+
+  if (arg === '--') {
+    dashdash = true
+    return false
+  }
+
+  var flags = arg.substr(1).split('')
+  for (var f = 0; f < flags.length; f++) {
+    var flag = flags[f]
+    switch (flag) {
+      case 's':
+        silent = true
+        break
+      case 'a':
+        all = true
+        break
+      default:
+        console.error('which: illegal option -- ' + flag)
+        usage()
+    }
+  }
+  return false
+})
+
+process.exit(args.reduce(function (pv, current) {
+  try {
+    var f = which.sync(current, { all: all })
+    if (all)
+      f = f.join('\n')
+    if (!silent)
+      console.log(f)
+    return pv;
+  } catch (e) {
+    return 1;
+  }
+}, 0))
diff --git a/setup-maven/node_modules/which/package.json b/setup-maven/node_modules/which/package.json
new file mode 100644
index 0000000..91b30f5
--- /dev/null
+++ b/setup-maven/node_modules/which/package.json
@@ -0,0 +1,65 @@
+{
+  "_from": "which@^1.2.9",
+  "_id": "which@1.3.1",
+  "_inBundle": false,
+  "_integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+  "_location": "/which",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "which@^1.2.9",
+    "name": "which",
+    "escapedName": "which",
+    "rawSpec": "^1.2.9",
+    "saveSpec": null,
+    "fetchSpec": "^1.2.9"
+  },
+  "_requiredBy": [
+    "/cross-spawn"
+  ],
+  "_resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+  "_shasum": "a45043d54f5805316da8d62f9f50918d3da70b0a",
+  "_spec": "which@^1.2.9",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/cross-spawn",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me"
+  },
+  "bin": {
+    "which": "./bin/which"
+  },
+  "bugs": {
+    "url": "https://github.com/isaacs/node-which/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "isexe": "^2.0.0"
+  },
+  "deprecated": false,
+  "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
+  "devDependencies": {
+    "mkdirp": "^0.5.0",
+    "rimraf": "^2.6.2",
+    "tap": "^12.0.1"
+  },
+  "files": [
+    "which.js",
+    "bin/which"
+  ],
+  "homepage": "https://github.com/isaacs/node-which#readme",
+  "license": "ISC",
+  "main": "which.js",
+  "name": "which",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/node-which.git"
+  },
+  "scripts": {
+    "changelog": "bash gen-changelog.sh",
+    "postversion": "npm run changelog && git add CHANGELOG.md && git commit -m 'update changelog - '${npm_package_version}",
+    "test": "tap test/*.js --cov"
+  },
+  "version": "1.3.1"
+}
diff --git a/setup-maven/node_modules/which/which.js b/setup-maven/node_modules/which/which.js
new file mode 100644
index 0000000..4347f91
--- /dev/null
+++ b/setup-maven/node_modules/which/which.js
@@ -0,0 +1,135 @@
+module.exports = which
+which.sync = whichSync
+
+var isWindows = process.platform === 'win32' ||
+    process.env.OSTYPE === 'cygwin' ||
+    process.env.OSTYPE === 'msys'
+
+var path = require('path')
+var COLON = isWindows ? ';' : ':'
+var isexe = require('isexe')
+
+function getNotFoundError (cmd) {
+  var er = new Error('not found: ' + cmd)
+  er.code = 'ENOENT'
+
+  return er
+}
+
+function getPathInfo (cmd, opt) {
+  var colon = opt.colon || COLON
+  var pathEnv = opt.path || process.env.PATH || ''
+  var pathExt = ['']
+
+  pathEnv = pathEnv.split(colon)
+
+  var pathExtExe = ''
+  if (isWindows) {
+    pathEnv.unshift(process.cwd())
+    pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
+    pathExt = pathExtExe.split(colon)
+
+
+    // Always test the cmd itself first.  isexe will check to make sure
+    // it's found in the pathExt set.
+    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
+      pathExt.unshift('')
+  }
+
+  // If it has a slash, then we don't bother searching the pathenv.
+  // just check the file itself, and that's it.
+  if (cmd.match(/\//) || isWindows && cmd.match(/\\/))
+    pathEnv = ['']
+
+  return {
+    env: pathEnv,
+    ext: pathExt,
+    extExe: pathExtExe
+  }
+}
+
+function which (cmd, opt, cb) {
+  if (typeof opt === 'function') {
+    cb = opt
+    opt = {}
+  }
+
+  var info = getPathInfo(cmd, opt)
+  var pathEnv = info.env
+  var pathExt = info.ext
+  var pathExtExe = info.extExe
+  var found = []
+
+  ;(function F (i, l) {
+    if (i === l) {
+      if (opt.all && found.length)
+        return cb(null, found)
+      else
+        return cb(getNotFoundError(cmd))
+    }
+
+    var pathPart = pathEnv[i]
+    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
+      pathPart = pathPart.slice(1, -1)
+
+    var p = path.join(pathPart, cmd)
+    if (!pathPart && (/^\.[\\\/]/).test(cmd)) {
+      p = cmd.slice(0, 2) + p
+    }
+    ;(function E (ii, ll) {
+      if (ii === ll) return F(i + 1, l)
+      var ext = pathExt[ii]
+      isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {
+        if (!er && is) {
+          if (opt.all)
+            found.push(p + ext)
+          else
+            return cb(null, p + ext)
+        }
+        return E(ii + 1, ll)
+      })
+    })(0, pathExt.length)
+  })(0, pathEnv.length)
+}
+
+function whichSync (cmd, opt) {
+  opt = opt || {}
+
+  var info = getPathInfo(cmd, opt)
+  var pathEnv = info.env
+  var pathExt = info.ext
+  var pathExtExe = info.extExe
+  var found = []
+
+  for (var i = 0, l = pathEnv.length; i < l; i ++) {
+    var pathPart = pathEnv[i]
+    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
+      pathPart = pathPart.slice(1, -1)
+
+    var p = path.join(pathPart, cmd)
+    if (!pathPart && /^\.[\\\/]/.test(cmd)) {
+      p = cmd.slice(0, 2) + p
+    }
+    for (var j = 0, ll = pathExt.length; j < ll; j ++) {
+      var cur = p + pathExt[j]
+      var is
+      try {
+        is = isexe.sync(cur, { pathExt: pathExtExe })
+        if (is) {
+          if (opt.all)
+            found.push(cur)
+          else
+            return cur
+        }
+      } catch (ex) {}
+    }
+  }
+
+  if (opt.all && found.length)
+    return found
+
+  if (opt.nothrow)
+    return null
+
+  throw getNotFoundError(cmd)
+}
diff --git a/setup-maven/node_modules/windows-release/index.d.ts b/setup-maven/node_modules/windows-release/index.d.ts
new file mode 100644
index 0000000..6a9c44f
--- /dev/null
+++ b/setup-maven/node_modules/windows-release/index.d.ts
@@ -0,0 +1,30 @@
+/**
+Get the name of a Windows version from the release number: `5.1.2600` → `XP`.
+
+@param release - By default, the current OS is used, but you can supply a custom release number, which is the output of [`os.release()`](https://nodejs.org/api/os.html#os_os_release).
+
+Note: Most Windows Server versions cannot be detected based on the release number alone. There is runtime detection in place to work around this, but it will only be used if no argument is supplied, or the supplied argument matches `os.release()`.
+
+@example
+```
+import * as os from 'os';
+import windowsRelease = require('windows-release');
+
+// On a Windows XP system
+
+windowsRelease();
+//=> 'XP'
+
+os.release();
+//=> '5.1.2600'
+
+windowsRelease(os.release());
+//=> 'XP'
+
+windowsRelease('4.9.3000');
+//=> 'ME'
+```
+*/
+declare function windowsRelease(release?: string): string;
+
+export = windowsRelease;
diff --git a/setup-maven/node_modules/windows-release/index.js b/setup-maven/node_modules/windows-release/index.js
new file mode 100644
index 0000000..cb9ea9f
--- /dev/null
+++ b/setup-maven/node_modules/windows-release/index.js
@@ -0,0 +1,44 @@
+'use strict';
+const os = require('os');
+const execa = require('execa');
+
+// Reference: https://www.gaijin.at/en/lstwinver.php
+const names = new Map([
+	['10.0', '10'],
+	['6.3', '8.1'],
+	['6.2', '8'],
+	['6.1', '7'],
+	['6.0', 'Vista'],
+	['5.2', 'Server 2003'],
+	['5.1', 'XP'],
+	['5.0', '2000'],
+	['4.9', 'ME'],
+	['4.1', '98'],
+	['4.0', '95']
+]);
+
+const windowsRelease = release => {
+	const version = /\d+\.\d/.exec(release || os.release());
+
+	if (release && !version) {
+		throw new Error('`release` argument doesn\'t match `n.n`');
+	}
+
+	const ver = (version || [])[0];
+
+	// Server 2008, 2012 and 2016 versions are ambiguous with desktop versions and must be detected at runtime.
+	// If `release` is omitted or we're on a Windows system, and the version number is an ambiguous version
+	// then use `wmic` to get the OS caption: https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx
+	// If the resulting caption contains the year 2008, 2012 or 2016, it is a server version, so return a server OS name.
+	if ((!release || release === os.release()) && ['6.1', '6.2', '6.3', '10.0'].includes(ver)) {
+		const stdout = execa.sync('wmic', ['os', 'get', 'Caption']).stdout || '';
+		const year = (stdout.match(/2008|2012|2016/) || [])[0];
+		if (year) {
+			return `Server ${year}`;
+		}
+	}
+
+	return names.get(ver);
+};
+
+module.exports = windowsRelease;
diff --git a/setup-maven/node_modules/windows-release/license b/setup-maven/node_modules/windows-release/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/setup-maven/node_modules/windows-release/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/setup-maven/node_modules/windows-release/package.json b/setup-maven/node_modules/windows-release/package.json
new file mode 100644
index 0000000..fb7493f
--- /dev/null
+++ b/setup-maven/node_modules/windows-release/package.json
@@ -0,0 +1,75 @@
+{
+  "_from": "windows-release@^3.1.0",
+  "_id": "windows-release@3.2.0",
+  "_inBundle": false,
+  "_integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==",
+  "_location": "/windows-release",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "windows-release@^3.1.0",
+    "name": "windows-release",
+    "escapedName": "windows-release",
+    "rawSpec": "^3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.1.0"
+  },
+  "_requiredBy": [
+    "/os-name"
+  ],
+  "_resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz",
+  "_shasum": "8122dad5afc303d833422380680a79cdfa91785f",
+  "_spec": "windows-release@^3.1.0",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/os-name",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/windows-release/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "execa": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "Get the name of a Windows version from the release number: `5.1.2600` → `XP`",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.2",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/windows-release#readme",
+  "keywords": [
+    "os",
+    "win",
+    "win32",
+    "windows",
+    "operating",
+    "system",
+    "platform",
+    "name",
+    "title",
+    "release",
+    "version"
+  ],
+  "license": "MIT",
+  "name": "windows-release",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/windows-release.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "3.2.0"
+}
diff --git a/setup-maven/node_modules/windows-release/readme.md b/setup-maven/node_modules/windows-release/readme.md
new file mode 100644
index 0000000..66557ea
--- /dev/null
+++ b/setup-maven/node_modules/windows-release/readme.md
@@ -0,0 +1,56 @@
+# windows-release [![Build Status](https://travis-ci.org/sindresorhus/windows-release.svg?branch=master)](https://travis-ci.org/sindresorhus/windows-release)
+
+> Get the name of a Windows version from the release number: `5.1.2600` → `XP`
+
+
+## Install
+
+```
+$ npm install windows-release
+```
+
+
+## Usage
+
+```js
+const os = require('os');
+const windowsRelease = require('windows-release');
+
+// On a Windows XP system
+
+windowsRelease();
+//=> 'XP'
+
+os.release();
+//=> '5.1.2600'
+
+windowsRelease(os.release());
+//=> 'XP'
+
+windowsRelease('4.9.3000');
+//=> 'ME'
+```
+
+
+## API
+
+### windowsRelease([release])
+
+#### release
+
+Type: `string`
+
+By default, the current OS is used, but you can supply a custom release number, which is the output of [`os.release()`](https://nodejs.org/api/os.html#os_os_release).
+
+Note: Most Windows Server versions cannot be detected based on the release number alone. There is runtime detection in place to work around this, but it will only be used if no argument is supplied, or the supplied argument matches `os.release()`.
+
+
+## Related
+
+- [os-name](https://github.com/sindresorhus/os-name) - Get the name of the current operating system
+- [macos-release](https://github.com/sindresorhus/macos-release) - Get the name and version of a macOS release from the Darwin version
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/setup-maven/node_modules/wrappy/LICENSE b/setup-maven/node_modules/wrappy/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/setup-maven/node_modules/wrappy/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/setup-maven/node_modules/wrappy/README.md b/setup-maven/node_modules/wrappy/README.md
new file mode 100644
index 0000000..98eab25
--- /dev/null
+++ b/setup-maven/node_modules/wrappy/README.md
@@ -0,0 +1,36 @@
+# wrappy
+
+Callback wrapping utility
+
+## USAGE
+
+```javascript
+var wrappy = require("wrappy")
+
+// var wrapper = wrappy(wrapperFunction)
+
+// make sure a cb is called only once
+// See also: http://npm.im/once for this specific use case
+var once = wrappy(function (cb) {
+  var called = false
+  return function () {
+    if (called) return
+    called = true
+    return cb.apply(this, arguments)
+  }
+})
+
+function printBoo () {
+  console.log('boo')
+}
+// has some rando property
+printBoo.iAmBooPrinter = true
+
+var onlyPrintOnce = once(printBoo)
+
+onlyPrintOnce() // prints 'boo'
+onlyPrintOnce() // does nothing
+
+// random property is retained!
+assert.equal(onlyPrintOnce.iAmBooPrinter, true)
+```
diff --git a/setup-maven/node_modules/wrappy/package.json b/setup-maven/node_modules/wrappy/package.json
new file mode 100644
index 0000000..17fdf9f
--- /dev/null
+++ b/setup-maven/node_modules/wrappy/package.json
@@ -0,0 +1,58 @@
+{
+  "_from": "wrappy@1",
+  "_id": "wrappy@1.0.2",
+  "_inBundle": false,
+  "_integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+  "_location": "/wrappy",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "wrappy@1",
+    "name": "wrappy",
+    "escapedName": "wrappy",
+    "rawSpec": "1",
+    "saveSpec": null,
+    "fetchSpec": "1"
+  },
+  "_requiredBy": [
+    "/once"
+  ],
+  "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+  "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
+  "_spec": "wrappy@1",
+  "_where": "/home/stCarolas/Coding/projects/setup-maven/node_modules/once",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me/"
+  },
+  "bugs": {
+    "url": "https://github.com/npm/wrappy/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Callback wrapping utility",
+  "devDependencies": {
+    "tap": "^2.3.1"
+  },
+  "directories": {
+    "test": "test"
+  },
+  "files": [
+    "wrappy.js"
+  ],
+  "homepage": "https://github.com/npm/wrappy",
+  "license": "ISC",
+  "main": "wrappy.js",
+  "name": "wrappy",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/npm/wrappy.git"
+  },
+  "scripts": {
+    "test": "tap --coverage test/*.js"
+  },
+  "version": "1.0.2"
+}
diff --git a/setup-maven/node_modules/wrappy/wrappy.js b/setup-maven/node_modules/wrappy/wrappy.js
new file mode 100644
index 0000000..bb7e7d6
--- /dev/null
+++ b/setup-maven/node_modules/wrappy/wrappy.js
@@ -0,0 +1,33 @@
+// Returns a wrapper function that returns a wrapped callback
+// The wrapper function should do some stuff, and return a
+// presumably different callback function.
+// This makes sure that own properties are retained, so that
+// decorations and such are not lost along the way.
+module.exports = wrappy
+function wrappy (fn, cb) {
+  if (fn && cb) return wrappy(fn)(cb)
+
+  if (typeof fn !== 'function')
+    throw new TypeError('need wrapper function')
+
+  Object.keys(fn).forEach(function (k) {
+    wrapper[k] = fn[k]
+  })
+
+  return wrapper
+
+  function wrapper() {
+    var args = new Array(arguments.length)
+    for (var i = 0; i < args.length; i++) {
+      args[i] = arguments[i]
+    }
+    var ret = fn.apply(this, args)
+    var cb = args[args.length-1]
+    if (typeof ret === 'function' && ret !== cb) {
+      Object.keys(cb).forEach(function (k) {
+        ret[k] = cb[k]
+      })
+    }
+    return ret
+  }
+}
diff --git a/setup-maven/package-lock.json b/setup-maven/package-lock.json
new file mode 100644
index 0000000..ae247d4
--- /dev/null
+++ b/setup-maven/package-lock.json
@@ -0,0 +1,916 @@
+{
+  "name": "setup-maven",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@actions/core": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.0.tgz",
+      "integrity": "sha512-ZKdyhlSlyz38S6YFfPnyNgCDZuAF2T0Qv5eHflNWytPS8Qjvz39bZFMry9Bb/dpSnqWcNeav5yM2CTYpJeY+Dw=="
+    },
+    "@actions/exec": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.1.tgz",
+      "integrity": "sha512-nvFkxwiicvpzNiCBF4wFBDfnBvi7xp/as7LE1hBxBxKG2L29+gkIPBiLKMVORL+Hg3JNf07AKRfl0V5djoypjQ=="
+    },
+    "@actions/github": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@actions/github/-/github-1.1.0.tgz",
+      "integrity": "sha512-cHf6PyoNMdei13jEdGPhKprIMFmjVVW/dnM5/9QmQDJ1ZTaGVyezUSCUIC/ySNLRvDUpeFwPYMdThSEJldSbUw==",
+      "requires": {
+        "@octokit/graphql": "^2.0.1",
+        "@octokit/rest": "^16.15.0"
+      }
+    },
+    "@actions/io": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.1.tgz",
+      "integrity": "sha512-rhq+tfZukbtaus7xyUtwKfuiCRXd1hWSfmJNEpFgBQJ4woqPEpsBw04awicjwz9tyG2/MVhAEMfVn664Cri5zA=="
+    },
+    "@actions/tool-cache": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.1.2.tgz",
+      "integrity": "sha512-IJczPaZr02ECa3Lgws/TJEVco9tjOujiQSZbO3dHuXXjhd5vrUtfOgGwhmz3/f97L910OraPZ8SknofUk6RvOQ==",
+      "requires": {
+        "@actions/core": "^1.1.0",
+        "@actions/exec": "^1.0.1",
+        "@actions/io": "^1.0.1",
+        "semver": "^6.1.0",
+        "typed-rest-client": "^1.4.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "@babel/code-frame": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "^7.0.0"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@octokit/endpoint": {
+      "version": "5.5.1",
+      "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.1.tgz",
+      "integrity": "sha512-nBFhRUb5YzVTCX/iAK1MgQ4uWo89Gu0TH00qQHoYRCsE12dWcG1OiLd7v2EIo2+tpUKPMOQ62QFy9hy9Vg2ULg==",
+      "requires": {
+        "@octokit/types": "^2.0.0",
+        "is-plain-object": "^3.0.0",
+        "universal-user-agent": "^4.0.0"
+      },
+      "dependencies": {
+        "universal-user-agent": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz",
+          "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==",
+          "requires": {
+            "os-name": "^3.1.0"
+          }
+        }
+      }
+    },
+    "@octokit/graphql": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz",
+      "integrity": "sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==",
+      "requires": {
+        "@octokit/request": "^5.0.0",
+        "universal-user-agent": "^2.0.3"
+      }
+    },
+    "@octokit/request": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.3.1.tgz",
+      "integrity": "sha512-5/X0AL1ZgoU32fAepTfEoggFinO3rxsMLtzhlUX+RctLrusn/CApJuGFCd0v7GMFhF+8UiCsTTfsu7Fh1HnEJg==",
+      "requires": {
+        "@octokit/endpoint": "^5.5.0",
+        "@octokit/request-error": "^1.0.1",
+        "@octokit/types": "^2.0.0",
+        "deprecation": "^2.0.0",
+        "is-plain-object": "^3.0.0",
+        "node-fetch": "^2.3.0",
+        "once": "^1.4.0",
+        "universal-user-agent": "^4.0.0"
+      },
+      "dependencies": {
+        "universal-user-agent": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz",
+          "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==",
+          "requires": {
+            "os-name": "^3.1.0"
+          }
+        }
+      }
+    },
+    "@octokit/request-error": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.0.tgz",
+      "integrity": "sha512-DNBhROBYjjV/I9n7A8kVkmQNkqFAMem90dSxqvPq57e2hBr7mNTX98y3R2zDpqMQHVRpBDjsvsfIGgBzy+4PAg==",
+      "requires": {
+        "@octokit/types": "^2.0.0",
+        "deprecation": "^2.0.0",
+        "once": "^1.4.0"
+      }
+    },
+    "@octokit/rest": {
+      "version": "16.35.0",
+      "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.35.0.tgz",
+      "integrity": "sha512-9ShFqYWo0CLoGYhA1FdtdykJuMzS/9H6vSbbQWDX4pWr4p9v+15MsH/wpd/3fIU+tSxylaNO48+PIHqOkBRx3w==",
+      "requires": {
+        "@octokit/request": "^5.2.0",
+        "@octokit/request-error": "^1.0.2",
+        "atob-lite": "^2.0.0",
+        "before-after-hook": "^2.0.0",
+        "btoa-lite": "^1.0.0",
+        "deprecation": "^2.0.0",
+        "lodash.get": "^4.4.2",
+        "lodash.set": "^4.3.2",
+        "lodash.uniq": "^4.5.0",
+        "octokit-pagination-methods": "^1.1.0",
+        "once": "^1.4.0",
+        "universal-user-agent": "^4.0.0"
+      },
+      "dependencies": {
+        "universal-user-agent": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz",
+          "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==",
+          "requires": {
+            "os-name": "^3.1.0"
+          }
+        }
+      }
+    },
+    "@octokit/types": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.0.2.tgz",
+      "integrity": "sha512-StASIL2lgT3TRjxv17z9pAqbnI7HGu9DrJlg3sEBFfCLaMEqp+O3IQPUF6EZtQ4xkAu2ml6kMBBCtGxjvmtmuQ==",
+      "requires": {
+        "@types/node": ">= 8"
+      }
+    },
+    "@types/node": {
+      "version": "12.12.14",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz",
+      "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA=="
+    },
+    "@types/normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
+      "dev": true
+    },
+    "@types/semver": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.0.tgz",
+      "integrity": "sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA==",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "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"
+      }
+    },
+    "atob-lite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz",
+      "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY="
+    },
+    "before-after-hook": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz",
+      "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A=="
+    },
+    "btoa-lite": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
+      "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc="
+    },
+    "caller-callsite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+      "dev": true,
+      "requires": {
+        "callsites": "^2.0.0"
+      }
+    },
+    "caller-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+      "dev": true,
+      "requires": {
+        "caller-callsite": "^2.0.0"
+      }
+    },
+    "callsites": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "ci-info": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+      "dev": true
+    },
+    "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
+    },
+    "cosmiconfig": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+      "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+      "dev": true,
+      "requires": {
+        "import-fresh": "^2.0.0",
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
+      }
+    },
+    "cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "requires": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "deprecation": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+      "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+    },
+    "end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "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
+    },
+    "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
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+      "requires": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      }
+    },
+    "find-up": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+      "dev": true,
+      "requires": {
+        "locate-path": "^3.0.0"
+      }
+    },
+    "get-stdin": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
+      "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
+      "dev": true
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "hosted-git-info": {
+      "version": "2.8.5",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+      "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
+      "dev": true
+    },
+    "husky": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-2.7.0.tgz",
+      "integrity": "sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg==",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "^5.2.0",
+        "execa": "^1.0.0",
+        "find-up": "^3.0.0",
+        "get-stdin": "^7.0.0",
+        "is-ci": "^2.0.0",
+        "pkg-dir": "^4.1.0",
+        "please-upgrade-node": "^3.1.1",
+        "read-pkg": "^5.1.1",
+        "run-node": "^1.0.0",
+        "slash": "^3.0.0"
+      }
+    },
+    "import-fresh": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+      "dev": true,
+      "requires": {
+        "caller-path": "^2.0.0",
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+      "dev": true,
+      "requires": {
+        "ci-info": "^2.0.0"
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-plain-object": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz",
+      "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==",
+      "requires": {
+        "isobject": "^4.0.0"
+      }
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+    },
+    "isobject": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
+      "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA=="
+    },
+    "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.13.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+      "dev": true
+    },
+    "lines-and-columns": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "dev": true
+    },
+    "locate-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+      "dev": true,
+      "requires": {
+        "p-locate": "^3.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash.get": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+    },
+    "lodash.set": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+      "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
+    },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+    },
+    "macos-release": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz",
+      "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA=="
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+    },
+    "node-fetch": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+      "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+          "dev": true
+        }
+      }
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "octokit-pagination-methods": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz",
+      "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ=="
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "os-name": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz",
+      "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==",
+      "requires": {
+        "macos-release": "^2.2.0",
+        "windows-release": "^3.1.0"
+      }
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+    },
+    "p-limit": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+      "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+      "dev": true,
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+      "dev": true,
+      "requires": {
+        "p-limit": "^2.0.0"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "dev": true
+    },
+    "parse-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1"
+      }
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+      "dev": true
+    },
+    "pkg-dir": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+      "dev": true,
+      "requires": {
+        "find-up": "^4.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+          "dev": true
+        }
+      }
+    },
+    "please-upgrade-node": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+      "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+      "dev": true,
+      "requires": {
+        "semver-compare": "^1.0.0"
+      }
+    },
+    "prettier": {
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+      "dev": true
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "read-pkg": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+      "dev": true,
+      "requires": {
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+          "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+          "dev": true,
+          "requires": {
+            "@babel/code-frame": "^7.0.0",
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1",
+            "lines-and-columns": "^1.1.6"
+          }
+        }
+      }
+    },
+    "resolve": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz",
+      "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-from": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+      "dev": true
+    },
+    "run-node": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
+      "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
+      "dev": true
+    },
+    "semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+    },
+    "semver-compare": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+      "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+      "dev": true
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+    },
+    "slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+      "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+      "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
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+    },
+    "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"
+      }
+    },
+    "tunnel": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
+      "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM="
+    },
+    "type-fest": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+      "dev": true
+    },
+    "typed-rest-client": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz",
+      "integrity": "sha512-DVZRlmsfnTjp6ZJaatcdyvvwYwbWvR4YDNFDqb+qdTxpvaVP99YCpBkA8rxsLtAPjBVoDe4fNsnMIdZTiPuKWg==",
+      "requires": {
+        "tunnel": "0.0.4",
+        "underscore": "1.8.3"
+      }
+    },
+    "typescript": {
+      "version": "3.7.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz",
+      "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==",
+      "dev": true
+    },
+    "underscore": {
+      "version": "1.8.3",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+      "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
+    },
+    "universal-user-agent": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.1.0.tgz",
+      "integrity": "sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q==",
+      "requires": {
+        "os-name": "^3.0.0"
+      }
+    },
+    "uuid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "windows-release": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz",
+      "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==",
+      "requires": {
+        "execa": "^1.0.0"
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    }
+  }
+}
diff --git a/setup-maven/package.json b/setup-maven/package.json
new file mode 100644
index 0000000..66619c2
--- /dev/null
+++ b/setup-maven/package.json
@@ -0,0 +1,41 @@
+{
+  "name": "setup-maven",
+  "version": "1.0.0",
+  "private": true,
+  "description": "setup maven action",
+  "main": "lib/setup-maven.js",
+  "scripts": {
+    "build": "tsc",
+    "format": "prettier --write **/*.ts",
+    "format-check": "prettier --check **/*.ts"
+  },
+  "keywords": [
+    "actions",
+    "maven",
+    "setup"
+  ],
+  "author": "stCarolas",
+  "license": "MIT",
+  "dependencies": {
+    "@actions/core": "^1.0.0",
+    "@actions/github": "^1.0.0",
+    "@actions/io": "^1.0.0",
+    "@actions/tool-cache": "^1.0.0",
+    "typed-rest-client": "^1.5.0",
+    "semver": "^6.1.1"
+  },
+  "devDependencies": {
+    "@types/node": "^12.0.4",
+    "@types/semver": "^6.0.0",
+    "husky": "^2.3.0",
+    "prettier": "^1.17.1",
+    "typescript": "^3.5.1"
+  },
+  "husky": {
+    "skipCI": true,
+    "hooks": {
+      "pre-commit": "npm run build && npm run format",
+      "post-commit": "npm prune --production && git add node_modules/* && git commit -m \"Husky commit correct node modules\""
+    }
+  }
+}
diff --git a/setup-maven/src/installer.ts b/setup-maven/src/installer.ts
new file mode 100644
index 0000000..d791f18
--- /dev/null
+++ b/setup-maven/src/installer.ts
@@ -0,0 +1,48 @@
+// Load tempDirectory before it gets wiped by tool-cache
+let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || '';
+
+import * as core from '@actions/core';
+import * as tc from '@actions/tool-cache';
+import * as path from 'path';
+
+if (!tempDirectory) {
+  let baseLocation: string;
+  if (process.platform === 'win32') {
+    baseLocation = process.env['USERPROFILE'] || 'C:\\';
+  } else {
+    if (process.platform === 'darwin') {
+      baseLocation = '/Users';
+    } else {
+      baseLocation = '/home';
+    }
+  }
+  tempDirectory = path.join(baseLocation, 'actions', 'temp');
+}
+
+export async function getMaven(version: string) {
+  let toolPath: string;
+  toolPath = tc.find('maven', version);
+
+  if (!toolPath) {
+    toolPath = await downloadMaven(version);
+  }
+
+  toolPath = path.join(toolPath, 'bin');
+  core.addPath(toolPath);
+}
+
+async function downloadMaven(version: string): Promise<string> {
+  const toolDirectoryName = `apache-maven-${version}`
+  const downloadUrl =
+    `https://archive.apache.org/dist/maven/maven-3/${version}/binaries/${toolDirectoryName}-bin.tar.gz`
+  console.log(`downloading ${downloadUrl}`)
+
+  try {
+    const downloadPath = await tc.downloadTool(downloadUrl)
+    const extractedPath = await tc.extractTar(downloadPath)
+    let toolRoot = path.join(extractedPath, toolDirectoryName)
+    return await tc.cacheDir(toolRoot, 'maven', version)
+  } catch (err) {
+    throw err
+  }
+}
diff --git a/setup-maven/src/setup-maven.ts b/setup-maven/src/setup-maven.ts
new file mode 100644
index 0000000..c2ca4b2
--- /dev/null
+++ b/setup-maven/src/setup-maven.ts
@@ -0,0 +1,15 @@
+import * as core from '@actions/core';
+import * as installer from './installer';
+
+async function run() {
+  try {
+    let version = core.getInput('maven-version');
+    if (version) {
+      await installer.getMaven(version);
+    }
+  } catch (error) {
+    core.setFailed(error.message);
+  }
+}
+
+run();
diff --git a/setup-maven/tsconfig.json b/setup-maven/tsconfig.json
new file mode 100644
index 0000000..1485007
--- /dev/null
+++ b/setup-maven/tsconfig.json
@@ -0,0 +1,66 @@
+{
+  "compilerOptions": {
+    /* Basic Options */
+    // "incremental": true,                   /* Enable incremental compilation */
+    "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
+    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
+    "lib": [
+      "es6"
+    ],
+    // "allowJs": true,                       /* Allow javascript files to be compiled. */
+    // "checkJs": true,                       /* Report errors in .js files. */
+    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
+    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
+    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
+    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
+    // "outFile": "./",                       /* Concatenate and emit output to single file. */
+    "outDir": "./lib",                        /* Redirect output structure to the directory. */
+    "rootDir": "./src",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
+    // "composite": true,                     /* Enable project compilation */
+    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
+    // "removeComments": true,                /* Do not emit comments to output. */
+    // "noEmit": true,                        /* Do not emit outputs. */
+    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
+    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
+    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
+
+    /* Strict Type-Checking Options */
+    "strict": true,                           /* Enable all strict type-checking options. */
+    "noImplicitAny": false,                 /* Raise error on expressions and declarations with an implied 'any' type. */
+    // "strictNullChecks": true,              /* Enable strict null checks. */
+    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
+    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
+    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
+    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
+    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */
+
+    /* Additional Checks */
+    // "noUnusedLocals": true,                /* Report errors on unused locals. */
+    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
+    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
+    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */
+
+    /* Module Resolution Options */
+    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
+    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
+    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
+    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
+    // "typeRoots": [],                       /* List of folders to include type definitions from. */
+    // "types": [],                           /* Type declaration files to be included in compilation. */
+    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
+    "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
+    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
+    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */
+
+    /* Source Map Options */
+    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
+    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
+    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
+    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
+
+    /* Experimental Options */
+    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
+    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */
+  },
+  "exclude": ["node_modules", "**/*.test.ts"]
+}
