diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5a4128d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2019 Anthony Sottile
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e6ef41e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,82 @@
+[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/pre-commit/action/master.svg)](https://results.pre-commit.ci/latest/github/pre-commit/action/master)
+[![Build Status](https://github.com/pre-commit/action/workflows/deploy/badge.svg)](https://github.com/pre-commit/action/actions)
+
+pre-commit/action
+=================
+
+a GitHub action to run [pre-commit](https://pre-commit.com)
+
+### using this action
+
+To use this action, make a file `.github/workflows/pre-commit.yml`.  Here's a
+template to get started:
+
+```yaml
+name: pre-commit
+
+on:
+  pull_request:
+  push:
+    branches: [master]
+
+jobs:
+  pre-commit:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+    - uses: actions/setup-python@v2
+    - uses: pre-commit/action@v2.0.0
+```
+
+This does a few things:
+
+- clones the code
+- installs python
+- sets up the `pre-commit` cache
+
+### using this action with custom invocations
+
+By default, this action runs all the hooks against all the files.  `extra_args`
+lets users specify a single hook id and/or options to pass to `pre-commit run`.
+
+Here's a sample step configuration that only runs the `flake8` hook against all
+the files (use the template above except for the `pre-commit` action):
+
+```yaml
+    - uses: pre-commit/action@v2.0.0
+      with:
+        extra_args: flake8 --all-files
+```
+
+### using this action in private repositories
+
+this action also provides an additional behaviour when used in private
+repositories.  when configured with a github token, the action will push back
+fixes to the pull request branch.
+
+using the template above, you'll make two replacements for individual actions:
+
+first is the checkout step, which needs to use unlimited fetch depth for
+pushing
+
+```yaml
+    - uses: actions/checkout@v2
+      with:
+        fetch-depth: 0
+```
+
+next is passing the token to the pre-commit action
+
+```yaml
+    - uses: pre-commit/action@v2.0.0
+      with:
+        token: ${{ secrets.GITHUB_TOKEN }}
+```
+
+note that `secrets.GITHUB_TOKEN` is automatically provisioned and will not
+require any special configuration.
+
+while you could _technically_ configure this for a public repository (using a
+personal access token), I can't think of a way to do this safely without
+exposing a privileged token to pull requests -- if you have any ideas, please
+leave an issue!
diff --git a/action.yml b/action.yml
new file mode 100644
index 0000000..9906815
--- /dev/null
+++ b/action.yml
@@ -0,0 +1,13 @@
+name: pre-commit
+description: run pre-commit and optionally commit back to the pull request
+inputs:
+  extra_args:
+    description: options to pass to pre-commit run
+    required: false
+    default: '--all-files'
+  token:
+    description: github token to clone / push with
+    required: false
+runs:
+  using: 'node12'
+  main: 'dist/index.js'
diff --git a/dist/index.js b/dist/index.js
new file mode 100644
index 0000000..5fb465d
--- /dev/null
+++ b/dist/index.js
@@ -0,0 +1,14 @@
+!function(e){var t={};function r(o){if(t[o])return t[o].exports;var s=t[o]={i:o,l:!1,exports:{}};return e[o].call(s.exports,s,s.exports,r),s.l=!0,s.exports}r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(o,s,function(t){return e[t]}.bind(null,s));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=29)}([function(e,t){e.exports=require("path")},function(e,t){e.exports=require("stream")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("zlib")},function(e,t){e.exports=require("os")},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=r(31),i=r(32),a=r(13),c=s(r(4)),u=s(r(0));var p;function l(e){n.issue("error",e instanceof Error?e.toString():e)}function d(e){n.issue("group",e)}function m(){n.issue("endgroup")}!function(e){e[e.Success=0]="Success",e[e.Failure=1]="Failure"}(p=t.ExitCode||(t.ExitCode={})),t.exportVariable=function(e,t){const r=a.toCommandValue(t);if(process.env[e]=r,process.env.GITHUB_ENV||""){const t="_GitHubActionsFileCommandDelimeter_",o=`${e}<<${t}${c.EOL}${r}${c.EOL}${t}`;i.issueCommand("ENV",o)}else n.issueCommand("set-env",{name:e},r)},t.setSecret=function(e){n.issueCommand("add-mask",{},e)},t.addPath=function(e){process.env.GITHUB_PATH||""?i.issueCommand("PATH",e):n.issueCommand("add-path",{},e),process.env.PATH=`${e}${u.delimiter}${process.env.PATH}`},t.getInput=function(e,t){const r=process.env["INPUT_"+e.replace(/ /g,"_").toUpperCase()]||"";if(t&&t.required&&!r)throw new Error("Input required and not supplied: "+e);return r.trim()},t.setOutput=function(e,t){n.issueCommand("set-output",{name:e},t)},t.setCommandEcho=function(e){n.issue("echo",e?"on":"off")},t.setFailed=function(e){process.exitCode=p.Failure,l(e)},t.isDebug=function(){return"1"===process.env.RUNNER_DEBUG},t.debug=function(e){n.issueCommand("debug",{},e)},t.error=l,t.warning=function(e){n.issue("warning",e instanceof Error?e.toString():e)},t.info=function(e){process.stdout.write(e+c.EOL)},t.startGroup=d,t.endGroup=m,t.group=function(e,t){return o(this,void 0,void 0,(function*(){let r;d(e);try{r=yield t()}finally{m()}return r}))},t.saveState=function(e,t){n.issueCommand("save-state",{name:e},t)},t.getState=function(e){return process.env["STATE_"+e]||""}},function(e,t){e.exports=require("url")},function(e,t){e.exports=require("assert")},function(e,t){e.exports=require("http")},function(e,t){e.exports=require("util")},function(e,t){e.exports=require("https")},function(e,t){e.exports=require("child_process")},function(e,t){e.exports=require("crypto")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.toCommandValue=function(e){return null==e?"":"string"==typeof e||e instanceof String?e:JSON.stringify(e)}},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),t={},o("next"),o("throw"),o("return"),t[Symbol.asyncIterator]=function(){return this},t);function o(r){t[r]=e[r]&&function(t){return new Promise((function(o,s){(function(e,t,r,o){Promise.resolve(o).then((function(t){e({value:t,done:r})}),t)})(o,s,(t=e[r](t)).done,t.value)}))}}},n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const i=n(r(5)),a=n(r(15)),c=n(r(33)),u=n(r(16)),p=n(r(2)),l=n(r(0)),d=n(r(44)),m=n(r(9)),h=r(45),f=r(19);function g(e){return o(this,void 0,void 0,(function*(){i.debug(`Checking ${e} --version`);let t="";try{yield a.exec(e+" --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:e=>t+=e.toString(),stderr:e=>t+=e.toString()}})}catch(e){i.debug(e.message)}return t=t.trim(),i.debug(t),t}))}function E(){return o(this,void 0,void 0,(function*(){return(yield g("tar")).toLowerCase().includes("gnu tar")}))}t.createTempDirectory=function(){return o(this,void 0,void 0,(function*(){const e="win32"===process.platform;let t=process.env.RUNNER_TEMP||"";if(!t){let r;r=e?process.env.USERPROFILE||"C:\\":"darwin"===process.platform?"/Users":"/home",t=l.join(r,"actions","temp")}const r=l.join(t,h.v4());return yield u.mkdirP(r),r}))},t.getArchiveFileSizeIsBytes=function(e){return p.statSync(e).size},t.resolvePaths=function(e){var t,r,n;return o(this,void 0,void 0,(function*(){const o=[],a=null!==(n=process.env.GITHUB_WORKSPACE)&&void 0!==n?n:process.cwd(),u=yield c.create(e.join("\n"),{implicitDescendants:!1});try{for(var p,d=s(u.globGenerator());!(p=yield d.next()).done;){const e=p.value,t=l.relative(a,e);i.debug("Matched: "+t),o.push(""+t)}}catch(e){t={error:e}}finally{try{p&&!p.done&&(r=d.return)&&(yield r.call(d))}finally{if(t)throw t.error}}return o}))},t.unlinkFile=function(e){return o(this,void 0,void 0,(function*(){return m.promisify(p.unlink)(e)}))},t.getCompressionMethod=function(){return o(this,void 0,void 0,(function*(){if("win32"===process.platform&&!(yield E()))return f.CompressionMethod.Gzip;const e=yield g("zstd"),t=d.clean(e);return e.toLowerCase().includes("zstd command line interface")?!t||d.lt(t,"v1.3.2")?f.CompressionMethod.ZstdWithoutLong:f.CompressionMethod.Zstd:f.CompressionMethod.Gzip}))},t.getCacheFileName=function(e){return e===f.CompressionMethod.Gzip?f.CacheFilename.Gzip:f.CacheFilename.Zstd},t.isGnuTarInstalled=E},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=s(r(20));t.exec=function(e,t,r){return o(this,void 0,void 0,(function*(){const o=n.argStringToArray(e);if(0===o.length)throw new Error("Parameter 'commandLine' cannot be null or empty.");const s=o[0];t=o.slice(1).concat(t||[]);return new n.ToolRunner(s,t,r).exec()}))}},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0});const s=r(11),n=r(0),i=r(9),a=r(22),c=i.promisify(s.exec);function u(e){return o(this,void 0,void 0,(function*(){if(a.IS_WINDOWS){try{(yield a.isDirectory(e,!0))?yield c(`rd /s /q "${e}"`):yield c(`del /f /a "${e}"`)}catch(e){if("ENOENT"!==e.code)throw e}try{yield a.unlink(e)}catch(e){if("ENOENT"!==e.code)throw e}}else{let t=!1;try{t=yield a.isDirectory(e)}catch(e){if("ENOENT"!==e.code)throw e;return}t?yield c(`rm -rf "${e}"`):yield a.unlink(e)}}))}function p(e){return o(this,void 0,void 0,(function*(){yield a.mkdirP(e)}))}function l(e,t,r){return o(this,void 0,void 0,(function*(){if((yield a.lstat(e)).isSymbolicLink()){try{yield a.lstat(t),yield a.unlink(t)}catch(e){"EPERM"===e.code&&(yield a.chmod(t,"0666"),yield a.unlink(t))}const r=yield a.readlink(e);yield a.symlink(r,t,a.IS_WINDOWS?"junction":null)}else(yield a.exists(t))&&!r||(yield a.copyFile(e,t))}))}t.cp=function(e,t,r={}){return o(this,void 0,void 0,(function*(){const{force:s,recursive:i}=function(e){const t=null==e.force||e.force,r=Boolean(e.recursive);return{force:t,recursive:r}}(r),c=(yield a.exists(t))?yield a.stat(t):null;if(c&&c.isFile()&&!s)return;const u=c&&c.isDirectory()?n.join(t,n.basename(e)):t;if(!(yield a.exists(e)))throw new Error("no such file or directory: "+e);if((yield a.stat(e)).isDirectory()){if(!i)throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`);yield function e(t,r,s,n){return o(this,void 0,void 0,(function*(){if(s>=255)return;s++,yield p(r);const o=yield a.readdir(t);for(const i of o){const o=`${t}/${i}`,c=`${r}/${i}`;(yield a.lstat(o)).isDirectory()?yield e(o,c,s,n):yield l(o,c,n)}yield a.chmod(r,(yield a.stat(t)).mode)}))}(e,u,0,s)}else{if(""===n.relative(e,u))throw new Error(`'${u}' and '${e}' are the same file`);yield l(e,u,s)}}))},t.mv=function(e,t,r={}){return o(this,void 0,void 0,(function*(){if(yield a.exists(t)){let o=!0;if((yield a.isDirectory(t))&&(t=n.join(t,n.basename(e)),o=yield a.exists(t)),o){if(null!=r.force&&!r.force)throw new Error("Destination already exists");yield u(t)}}yield p(n.dirname(t)),yield a.rename(e,t)}))},t.rmRF=u,t.mkdirP=p,t.which=function e(t,r){return o(this,void 0,void 0,(function*(){if(!t)throw new Error("parameter 'tool' is required");if(r){if(!(yield e(t,!1)))throw a.IS_WINDOWS?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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{const e=[];if(a.IS_WINDOWS&&process.env.PATHEXT)for(const t of process.env.PATHEXT.split(n.delimiter))t&&e.push(t);if(a.isRooted(t)){const r=yield a.tryGetExecutablePath(t,e);return r||""}if(t.includes("/")||a.IS_WINDOWS&&t.includes("\\"))return"";const r=[];if(process.env.PATH)for(const e of process.env.PATH.split(n.delimiter))e&&r.push(e);for(const o of r){const r=yield a.tryGetExecutablePath(o+n.sep+t,e);if(r)return r}return""}catch(e){throw new Error("which failed with message "+e.message)}}))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=r(7),s=r(0),n="win32"===process.platform;function i(e){return o(e,"hasAbsoluteRoot parameter 'itemPath' must not be empty"),e=a(e),n?e.startsWith("\\\\")||/^[A-Z]:\\/i.test(e):e.startsWith("/")}function a(e){if(e=e||"",n){e=e.replace(/\//g,"\\");return(/^\\\\+[^\\]/.test(e)?"\\":"")+e.replace(/\\\\+/g,"\\")}return e.replace(/\/\/+/g,"/")}function c(e){return e?(e=a(e)).endsWith(s.sep)?e===s.sep||n&&/^[A-Z]:\\$/i.test(e)?e:e.substr(0,e.length-1):e:""}t.dirname=function(e){if(e=c(e),n&&/^\\\\[^\\]+(\\[^\\]+)?$/.test(e))return e;let t=s.dirname(e);return n&&/^\\\\[^\\]+\\[^\\]+\\$/.test(t)&&(t=c(t)),t},t.ensureAbsoluteRoot=function(e,t){if(o(e,"ensureAbsoluteRoot parameter 'root' must not be empty"),o(t,"ensureAbsoluteRoot parameter 'itemPath' must not be empty"),i(t))return t;if(n){if(t.match(/^[A-Z]:[^\\/]|^[A-Z]:$/i)){let e=process.cwd();return o(e.match(/^[A-Z]:\\/i),`Expected current directory to start with an absolute drive root. Actual '${e}'`),t[0].toUpperCase()===e[0].toUpperCase()?2===t.length?`${t[0]}:\\${e.substr(3)}`:(e.endsWith("\\")||(e+="\\"),`${t[0]}:\\${e.substr(3)}${t.substr(2)}`):`${t[0]}:\\${t.substr(2)}`}if(a(t).match(/^\\$|^\\[^\\]/)){const e=process.cwd();return o(e.match(/^[A-Z]:\\/i),`Expected current directory to start with an absolute drive root. Actual '${e}'`),`${e[0]}:\\${t.substr(1)}`}}return o(i(e),"ensureAbsoluteRoot parameter 'root' must have an absolute root"),e.endsWith("/")||n&&e.endsWith("\\")||(e+=s.sep),e+t},t.hasAbsoluteRoot=i,t.hasRoot=function(e){return o(e,"isRooted parameter 'itemPath' must not be empty"),e=a(e),n?e.startsWith("\\")||/^[A-Z]:/i.test(e):e.startsWith("/")},t.normalizeSeparators=a,t.safeTrimTrailingSeparator=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.None=0]="None",e[e.Directory=1]="Directory",e[e.File=2]="File",e[e.All=3]="All"}(t.MatchKind||(t.MatchKind={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.Gzip="cache.tgz",e.Zstd="cache.tzst"}(t.CacheFilename||(t.CacheFilename={})),function(e){e.Gzip="gzip",e.ZstdWithoutLong="zstd-without-long",e.Zstd="zstd"}(t.CompressionMethod||(t.CompressionMethod={})),t.SocketTimeout=5e3},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=s(r(4)),i=s(r(21)),a=s(r(11)),c=s(r(0)),u=s(r(16)),p=s(r(22)),l="win32"===process.platform;class d extends i.EventEmitter{constructor(e,t,r){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=t||[],this.options=r||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,t){const r=this._getSpawnFileName(),o=this._getSpawnArgs(e);let s=t?"":"[command]";if(l)if(this._isCmdFile()){s+=r;for(const e of o)s+=" "+e}else if(e.windowsVerbatimArguments){s+=`"${r}"`;for(const e of o)s+=" "+e}else{s+=this._windowsQuoteCmdArg(r);for(const e of o)s+=" "+this._windowsQuoteCmdArg(e)}else{s+=r;for(const e of o)s+=" "+e}return s}_processLineBuffer(e,t,r){try{let o=t+e.toString(),s=o.indexOf(n.EOL);for(;s>-1;){r(o.substring(0,s)),o=o.substring(s+n.EOL.length),s=o.indexOf(n.EOL)}t=o}catch(e){this._debug("error processing line. Failed with error "+e)}}_getSpawnFileName(){return l&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(l&&this._isCmdFile()){let t='/D /S /C "'+this._windowsQuoteCmdArg(this.toolPath);for(const r of this.args)t+=" ",t+=e.windowsVerbatimArguments?r:this._windowsQuoteCmdArg(r);return t+='"',[t]}return this.args}_endsWith(e,t){return e.endsWith(t)}_isCmdFile(){const e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';const t=[" ","\t","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'];let r=!1;for(const o of e)if(t.some(e=>e===o)){r=!0;break}if(!r)return e;let o='"',s=!0;for(let t=e.length;t>0;t--)o+=e[t-1],s&&"\\"===e[t-1]?o+="\\":'"'===e[t-1]?(s=!0,o+='"'):s=!1;return o+='"',o.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes("\t")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let t='"',r=!0;for(let o=e.length;o>0;o--)t+=e[o-1],r&&"\\"===e[o-1]?t+="\\":'"'===e[o-1]?(r=!0,t+="\\"):r=!1;return t+='"',t.split("").reverse().join("")}_cloneExecOptions(e){const t={cwd:(e=e||{}).cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return t.outStream=e.outStream||process.stdout,t.errStream=e.errStream||process.stderr,t}_getSpawnOptions(e,t){e=e||{};const r={};return r.cwd=e.cwd,r.env=e.env,r.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(r.argv0=`"${t}"`),r}exec(){return o(this,void 0,void 0,(function*(){return!p.isRooted(this.toolPath)&&(this.toolPath.includes("/")||l&&this.toolPath.includes("\\"))&&(this.toolPath=c.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield u.which(this.toolPath,!0),new Promise((e,t)=>{this._debug("exec tool: "+this.toolPath),this._debug("arguments:");for(const e of this.args)this._debug("   "+e);const r=this._cloneExecOptions(this.options);!r.silent&&r.outStream&&r.outStream.write(this._getCommandString(r)+n.EOL);const o=new m(r,this.toolPath);o.on("debug",e=>{this._debug(e)});const s=this._getSpawnFileName(),i=a.spawn(s,this._getSpawnArgs(r),this._getSpawnOptions(this.options,s));i.stdout&&i.stdout.on("data",e=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(e),!r.silent&&r.outStream&&r.outStream.write(e),this._processLineBuffer(e,"",e=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(e)})});if(i.stderr&&i.stderr.on("data",e=>{if(o.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(e),!r.silent&&r.errStream&&r.outStream){(r.failOnStdErr?r.errStream:r.outStream).write(e)}this._processLineBuffer(e,"",e=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(e)})}),i.on("error",e=>{o.processError=e.message,o.processExited=!0,o.processClosed=!0,o.CheckComplete()}),i.on("exit",e=>{o.processExitCode=e,o.processExited=!0,this._debug(`Exit code ${e} received from tool '${this.toolPath}'`),o.CheckComplete()}),i.on("close",e=>{o.processExitCode=e,o.processExited=!0,o.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),o.CheckComplete()}),o.on("done",(r,o)=>{"".length>0&&this.emit("stdline",""),"".length>0&&this.emit("errline",""),i.removeAllListeners(),r?t(r):e(o)}),this.options.input){if(!i.stdin)throw new Error("child process missing stdin");i.stdin.end(this.options.input)}})}))}}t.ToolRunner=d,t.argStringToArray=function(e){const t=[];let r=!1,o=!1,s="";function n(e){o&&'"'!==e&&(s+="\\"),s+=e,o=!1}for(let i=0;i<e.length;i++){const a=e.charAt(i);'"'!==a?"\\"===a&&o?n(a):"\\"===a&&r?o=!0:" "!==a||r?n(a):s.length>0&&(t.push(s),s=""):o?n(a):r=!r}return s.length>0&&t.push(s.trim()),t};class m extends i.EventEmitter{constructor(e,t){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!t)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=t,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=setTimeout(m.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):0===this.processExitCode||this.options.ignoreReturnCode?this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`)):e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`)),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){const t=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(t)}e._setResult()}}}},function(e,t){e.exports=require("events")},function(e,t,r){"use strict";var o,s=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0});const n=r(7),i=r(2),a=r(0);function c(e){return(1&e.mode)>0||(8&e.mode)>0&&e.gid===process.getgid()||(64&e.mode)>0&&e.uid===process.getuid()}o=i.promises,t.chmod=o.chmod,t.copyFile=o.copyFile,t.lstat=o.lstat,t.mkdir=o.mkdir,t.readdir=o.readdir,t.readlink=o.readlink,t.rename=o.rename,t.rmdir=o.rmdir,t.stat=o.stat,t.symlink=o.symlink,t.unlink=o.unlink,t.IS_WINDOWS="win32"===process.platform,t.exists=function(e){return s(this,void 0,void 0,(function*(){try{yield t.stat(e)}catch(e){if("ENOENT"===e.code)return!1;throw e}return!0}))},t.isDirectory=function(e,r=!1){return s(this,void 0,void 0,(function*(){return(r?yield t.stat(e):yield t.lstat(e)).isDirectory()}))},t.isRooted=function(e){if(!(e=function(e){if(e=e||"",t.IS_WINDOWS)return(e=e.replace(/\//g,"\\")).replace(/\\\\+/g,"\\");return e.replace(/\/\/+/g,"/")}(e)))throw new Error('isRooted() parameter "p" cannot be empty');return t.IS_WINDOWS?e.startsWith("\\")||/^[A-Z]:/i.test(e):e.startsWith("/")},t.mkdirP=function e(r,o=1e3,i=1){return s(this,void 0,void 0,(function*(){if(n.ok(r,"a path argument must be provided"),r=a.resolve(r),i>=o)return t.mkdir(r);try{return void(yield t.mkdir(r))}catch(s){switch(s.code){case"ENOENT":return yield e(a.dirname(r),o,i+1),void(yield t.mkdir(r));default:{let e;try{e=yield t.stat(r)}catch(e){throw s}if(!e.isDirectory())throw s}}}}))},t.tryGetExecutablePath=function(e,r){return s(this,void 0,void 0,(function*(){let o=void 0;try{o=yield t.stat(e)}catch(t){"ENOENT"!==t.code&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}if(o&&o.isFile())if(t.IS_WINDOWS){const t=a.extname(e).toUpperCase();if(r.some(e=>e.toUpperCase()===t))return e}else if(c(o))return e;const s=e;for(const n of r){e=s+n,o=void 0;try{o=yield t.stat(e)}catch(t){"ENOENT"!==t.code&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}if(o&&o.isFile()){if(t.IS_WINDOWS){try{const r=a.dirname(e),o=a.basename(e).toUpperCase();for(const s of yield t.readdir(r))if(o===s.toUpperCase()){e=a.join(r,s);break}}catch(t){console.log(`Unexpected error attempting to determine the actual case of the file '${e}': ${t}`)}return e}if(c(o))return e}}return""}))}},function(e,t,r){var o=r(12);e.exports=function(){return o.randomBytes(16)}},function(e,t){for(var r=[],o=0;o<256;++o)r[o]=(o+256).toString(16).substr(1);e.exports=function(e,t){var o=t||0,s=r;return[s[e[o++]],s[e[o++]],s[e[o++]],s[e[o++]],"-",s[e[o++]],s[e[o++]],"-",s[e[o++]],s[e[o++]],"-",s[e[o++]],s[e[o++]],"-",s[e[o++]],s[e[o++]],s[e[o++]],s[e[o++]],s[e[o++]],s[e[o++]]].join("")}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=r(6),s=r(8),n=r(10),i=r(49);let a;var c,u,p;!function(e){e[e.OK=200]="OK",e[e.MultipleChoices=300]="MultipleChoices",e[e.MovedPermanently=301]="MovedPermanently",e[e.ResourceMoved=302]="ResourceMoved",e[e.SeeOther=303]="SeeOther",e[e.NotModified=304]="NotModified",e[e.UseProxy=305]="UseProxy",e[e.SwitchProxy=306]="SwitchProxy",e[e.TemporaryRedirect=307]="TemporaryRedirect",e[e.PermanentRedirect=308]="PermanentRedirect",e[e.BadRequest=400]="BadRequest",e[e.Unauthorized=401]="Unauthorized",e[e.PaymentRequired=402]="PaymentRequired",e[e.Forbidden=403]="Forbidden",e[e.NotFound=404]="NotFound",e[e.MethodNotAllowed=405]="MethodNotAllowed",e[e.NotAcceptable=406]="NotAcceptable",e[e.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",e[e.RequestTimeout=408]="RequestTimeout",e[e.Conflict=409]="Conflict",e[e.Gone=410]="Gone",e[e.TooManyRequests=429]="TooManyRequests",e[e.InternalServerError=500]="InternalServerError",e[e.NotImplemented=501]="NotImplemented",e[e.BadGateway=502]="BadGateway",e[e.ServiceUnavailable=503]="ServiceUnavailable",e[e.GatewayTimeout=504]="GatewayTimeout"}(c=t.HttpCodes||(t.HttpCodes={})),function(e){e.Accept="accept",e.ContentType="content-type"}(u=t.Headers||(t.Headers={})),function(e){e.ApplicationJson="application/json"}(p=t.MediaTypes||(t.MediaTypes={})),t.getProxyUrl=function(e){let t=i.getProxyUrl(o.parse(e));return t?t.href:""};const l=[c.MovedPermanently,c.ResourceMoved,c.SeeOther,c.TemporaryRedirect,c.PermanentRedirect],d=[c.BadGateway,c.ServiceUnavailable,c.GatewayTimeout],m=["OPTIONS","GET","DELETE","HEAD"];class h{constructor(e){this.message=e}readBody(){return new Promise(async(e,t)=>{let r=Buffer.alloc(0);this.message.on("data",e=>{r=Buffer.concat([r,e])}),this.message.on("end",()=>{e(r.toString())})})}}t.HttpClientResponse=h,t.isHttps=function(e){return"https:"===o.parse(e).protocol};class f{constructor(e,t,r){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=e,this.handlers=t||[],this.requestOptions=r,r&&(null!=r.ignoreSslError&&(this._ignoreSslError=r.ignoreSslError),this._socketTimeout=r.socketTimeout,null!=r.allowRedirects&&(this._allowRedirects=r.allowRedirects),null!=r.allowRedirectDowngrade&&(this._allowRedirectDowngrade=r.allowRedirectDowngrade),null!=r.maxRedirects&&(this._maxRedirects=Math.max(r.maxRedirects,0)),null!=r.keepAlive&&(this._keepAlive=r.keepAlive),null!=r.allowRetries&&(this._allowRetries=r.allowRetries),null!=r.maxRetries&&(this._maxRetries=r.maxRetries))}options(e,t){return this.request("OPTIONS",e,null,t||{})}get(e,t){return this.request("GET",e,null,t||{})}del(e,t){return this.request("DELETE",e,null,t||{})}post(e,t,r){return this.request("POST",e,t,r||{})}patch(e,t,r){return this.request("PATCH",e,t,r||{})}put(e,t,r){return this.request("PUT",e,t,r||{})}head(e,t){return this.request("HEAD",e,null,t||{})}sendStream(e,t,r,o){return this.request(e,t,r,o)}async getJson(e,t={}){t[u.Accept]=this._getExistingOrDefaultHeader(t,u.Accept,p.ApplicationJson);let r=await this.get(e,t);return this._processResponse(r,this.requestOptions)}async postJson(e,t,r={}){let o=JSON.stringify(t,null,2);r[u.Accept]=this._getExistingOrDefaultHeader(r,u.Accept,p.ApplicationJson),r[u.ContentType]=this._getExistingOrDefaultHeader(r,u.ContentType,p.ApplicationJson);let s=await this.post(e,o,r);return this._processResponse(s,this.requestOptions)}async putJson(e,t,r={}){let o=JSON.stringify(t,null,2);r[u.Accept]=this._getExistingOrDefaultHeader(r,u.Accept,p.ApplicationJson),r[u.ContentType]=this._getExistingOrDefaultHeader(r,u.ContentType,p.ApplicationJson);let s=await this.put(e,o,r);return this._processResponse(s,this.requestOptions)}async patchJson(e,t,r={}){let o=JSON.stringify(t,null,2);r[u.Accept]=this._getExistingOrDefaultHeader(r,u.Accept,p.ApplicationJson),r[u.ContentType]=this._getExistingOrDefaultHeader(r,u.ContentType,p.ApplicationJson);let s=await this.patch(e,o,r);return this._processResponse(s,this.requestOptions)}async request(e,t,r,s){if(this._disposed)throw new Error("Client has already been disposed.");let n,i=o.parse(t),a=this._prepareRequest(e,i,s),u=this._allowRetries&&-1!=m.indexOf(e)?this._maxRetries+1:1,p=0;for(;p<u;){if(n=await this.requestRaw(a,r),n&&n.message&&n.message.statusCode===c.Unauthorized){let e;for(let t=0;t<this.handlers.length;t++)if(this.handlers[t].canHandleAuthentication(n)){e=this.handlers[t];break}return e?e.handleAuthentication(this,a,r):n}let t=this._maxRedirects;for(;-1!=l.indexOf(n.message.statusCode)&&this._allowRedirects&&t>0;){const c=n.message.headers.location;if(!c)break;let u=o.parse(c);if("https:"==i.protocol&&i.protocol!=u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(await n.readBody(),u.hostname!==i.hostname)for(let e in s)"authorization"===e.toLowerCase()&&delete s[e];a=this._prepareRequest(e,u,s),n=await this.requestRaw(a,r),t--}if(-1==d.indexOf(n.message.statusCode))return n;p+=1,p<u&&(await n.readBody(),await this._performExponentialBackoff(p))}return n}dispose(){this._agent&&this._agent.destroy(),this._disposed=!0}requestRaw(e,t){return new Promise((r,o)=>{this.requestRawWithCallback(e,t,(function(e,t){e&&o(e),r(t)}))})}requestRawWithCallback(e,t,r){let o;"string"==typeof t&&(e.options.headers["Content-Length"]=Buffer.byteLength(t,"utf8"));let s=!1,n=(e,t)=>{s||(s=!0,r(e,t))},i=e.httpModule.request(e.options,e=>{let t=new h(e);n(null,t)});i.on("socket",e=>{o=e}),i.setTimeout(this._socketTimeout||18e4,()=>{o&&o.end(),n(new Error("Request timeout: "+e.options.path),null)}),i.on("error",(function(e){n(e,null)})),t&&"string"==typeof t&&i.write(t,"utf8"),t&&"string"!=typeof t?(t.on("close",(function(){i.end()})),t.pipe(i)):i.end()}getAgent(e){let t=o.parse(e);return this._getAgent(t)}_prepareRequest(e,t,r){const o={};o.parsedUrl=t;const i="https:"===o.parsedUrl.protocol;o.httpModule=i?n:s;const a=i?443:80;return o.options={},o.options.host=o.parsedUrl.hostname,o.options.port=o.parsedUrl.port?parseInt(o.parsedUrl.port):a,o.options.path=(o.parsedUrl.pathname||"")+(o.parsedUrl.search||""),o.options.method=e,o.options.headers=this._mergeHeaders(r),null!=this.userAgent&&(o.options.headers["user-agent"]=this.userAgent),o.options.agent=this._getAgent(o.parsedUrl),this.handlers&&this.handlers.forEach(e=>{e.prepareRequest(o.options)}),o}_mergeHeaders(e){const t=e=>Object.keys(e).reduce((t,r)=>(t[r.toLowerCase()]=e[r],t),{});return this.requestOptions&&this.requestOptions.headers?Object.assign({},t(this.requestOptions.headers),t(e)):t(e||{})}_getExistingOrDefaultHeader(e,t,r){let o;var s;return this.requestOptions&&this.requestOptions.headers&&(o=(s=this.requestOptions.headers,Object.keys(s).reduce((e,t)=>(e[t.toLowerCase()]=s[t],e),{}))[t]),e[t]||o||r}_getAgent(e){let t,o=i.getProxyUrl(e),c=o&&o.hostname;if(this._keepAlive&&c&&(t=this._proxyAgent),this._keepAlive&&!c&&(t=this._agent),t)return t;const u="https:"===e.protocol;let p=100;if(this.requestOptions&&(p=this.requestOptions.maxSockets||s.globalAgent.maxSockets),c){a||(a=r(50));const e={maxSockets:p,keepAlive:this._keepAlive,proxy:{proxyAuth:o.auth,host:o.hostname,port:o.port}};let s;const n="https:"===o.protocol;s=u?n?a.httpsOverHttps:a.httpsOverHttp:n?a.httpOverHttps:a.httpOverHttp,t=s(e),this._proxyAgent=t}if(this._keepAlive&&!t){const e={keepAlive:this._keepAlive,maxSockets:p};t=u?new n.Agent(e):new s.Agent(e),this._agent=t}return t||(t=u?n.globalAgent:s.globalAgent),u&&this._ignoreSslError&&(t.options=Object.assign(t.options||{},{rejectUnauthorized:!1})),t}_performExponentialBackoff(e){e=Math.min(10,e);const t=5*Math.pow(2,e);return new Promise(e=>setTimeout(()=>e(),t))}static dateTimeDeserializer(e,t){if("string"==typeof t){let e=new Date(t);if(!isNaN(e.valueOf()))return e}return t}async _processResponse(e,t){return new Promise(async(r,o)=>{const s=e.message.statusCode,n={statusCode:s,result:null,headers:{}};let i,a;s==c.NotFound&&r(n);try{a=await e.readBody(),a&&a.length>0&&(i=t&&t.deserializeDates?JSON.parse(a,f.dateTimeDeserializer):JSON.parse(a),n.result=i),n.headers=e.message.headers}catch(e){}if(s>299){let e;e=i&&i.message?i.message:a&&a.length>0?a:"Failed request: ("+s+")";let t=new Error(e);t.statusCode=s,n.result&&(t.result=n.result),o(t)}else r(n)})}}t.HttpClient=f},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Context=void 0;const o=r(2),s=r(4);t.Context=class{constructor(){if(this.payload={},process.env.GITHUB_EVENT_PATH)if(o.existsSync(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse(o.readFileSync(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{const e=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${e} does not exist${s.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 e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){const[e,t]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:t}}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'")}}},function(e,t,r){var o=r(59),s=r(60),n=r(61),i=Function.bind,a=i.bind(i);function c(e,t,r){var o=a(n,null).apply(null,r?[t,r]:[t]);e.api={remove:o},e.remove=o,["before","error","after","wrap"].forEach((function(o){var n=r?[t,o,r]:[t,o];e[o]=e.api[o]=a(s,null).apply(null,n)}))}function u(){var e={registry:{}},t=o.bind(null,e);return c(t,e),t}var p=!1;function l(){return p||(console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4'),p=!0),u()}l.Singular=function(){var e={registry:{}},t=o.bind(null,e,"h");return c(t,e,"h"),t}.bind(),l.Collection=u.bind(),e.exports=l,e.exports.Hook=l,e.exports.Singular=l.Singular,e.exports.Collection=l.Collection},function(e,t,r){var o=r(62);function s(e){var t=function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))};return t.called=!1,t}function n(e){var t=function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=e.apply(this,arguments)},r=e.name||"Function wrapped with `once`";return t.onceError=r+" shouldn't be called more than once",t.called=!1,t}e.exports=o(s),e.exports.strict=o(n),s.proto=s((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return s(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return n(this)},configurable:!0})}))},function(e,t,r){const o=r(11),s=r(12),n=r(2),i=r(4),a=r(0),c=r(30),u=r(5),p=r(15),l=r(56),d=r(20);function m(e){return s.createHash("sha256").update(e).digest("hex")}(async function(){await u.group("install pre-commit",async()=>{await p.exec("pip",["install","pre-commit"]),await p.exec("pip",["freeze","--local"])});const e=["run","--show-diff-on-failure","--color=always",...d.argStringToArray(u.getInput("extra_args"))],t=u.getInput("token"),r=l.context.payload.pull_request,s=!!t&&!!r,h=[a.join(i.homedir(),".cache","pre-commit")],f=`pre-commit-2-${m(function(){const e=o.spawnSync("python",["-c",'import sys;print(sys.executable+"\\n"+sys.version)']);if(0!==e.status)throw"python version check failed";return e.stdout.toString()}())}-${g=".pre-commit-config.yaml",m(n.readFileSync(g).toString())}`;var g;const E=await c.restoreCache(h,f),w=await p.exec("pre-commit",e,{ignoreReturnCode:s});if(E||await c.saveCache(h,f),w&&s){await p.exec("pre-commit",e);await p.exec("git",["diff","--quiet"],{ignoreReturnCode:!0})&&await u.group("push fixes",async()=>{await p.exec("git",["config","user.name","pre-commit"]),await p.exec("git",["config","user.email","pre-commit@example.com"]);const e=r.head.ref;await p.exec("git",["checkout","HEAD","-b",e]),await p.exec("git",["commit","-am","pre-commit fixes"]);const o=function(e,t){return e.replace(/^https:\/\//,`https://x-access-token:${t}@`)}(r.head.repo.clone_url,t);await p.exec("git",["push",o,"HEAD"])})}})().catch(e=>u.setFailed(e.message))},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=s(r(5)),i=s(r(0)),a=s(r(14)),c=s(r(48)),u=r(55);class p extends Error{constructor(e){super(e),this.name="ValidationError",Object.setPrototypeOf(this,p.prototype)}}t.ValidationError=p;class l extends Error{constructor(e){super(e),this.name="ReserveCacheError",Object.setPrototypeOf(this,l.prototype)}}function d(e){if(!e||0===e.length)throw new p("Path Validation Error: At least one directory or file path is required")}function m(e){if(e.length>512)throw new p(`Key Validation Error: ${e} cannot be larger than 512 characters.`);if(!/^[^,]*$/.test(e))throw new p(`Key Validation Error: ${e} cannot contain commas.`)}t.ReserveCacheError=l,t.restoreCache=function(e,t,r){return o(this,void 0,void 0,(function*(){d(e),r=r||[];const o=[t,...r];if(n.debug("Resolved Keys:"),n.debug(JSON.stringify(o)),o.length>10)throw new p("Key Validation Error: Keys are limited to a maximum of 10.");for(const e of o)m(e);const s=yield a.getCompressionMethod(),l=yield c.getCacheEntry(o,e,{compressionMethod:s});if(!(null==l?void 0:l.archiveLocation))return;const h=i.join(yield a.createTempDirectory(),a.getCacheFileName(s));n.debug("Archive Path: "+h);try{yield c.downloadCache(l.archiveLocation,h);const e=a.getArchiveFileSizeIsBytes(h);n.info(`Cache Size: ~${Math.round(e/1048576)} MB (${e} B)`),yield u.extractTar(h,s)}finally{try{yield a.unlinkFile(h)}catch(e){n.debug("Failed to delete archive: "+e)}}return l.cacheKey}))},t.saveCache=function(e,t,r){return o(this,void 0,void 0,(function*(){d(e),m(t);const o=yield a.getCompressionMethod();n.debug("Reserving Cache");const s=yield c.reserveCache(t,e,{compressionMethod:o});if(-1===s)throw new l(`Unable to reserve cache with key ${t}, another job may be creating this cache.`);n.debug("Cache ID: "+s);const p=yield a.resolvePaths(e);n.debug("Cache Paths:"),n.debug(""+JSON.stringify(p));const h=yield a.createTempDirectory(),f=i.join(h,a.getCacheFileName(o));n.debug("Archive Path: "+f),yield u.createTar(h,p,o);const g=a.getArchiveFileSizeIsBytes(f);if(n.debug("File Size: "+g),g>5368709120)throw new Error(`Cache size of ~${Math.round(g/1048576)} MB (${g} B) is over the 5GB limit, not saving cache.`);return n.debug(`Saving Cache (ID: ${s})`),yield c.saveCache(s,f,r),s}))}},function(e,t,r){"use strict";var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const s=o(r(4)),n=r(13);function i(e,t,r){const o=new a(e,t,r);process.stdout.write(o.toString()+s.EOL)}t.issueCommand=i,t.issue=function(e,t=""){i(e,{},t)};class a{constructor(e,t,r){e||(e="missing.command"),this.command=e,this.properties=t,this.message=r}toString(){let e="::"+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(const o in this.properties)if(this.properties.hasOwnProperty(o)){const s=this.properties[o];s&&(r?r=!1:e+=",",e+=`${o}=${t=s,n.toCommandValue(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}`)}}var t;return e+="::"+function(e){return n.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}(this.message),e}}},function(e,t,r){"use strict";var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const s=o(r(2)),n=o(r(4)),i=r(13);t.issueCommand=function(e,t){const r=process.env["GITHUB_"+e];if(!r)throw new Error("Unable to find environment variable for file command "+e);if(!s.existsSync(r))throw new Error("Missing file at path: "+r);s.appendFileSync(r,`${i.toCommandValue(t)}${n.EOL}`,{encoding:"utf8"})}},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0});const s=r(34);t.create=function(e,t){return o(this,void 0,void 0,(function*(){return yield s.DefaultGlobber.create(e,t)}))}},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),t={},o("next"),o("throw"),o("return"),t[Symbol.asyncIterator]=function(){return this},t);function o(r){t[r]=e[r]&&function(t){return new Promise((function(o,s){(function(e,t,r,o){Promise.resolve(o).then((function(t){e({value:t,done:r})}),t)})(o,s,(t=e[r](t)).done,t.value)}))}}},n=this&&this.__await||function(e){return this instanceof n?(this.v=e,this):new n(e)},i=this&&this.__asyncGenerator||function(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,s=r.apply(e,t||[]),i=[];return o={},a("next"),a("throw"),a("return"),o[Symbol.asyncIterator]=function(){return this},o;function a(e){s[e]&&(o[e]=function(t){return new Promise((function(r,o){i.push([e,t,r,o])>1||c(e,t)}))})}function c(e,t){try{(r=s[e](t)).value instanceof n?Promise.resolve(r.value.v).then(u,p):l(i[0][2],r)}catch(e){l(i[0][3],e)}var r}function u(e){c("next",e)}function p(e){c("throw",e)}function l(e,t){e(t),i.shift(),i.length&&c(i[0][0],i[0][1])}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(5),c=r(2),u=r(35),p=r(0),l=r(36),d=r(18),m=r(37),h=r(43),f="win32"===process.platform;class g{constructor(e){this.patterns=[],this.searchPaths=[],this.options=u.getOptions(e)}getSearchPaths(){return this.searchPaths.slice()}glob(){var e,t;return o(this,void 0,void 0,(function*(){const r=[];try{for(var o,n=s(this.globGenerator());!(o=yield n.next()).done;){const e=o.value;r.push(e)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&(yield t.call(n))}finally{if(e)throw e.error}}return r}))}globGenerator(){return i(this,arguments,(function*(){const e=u.getOptions(this.options),t=[];for(const r of this.patterns)t.push(r),e.implicitDescendants&&(r.trailingSeparator||"**"!==r.segments[r.segments.length-1])&&t.push(new m.Pattern(r.negate,r.segments.concat("**")));const r=[];for(const e of l.getSearchPaths(t)){a.debug(`Search path '${e}'`);try{yield n(c.promises.lstat(e))}catch(e){if("ENOENT"===e.code)continue;throw e}r.unshift(new h.SearchState(e,1))}const o=[];for(;r.length;){const s=r.pop(),i=l.match(t,s.path),a=!!i||l.partialMatch(t,s.path);if(!i&&!a)continue;const u=yield n(g.stat(s,e,o));if(u)if(u.isDirectory()){if(i&d.MatchKind.Directory)yield yield n(s.path);else if(!a)continue;const e=s.level+1,t=(yield n(c.promises.readdir(s.path))).map(t=>new h.SearchState(p.join(s.path,t),e));r.push(...t.reverse())}else i&d.MatchKind.File&&(yield yield n(s.path))}}))}static create(e,t){return o(this,void 0,void 0,(function*(){const r=new g(t);f&&(e=(e=e.replace(/\r\n/g,"\n")).replace(/\r/g,"\n"));const o=e.split("\n").map(e=>e.trim());for(const e of o)e&&!e.startsWith("#")&&r.patterns.push(new m.Pattern(e));return r.searchPaths.push(...l.getSearchPaths(r.patterns)),r}))}static stat(e,t,r){return o(this,void 0,void 0,(function*(){let o;if(t.followSymbolicLinks)try{o=yield c.promises.stat(e.path)}catch(r){if("ENOENT"===r.code){if(t.omitBrokenSymbolicLinks)return void a.debug(`Broken symlink '${e.path}'`);throw new Error(`No information found for the path '${e.path}'. This may indicate a broken symbolic link.`)}throw r}else o=yield c.promises.lstat(e.path);if(o.isDirectory()&&t.followSymbolicLinks){const t=yield c.promises.realpath(e.path);for(;r.length>=e.level;)r.pop();if(r.some(e=>e===t))return void a.debug(`Symlink cycle detected for path '${e.path}' and realpath '${t}'`);r.push(t)}return o}))}}t.DefaultGlobber=g},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=r(5);t.getOptions=function(e){const t={followSymbolicLinks:!0,implicitDescendants:!0,omitBrokenSymbolicLinks:!0};return e&&("boolean"==typeof e.followSymbolicLinks&&(t.followSymbolicLinks=e.followSymbolicLinks,o.debug(`followSymbolicLinks '${t.followSymbolicLinks}'`)),"boolean"==typeof e.implicitDescendants&&(t.implicitDescendants=e.implicitDescendants,o.debug(`implicitDescendants '${t.implicitDescendants}'`)),"boolean"==typeof e.omitBrokenSymbolicLinks&&(t.omitBrokenSymbolicLinks=e.omitBrokenSymbolicLinks,o.debug(`omitBrokenSymbolicLinks '${t.omitBrokenSymbolicLinks}'`))),t}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=r(17),s=r(18),n="win32"===process.platform;t.getSearchPaths=function(e){e=e.filter(e=>!e.negate);const t={};for(const r of e){t[n?r.searchPath.toUpperCase():r.searchPath]="candidate"}const r=[];for(const s of e){const e=n?s.searchPath.toUpperCase():s.searchPath;if("included"===t[e])continue;let i=!1,a=e,c=o.dirname(a);for(;c!==a;){if(t[c]){i=!0;break}a=c,c=o.dirname(a)}i||(r.push(s.searchPath),t[e]="included")}return r},t.match=function(e,t){let r=s.MatchKind.None;for(const o of e)o.negate?r&=~o.match(t):r|=o.match(t);return r},t.partialMatch=function(e,t){return e.some(e=>!e.negate&&e.partialMatch(t))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=r(7),s=r(4),n=r(0),i=r(17),a=r(38),c=r(18),u=r(42),p="win32"===process.platform;class l{constructor(e,t){let r;if(this.negate=!1,"string"==typeof e)r=e.trim();else{o((t=t||[]).length,"Parameter 'segments' must not empty");const s=l.getLiteral(t[0]);o(s&&i.hasAbsoluteRoot(s),"Parameter 'segments' first element must be a root path"),r=new u.Path(t).toString().trim(),e&&(r="!"+r)}for(;r.startsWith("!");)this.negate=!this.negate,r=r.substr(1).trim();r=l.fixupPattern(r),this.segments=new u.Path(r).segments,this.trailingSeparator=i.normalizeSeparators(r).endsWith(n.sep),r=i.safeTrimTrailingSeparator(r);let s=!1;const c=this.segments.map(e=>l.getLiteral(e)).filter(e=>!s&&!(s=""===e));this.searchPath=new u.Path(c).toString(),this.rootRegExp=new RegExp(l.regExpEscape(c[0]),p?"i":"");const d={dot:!0,nobrace:!0,nocase:p,nocomment:!0,noext:!0,nonegate:!0};r=p?r.replace(/\\/g,"/"):r,this.minimatch=new a.Minimatch(r,d)}match(e){return"**"===this.segments[this.segments.length-1]?(e=i.normalizeSeparators(e)).endsWith(n.sep)||(e=`${e}${n.sep}`):e=i.safeTrimTrailingSeparator(e),this.minimatch.match(e)?this.trailingSeparator?c.MatchKind.Directory:c.MatchKind.All:c.MatchKind.None}partialMatch(e){return e=i.safeTrimTrailingSeparator(e),i.dirname(e)===e?this.rootRegExp.test(e):this.minimatch.matchOne(e.split(p?/\\+/:/\/+/),this.minimatch.set[0],!0)}static globEscape(e){return(p?e:e.replace(/\\/g,"\\\\")).replace(/(\[)(?=[^/]+\])/g,"[[]").replace(/\?/g,"[?]").replace(/\*/g,"[*]")}static fixupPattern(e){o(e,"pattern cannot be empty");const t=new u.Path(e).segments.map(e=>l.getLiteral(e));if(o(t.every((e,t)=>("."!==e||0===t)&&".."!==e),`Invalid pattern '${e}'. Relative pathing '.' and '..' is not allowed.`),o(!i.hasRoot(e)||t[0],`Invalid pattern '${e}'. Root segment must not contain globs.`),"."===(e=i.normalizeSeparators(e))||e.startsWith("."+n.sep))e=l.globEscape(process.cwd())+e.substr(1);else if("~"===e||e.startsWith("~"+n.sep)){const t=s.homedir();o(t,"Unable to determine HOME directory"),o(i.hasAbsoluteRoot(t),`Expected HOME directory to be a rooted path. Actual '${t}'`),e=l.globEscape(t)+e.substr(1)}else if(p&&(e.match(/^[A-Z]:$/i)||e.match(/^[A-Z]:[^\\]/i))){let t=i.ensureAbsoluteRoot("C:\\dummy-root",e.substr(0,2));e.length>2&&!t.endsWith("\\")&&(t+="\\"),e=l.globEscape(t)+e.substr(2)}else if(p&&("\\"===e||e.match(/^\\[^\\]/))){let t=i.ensureAbsoluteRoot("C:\\dummy-root","\\");t.endsWith("\\")||(t+="\\"),e=l.globEscape(t)+e.substr(1)}else e=i.ensureAbsoluteRoot(l.globEscape(process.cwd()),e);return i.normalizeSeparators(e)}static getLiteral(e){let t="";for(let r=0;r<e.length;r++){const o=e[r];if("\\"===o&&!p&&r+1<e.length)t+=e[++r];else{if("*"===o||"?"===o)return"";if("["===o&&r+1<e.length){let o="",s=-1;for(let t=r+1;t<e.length;t++){const r=e[t];if("\\"===r&&!p&&t+1<e.length)o+=e[++t];else{if("]"===r){s=t;break}o+=r}}if(s>=0){if(o.length>1)return"";if(o){t+=o,r=s;continue}}}t+=o}}return t}static regExpEscape(e){return e.replace(/[[\\^$.|?*+()]/g,"\\$&")}}t.Pattern=l},function(e,t,r){e.exports=p,p.Minimatch=l;var o={sep:"/"};try{o=r(0)}catch(e){}var s=p.GLOBSTAR=l.GLOBSTAR={},n=r(39),i={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},a="().*{}+?[]^$\\!".split("").reduce((function(e,t){return e[t]=!0,e}),{});var c=/\/+/;function u(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach((function(e){r[e]=t[e]})),Object.keys(e).forEach((function(t){r[t]=e[t]})),r}function p(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new l(t,r).match(e))}function l(e,t){if(!(this instanceof l))return new l(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==o.sep&&(e=e.split(o.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function d(e,t){if(t||(t=this instanceof l?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:n(e)}p.filter=function(e,t){return t=t||{},function(r,o,s){return p(r,e,t)}},p.defaults=function(e){if(!e||!Object.keys(e).length)return p;var t=p,r=function(r,o,s){return t.minimatch(r,o,u(e,s))};return r.Minimatch=function(r,o){return new t.Minimatch(r,u(e,o))},r},l.defaults=function(e){return e&&Object.keys(e).length?p.defaults(e).Minimatch:l},l.prototype.debug=function(){},l.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map((function(e){return e.split(c)})),this.debug(this.pattern,r),r=r.map((function(e,t,r){return e.map(this.parse,this)}),this),this.debug(this.pattern,r),r=r.filter((function(e){return-1===e.indexOf(!1)})),this.debug(this.pattern,r),this.set=r},l.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=this.options,o=0;if(r.nonegate)return;for(var s=0,n=e.length;s<n&&"!"===e.charAt(s);s++)t=!t,o++;o&&(this.pattern=e.substr(o));this.negate=t},p.braceExpand=function(e,t){return d(e,t)},l.prototype.braceExpand=d,l.prototype.parse=function(e,t){if(e.length>65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return s;if(""===e)return"";var o,n="",c=!!r.nocase,u=!1,p=[],l=[],d=!1,h=-1,f=-1,g="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",E=this;function w(){if(o){switch(o){case"*":n+="[^/]*?",c=!0;break;case"?":n+="[^/]",c=!0;break;default:n+="\\"+o}E.debug("clearStateChar %j %j",o,n),o=!1}}for(var T,y=0,b=e.length;y<b&&(T=e.charAt(y));y++)if(this.debug("%s\t%s %s %j",e,y,n,T),u&&a[T])n+="\\"+T,u=!1;else switch(T){case"/":return!1;case"\\":w(),u=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,y,n,T),d){this.debug("  in class"),"!"===T&&y===f+1&&(T="^"),n+=T;continue}E.debug("call clearStateChar %j",o),w(),o=T,r.noext&&w();continue;case"(":if(d){n+="(";continue}if(!o){n+="\\(";continue}p.push({type:o,start:y-1,reStart:n.length,open:i[o].open,close:i[o].close}),n+="!"===o?"(?:(?!(?:":"(?:",this.debug("plType %j %j",o,n),o=!1;continue;case")":if(d||!p.length){n+="\\)";continue}w(),c=!0;var v=p.pop();n+=v.close,"!"===v.type&&l.push(v),v.reEnd=n.length;continue;case"|":if(d||!p.length||u){n+="\\|",u=!1;continue}w(),n+="|";continue;case"[":if(w(),d){n+="\\"+T;continue}d=!0,f=y,h=n.length,n+=T;continue;case"]":if(y===f+1||!d){n+="\\"+T,u=!1;continue}if(d){var _=e.substring(f+1,y);try{RegExp("["+_+"]")}catch(e){var P=this.parse(_,m);n=n.substr(0,h)+"\\["+P[0]+"\\]",c=c||P[1],d=!1;continue}}c=!0,d=!1,n+=T;continue;default:w(),u?u=!1:!a[T]||"^"===T&&d||(n+="\\"),n+=T}d&&(_=e.substr(f+1),P=this.parse(_,m),n=n.substr(0,h)+"\\["+P[0],c=c||P[1]);for(v=p.pop();v;v=p.pop()){var O=n.slice(v.reStart+v.open.length);this.debug("setting tail",n,v),O=O.replace(/((?:\\{2}){0,64})(\\?)\|/g,(function(e,t,r){return r||(r="\\"),t+t+r+"|"})),this.debug("tail=%j\n   %s",O,O,v,n);var R="*"===v.type?"[^/]*?":"?"===v.type?"[^/]":"\\"+v.type;c=!0,n=n.slice(0,v.reStart)+R+"\\("+O}w(),u&&(n+="\\\\");var S=!1;switch(n.charAt(0)){case".":case"[":case"(":S=!0}for(var A=l.length-1;A>-1;A--){var k=l[A],C=n.slice(0,k.reStart),G=n.slice(k.reStart,k.reEnd-8),I=n.slice(k.reEnd-8,k.reEnd),L=n.slice(k.reEnd);I+=L;var x=C.split("(").length-1,F=L;for(y=0;y<x;y++)F=F.replace(/\)[+*?]?/,"");var U="";""===(L=F)&&t!==m&&(U="$"),n=C+G+L+U+I}""!==n&&c&&(n="(?=.)"+n);S&&(n=g+n);if(t===m)return[n,c];if(!c)return function(e){return e.replace(/\\(.)/g,"$1")}(e);var D=r.nocase?"i":"";try{var j=new RegExp("^"+n+"$",D)}catch(e){return new RegExp("$.")}return j._glob=e,j._src=n,j};var m={};p.makeRe=function(e,t){return new l(e,t||{}).makeRe()},l.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var e=this.set;if(!e.length)return this.regexp=!1,this.regexp;var t=this.options,r=t.noglobstar?"[^/]*?":t.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",o=t.nocase?"i":"",n=e.map((function(e){return e.map((function(e){return e===s?r:"string"==typeof e?function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}(e):e._src})).join("\\/")})).join("|");n="^(?:"+n+")$",this.negate&&(n="^(?!"+n+").*$");try{this.regexp=new RegExp(n,o)}catch(e){this.regexp=!1}return this.regexp},p.match=function(e,t,r){var o=new l(t,r=r||{});return e=e.filter((function(e){return o.match(e)})),o.options.nonull&&!e.length&&e.push(t),e},l.prototype.match=function(e,t){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return""===e;if("/"===e&&t)return!0;var r=this.options;"/"!==o.sep&&(e=e.split(o.sep).join("/"));e=e.split(c),this.debug(this.pattern,"split",e);var s,n,i=this.set;for(this.debug(this.pattern,"set",i),n=e.length-1;n>=0&&!(s=e[n]);n--);for(n=0;n<i.length;n++){var a=i[n],u=e;if(r.matchBase&&1===a.length&&(u=[s]),this.matchOne(u,a,t))return!!r.flipNegate||!this.negate}return!r.flipNegate&&this.negate},l.prototype.matchOne=function(e,t,r){var o=this.options;this.debug("matchOne",{this:this,file:e,pattern:t}),this.debug("matchOne",e.length,t.length);for(var n=0,i=0,a=e.length,c=t.length;n<a&&i<c;n++,i++){this.debug("matchOne loop");var u,p=t[i],l=e[n];if(this.debug(t,p,l),!1===p)return!1;if(p===s){this.debug("GLOBSTAR",[t,p,l]);var d=n,m=i+1;if(m===c){for(this.debug("** at the end");n<a;n++)if("."===e[n]||".."===e[n]||!o.dot&&"."===e[n].charAt(0))return!1;return!0}for(;d<a;){var h=e[d];if(this.debug("\nglobstar while",e,d,t,m,h),this.matchOne(e.slice(d),t.slice(m),r))return this.debug("globstar found match!",d,a,h),!0;if("."===h||".."===h||!o.dot&&"."===h.charAt(0)){this.debug("dot detected!",e,d,t,m);break}this.debug("globstar swallow a segment, and continue"),d++}return!(!r||(this.debug("\n>>> no match, partial?",e,d,t,m),d!==a))}if("string"==typeof p?(u=o.nocase?l.toLowerCase()===p.toLowerCase():l===p,this.debug("string match",p,l,u)):(u=l.match(p),this.debug("pattern match",p,l,u)),!u)return!1}if(n===a&&i===c)return!0;if(n===a)return r;if(i===c)return n===a-1&&""===e[n];throw new Error("wtf?")}},function(e,t,r){var o=r(40),s=r(41);e.exports=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var n=[],i=s("{","}",t);if(!i||/\$$/.test(i.pre))return[t];var c,u=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),l=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),g=u||l,E=i.body.indexOf(",")>=0;if(!g&&!E)return i.post.match(/,.*\}/)?(t=i.pre+"{"+i.body+a+i.post,e(t)):[t];if(g)c=i.body.split(/\.\./);else{if(1===(c=function e(t){if(!t)return[""];var r=[],o=s("{","}",t);if(!o)return t.split(",");var n=o.pre,i=o.body,a=o.post,c=n.split(",");c[c.length-1]+="{"+i+"}";var u=e(a);a.length&&(c[c.length-1]+=u.shift(),c.push.apply(c,u));return r.push.apply(r,c),r}(i.body)).length)if(1===(c=e(c[0],!1).map(d)).length)return(y=i.post.length?e(i.post,!1):[""]).map((function(e){return i.pre+c[0]+e}))}var w,T=i.pre,y=i.post.length?e(i.post,!1):[""];if(g){var b=p(c[0]),v=p(c[1]),_=Math.max(c[0].length,c[1].length),P=3==c.length?Math.abs(p(c[2])):1,O=h;v<b&&(P*=-1,O=f);var R=c.some(m);w=[];for(var S=b;O(S,v);S+=P){var A;if(l)"\\"===(A=String.fromCharCode(S))&&(A="");else if(A=String(S),R){var k=_-A.length;if(k>0){var C=new Array(k+1).join("0");A=S<0?"-"+C+A.slice(1):C+A}}w.push(A)}}else w=o(c,(function(t){return e(t,!1)}));for(var G=0;G<w.length;G++)for(var I=0;I<y.length;I++){var L=T+w[G]+y[I];(!r||g||L)&&n.push(L)}return n}(function(e){return e.split("\\\\").join(n).split("\\{").join(i).split("\\}").join(a).split("\\,").join(c).split("\\.").join(u)}(e),!0).map(l)};var n="\0SLASH"+Math.random()+"\0",i="\0OPEN"+Math.random()+"\0",a="\0CLOSE"+Math.random()+"\0",c="\0COMMA"+Math.random()+"\0",u="\0PERIOD"+Math.random()+"\0";function p(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function l(e){return e.split(n).join("\\").split(i).join("{").split(a).join("}").split(c).join(",").split(u).join(".")}function d(e){return"{"+e+"}"}function m(e){return/^-?0\d/.test(e)}function h(e,t){return e<=t}function f(e,t){return e>=t}},function(e,t){e.exports=function(e,t){for(var o=[],s=0;s<e.length;s++){var n=t(e[s],s);r(n)?o.push.apply(o,n):o.push(n)}return o};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,r){"use strict";function o(e,t,r){e instanceof RegExp&&(e=s(e,r)),t instanceof RegExp&&(t=s(t,r));var o=n(e,t,r);return o&&{start:o[0],end:o[1],pre:r.slice(0,o[0]),body:r.slice(o[0]+e.length,o[1]),post:r.slice(o[1]+t.length)}}function s(e,t){var r=t.match(e);return r?r[0]:null}function n(e,t,r){var o,s,n,i,a,c=r.indexOf(e),u=r.indexOf(t,c+1),p=c;if(c>=0&&u>0){for(o=[],n=r.length;p>=0&&!a;)p==c?(o.push(p),c=r.indexOf(e,p+1)):1==o.length?a=[o.pop(),u]:((s=o.pop())<n&&(n=s,i=u),u=r.indexOf(t,p+1)),p=c<u&&c>=0?c:u;o.length&&(a=[n,i])}return a}e.exports=o,o.range=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=r(7),s=r(0),n=r(17),i="win32"===process.platform;t.Path=class{constructor(e){if(this.segments=[],"string"==typeof e)if(o(e,"Parameter 'itemPath' must not be empty"),e=n.safeTrimTrailingSeparator(e),n.hasRoot(e)){let t=e,r=n.dirname(t);for(;r!==t;){const e=s.basename(t);this.segments.unshift(e),t=r,r=n.dirname(t)}this.segments.unshift(t)}else this.segments=e.split(s.sep);else{o(e.length>0,"Parameter 'itemPath' must not be an empty array");for(let t=0;t<e.length;t++){let r=e[t];o(r,"Parameter 'itemPath' must not contain any empty segments"),r=n.normalizeSeparators(e[t]),0===t&&n.hasRoot(r)?(r=n.safeTrimTrailingSeparator(r),o(r===n.dirname(r),"Parameter 'itemPath' root segment contains information for multiple segments"),this.segments.push(r)):(o(!r.includes(s.sep),"Parameter 'itemPath' contains unexpected path separators"),this.segments.push(r))}}}toString(){let e=this.segments[0],t=e.endsWith(s.sep)||i&&/^[A-Z]:$/i.test(e);for(let r=1;r<this.segments.length;r++)t?t=!1:e+=s.sep,e+=this.segments[r];return e}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.SearchState=class{constructor(e,t){this.path=e,this.level=t}}},function(e,t){var r;t=e.exports=l,r="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";var o=Number.MAX_SAFE_INTEGER||9007199254740991,s=t.re=[],n=t.src=[],i=t.tokens={},a=0;function c(e){i[e]=a++}c("NUMERICIDENTIFIER"),n[i.NUMERICIDENTIFIER]="0|[1-9]\\d*",c("NUMERICIDENTIFIERLOOSE"),n[i.NUMERICIDENTIFIERLOOSE]="[0-9]+",c("NONNUMERICIDENTIFIER"),n[i.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",c("MAINVERSION"),n[i.MAINVERSION]="("+n[i.NUMERICIDENTIFIER]+")\\.("+n[i.NUMERICIDENTIFIER]+")\\.("+n[i.NUMERICIDENTIFIER]+")",c("MAINVERSIONLOOSE"),n[i.MAINVERSIONLOOSE]="("+n[i.NUMERICIDENTIFIERLOOSE]+")\\.("+n[i.NUMERICIDENTIFIERLOOSE]+")\\.("+n[i.NUMERICIDENTIFIERLOOSE]+")",c("PRERELEASEIDENTIFIER"),n[i.PRERELEASEIDENTIFIER]="(?:"+n[i.NUMERICIDENTIFIER]+"|"+n[i.NONNUMERICIDENTIFIER]+")",c("PRERELEASEIDENTIFIERLOOSE"),n[i.PRERELEASEIDENTIFIERLOOSE]="(?:"+n[i.NUMERICIDENTIFIERLOOSE]+"|"+n[i.NONNUMERICIDENTIFIER]+")",c("PRERELEASE"),n[i.PRERELEASE]="(?:-("+n[i.PRERELEASEIDENTIFIER]+"(?:\\."+n[i.PRERELEASEIDENTIFIER]+")*))",c("PRERELEASELOOSE"),n[i.PRERELEASELOOSE]="(?:-?("+n[i.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+n[i.PRERELEASEIDENTIFIERLOOSE]+")*))",c("BUILDIDENTIFIER"),n[i.BUILDIDENTIFIER]="[0-9A-Za-z-]+",c("BUILD"),n[i.BUILD]="(?:\\+("+n[i.BUILDIDENTIFIER]+"(?:\\."+n[i.BUILDIDENTIFIER]+")*))",c("FULL"),c("FULLPLAIN"),n[i.FULLPLAIN]="v?"+n[i.MAINVERSION]+n[i.PRERELEASE]+"?"+n[i.BUILD]+"?",n[i.FULL]="^"+n[i.FULLPLAIN]+"$",c("LOOSEPLAIN"),n[i.LOOSEPLAIN]="[v=\\s]*"+n[i.MAINVERSIONLOOSE]+n[i.PRERELEASELOOSE]+"?"+n[i.BUILD]+"?",c("LOOSE"),n[i.LOOSE]="^"+n[i.LOOSEPLAIN]+"$",c("GTLT"),n[i.GTLT]="((?:<|>)?=?)",c("XRANGEIDENTIFIERLOOSE"),n[i.XRANGEIDENTIFIERLOOSE]=n[i.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",c("XRANGEIDENTIFIER"),n[i.XRANGEIDENTIFIER]=n[i.NUMERICIDENTIFIER]+"|x|X|\\*",c("XRANGEPLAIN"),n[i.XRANGEPLAIN]="[v=\\s]*("+n[i.XRANGEIDENTIFIER]+")(?:\\.("+n[i.XRANGEIDENTIFIER]+")(?:\\.("+n[i.XRANGEIDENTIFIER]+")(?:"+n[i.PRERELEASE]+")?"+n[i.BUILD]+"?)?)?",c("XRANGEPLAINLOOSE"),n[i.XRANGEPLAINLOOSE]="[v=\\s]*("+n[i.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+n[i.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+n[i.XRANGEIDENTIFIERLOOSE]+")(?:"+n[i.PRERELEASELOOSE]+")?"+n[i.BUILD]+"?)?)?",c("XRANGE"),n[i.XRANGE]="^"+n[i.GTLT]+"\\s*"+n[i.XRANGEPLAIN]+"$",c("XRANGELOOSE"),n[i.XRANGELOOSE]="^"+n[i.GTLT]+"\\s*"+n[i.XRANGEPLAINLOOSE]+"$",c("COERCE"),n[i.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",c("COERCERTL"),s[i.COERCERTL]=new RegExp(n[i.COERCE],"g"),c("LONETILDE"),n[i.LONETILDE]="(?:~>?)",c("TILDETRIM"),n[i.TILDETRIM]="(\\s*)"+n[i.LONETILDE]+"\\s+",s[i.TILDETRIM]=new RegExp(n[i.TILDETRIM],"g");c("TILDE"),n[i.TILDE]="^"+n[i.LONETILDE]+n[i.XRANGEPLAIN]+"$",c("TILDELOOSE"),n[i.TILDELOOSE]="^"+n[i.LONETILDE]+n[i.XRANGEPLAINLOOSE]+"$",c("LONECARET"),n[i.LONECARET]="(?:\\^)",c("CARETTRIM"),n[i.CARETTRIM]="(\\s*)"+n[i.LONECARET]+"\\s+",s[i.CARETTRIM]=new RegExp(n[i.CARETTRIM],"g");c("CARET"),n[i.CARET]="^"+n[i.LONECARET]+n[i.XRANGEPLAIN]+"$",c("CARETLOOSE"),n[i.CARETLOOSE]="^"+n[i.LONECARET]+n[i.XRANGEPLAINLOOSE]+"$",c("COMPARATORLOOSE"),n[i.COMPARATORLOOSE]="^"+n[i.GTLT]+"\\s*("+n[i.LOOSEPLAIN]+")$|^$",c("COMPARATOR"),n[i.COMPARATOR]="^"+n[i.GTLT]+"\\s*("+n[i.FULLPLAIN]+")$|^$",c("COMPARATORTRIM"),n[i.COMPARATORTRIM]="(\\s*)"+n[i.GTLT]+"\\s*("+n[i.LOOSEPLAIN]+"|"+n[i.XRANGEPLAIN]+")",s[i.COMPARATORTRIM]=new RegExp(n[i.COMPARATORTRIM],"g");c("HYPHENRANGE"),n[i.HYPHENRANGE]="^\\s*("+n[i.XRANGEPLAIN]+")\\s+-\\s+("+n[i.XRANGEPLAIN]+")\\s*$",c("HYPHENRANGELOOSE"),n[i.HYPHENRANGELOOSE]="^\\s*("+n[i.XRANGEPLAINLOOSE]+")\\s+-\\s+("+n[i.XRANGEPLAINLOOSE]+")\\s*$",c("STAR"),n[i.STAR]="(<|>)?=?\\s*\\*";for(var u=0;u<a;u++)r(u,n[u]),s[u]||(s[u]=new RegExp(n[u]));function p(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof l)return e;if("string"!=typeof e)return null;if(e.length>256)return null;if(!(t.loose?s[i.LOOSE]:s[i.FULL]).test(e))return null;try{return new l(e,t)}catch(e){return null}}function l(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof l){if(e.loose===t.loose)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof l))return new l(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;var n=e.trim().match(t.loose?s[i.LOOSE]:s[i.FULL]);if(!n)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>o||this.major<0)throw new TypeError("Invalid major version");if(this.minor>o||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>o||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<o)return t}return e})):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}t.parse=p,t.valid=function(e,t){var r=p(e,t);return r?r.version:null},t.clean=function(e,t){var r=p(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null},t.SemVer=l,l.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},l.prototype.toString=function(){return this.version},l.prototype.compare=function(e){return r("SemVer.compare",this.version,this.options,e),e instanceof l||(e=new l(e,this.options)),this.compareMain(e)||this.comparePre(e)},l.prototype.compareMain=function(e){return e instanceof l||(e=new l(e,this.options)),m(this.major,e.major)||m(this.minor,e.minor)||m(this.patch,e.patch)},l.prototype.comparePre=function(e){if(e instanceof l||(e=new l(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var o=this.prerelease[t],s=e.prerelease[t];if(r("prerelease compare",t,o,s),void 0===o&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===o)return-1;if(o!==s)return m(o,s)}while(++t)},l.prototype.compareBuild=function(e){e instanceof l||(e=new l(e,this.options));var t=0;do{var o=this.build[t],s=e.build[t];if(r("prerelease compare",t,o,s),void 0===o&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===o)return-1;if(o!==s)return m(o,s)}while(++t)},l.prototype.inc=function(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var r=this.prerelease.length;--r>=0;)"number"==typeof this.prerelease[r]&&(this.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function(e,t,r,o){"string"==typeof r&&(o=r,r=void 0);try{return new l(e,r).inc(t,o).version}catch(e){return null}},t.diff=function(e,t){if(E(e,t))return null;var r=p(e),o=p(t),s="";if(r.prerelease.length||o.prerelease.length){s="pre";var n="prerelease"}for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return s+i;return n},t.compareIdentifiers=m;var d=/^[0-9]+$/;function m(e,t){var r=d.test(e),o=d.test(t);return r&&o&&(e=+e,t=+t),e===t?0:r&&!o?-1:o&&!r?1:e<t?-1:1}function h(e,t,r){return new l(e,r).compare(new l(t,r))}function f(e,t,r){return h(e,t,r)>0}function g(e,t,r){return h(e,t,r)<0}function E(e,t,r){return 0===h(e,t,r)}function w(e,t,r){return 0!==h(e,t,r)}function T(e,t,r){return h(e,t,r)>=0}function y(e,t,r){return h(e,t,r)<=0}function b(e,t,r,o){switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return E(e,r,o);case"!=":return w(e,r,o);case">":return f(e,r,o);case">=":return T(e,r,o);case"<":return g(e,r,o);case"<=":return y(e,r,o);default:throw new TypeError("Invalid operator: "+t)}}function v(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof v){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof v))return new v(e,t);r("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===_?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}t.rcompareIdentifiers=function(e,t){return m(t,e)},t.major=function(e,t){return new l(e,t).major},t.minor=function(e,t){return new l(e,t).minor},t.patch=function(e,t){return new l(e,t).patch},t.compare=h,t.compareLoose=function(e,t){return h(e,t,!0)},t.compareBuild=function(e,t,r){var o=new l(e,r),s=new l(t,r);return o.compare(s)||o.compareBuild(s)},t.rcompare=function(e,t,r){return h(t,e,r)},t.sort=function(e,r){return e.sort((function(e,o){return t.compareBuild(e,o,r)}))},t.rsort=function(e,r){return e.sort((function(e,o){return t.compareBuild(o,e,r)}))},t.gt=f,t.lt=g,t.eq=E,t.neq=w,t.gte=T,t.lte=y,t.cmp=b,t.Comparator=v;var _={};function P(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof P)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new P(e.raw,t);if(e instanceof v)return new P(e.value,t);if(!(this instanceof P))return new P(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((function(e){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function O(e,t){for(var r=!0,o=e.slice(),s=o.pop();r&&o.length;)r=o.every((function(e){return s.intersects(e,t)})),s=o.pop();return r}function R(e){return!e||"x"===e.toLowerCase()||"*"===e}function S(e,t,r,o,s,n,i,a,c,u,p,l,d){return((t=R(r)?"":R(o)?">="+r+".0.0":R(s)?">="+r+"."+o+".0":">="+t)+" "+(a=R(c)?"":R(u)?"<"+(+c+1)+".0.0":R(p)?"<"+c+"."+(+u+1)+".0":l?"<="+c+"."+u+"."+p+"-"+l:"<="+a)).trim()}function A(e,t,o){for(var s=0;s<e.length;s++)if(!e[s].test(t))return!1;if(t.prerelease.length&&!o.includePrerelease){for(s=0;s<e.length;s++)if(r(e[s].semver),e[s].semver!==_&&e[s].semver.prerelease.length>0){var n=e[s].semver;if(n.major===t.major&&n.minor===t.minor&&n.patch===t.patch)return!0}return!1}return!0}function k(e,t,r){try{t=new P(t,r)}catch(e){return!1}return t.test(e)}function C(e,t,r,o){var s,n,i,a,c;switch(e=new l(e,o),t=new P(t,o),r){case">":s=f,n=y,i=g,a=">",c=">=";break;case"<":s=g,n=T,i=f,a="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(k(e,t,o))return!1;for(var u=0;u<t.set.length;++u){var p=t.set[u],d=null,m=null;if(p.forEach((function(e){e.semver===_&&(e=new v(">=0.0.0")),d=d||e,m=m||e,s(e.semver,d.semver,o)?d=e:i(e.semver,m.semver,o)&&(m=e)})),d.operator===a||d.operator===c)return!1;if((!m.operator||m.operator===a)&&n(e,m.semver))return!1;if(m.operator===c&&i(e,m.semver))return!1}return!0}v.prototype.parse=function(e){var t=this.options.loose?s[i.COMPARATORLOOSE]:s[i.COMPARATOR],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=void 0!==r[1]?r[1]:"","="===this.operator&&(this.operator=""),r[2]?this.semver=new l(r[2],this.options.loose):this.semver=_},v.prototype.toString=function(){return this.value},v.prototype.test=function(e){if(r("Comparator.test",e,this.options.loose),this.semver===_||e===_)return!0;if("string"==typeof e)try{e=new l(e,this.options)}catch(e){return!1}return b(e,this.operator,this.semver,this.options)},v.prototype.intersects=function(e,t){if(!(e instanceof v))throw new TypeError("a Comparator is required");var r;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return""===this.value||(r=new P(e.value,t),k(this.value,r,t));if(""===e.operator)return""===e.value||(r=new P(this.value,t),k(e.semver,r,t));var o=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),s=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),n=this.semver.version===e.semver.version,i=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),a=b(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=b(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return o||s||n&&i||a||c},t.Range=P,P.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(" ").trim()})).join("||").trim(),this.range},P.prototype.toString=function(){return this.range},P.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var o=t?s[i.HYPHENRANGELOOSE]:s[i.HYPHENRANGE];e=e.replace(o,S),r("hyphen replace",e),e=e.replace(s[i.COMPARATORTRIM],"$1$2$3"),r("comparator trim",e,s[i.COMPARATORTRIM]),e=(e=(e=e.replace(s[i.TILDETRIM],"$1~")).replace(s[i.CARETTRIM],"$1^")).split(/\s+/).join(" ");var n=t?s[i.COMPARATORLOOSE]:s[i.COMPARATOR],a=e.split(" ").map((function(e){return function(e,t){return r("comp",e,t),e=function(e,t){return e.trim().split(/\s+/).map((function(e){return function(e,t){r("caret",e,t);var o=t.loose?s[i.CARETLOOSE]:s[i.CARET];return e.replace(o,(function(t,o,s,n,i){var a;return r("caret",e,t,o,s,n,i),R(o)?a="":R(s)?a=">="+o+".0.0 <"+(+o+1)+".0.0":R(n)?a="0"===o?">="+o+"."+s+".0 <"+o+"."+(+s+1)+".0":">="+o+"."+s+".0 <"+(+o+1)+".0.0":i?(r("replaceCaret pr",i),a="0"===o?"0"===s?">="+o+"."+s+"."+n+"-"+i+" <"+o+"."+s+"."+(+n+1):">="+o+"."+s+"."+n+"-"+i+" <"+o+"."+(+s+1)+".0":">="+o+"."+s+"."+n+"-"+i+" <"+(+o+1)+".0.0"):(r("no pr"),a="0"===o?"0"===s?">="+o+"."+s+"."+n+" <"+o+"."+s+"."+(+n+1):">="+o+"."+s+"."+n+" <"+o+"."+(+s+1)+".0":">="+o+"."+s+"."+n+" <"+(+o+1)+".0.0"),r("caret return",a),a}))}(e,t)})).join(" ")}(e,t),r("caret",e),e=function(e,t){return e.trim().split(/\s+/).map((function(e){return function(e,t){var o=t.loose?s[i.TILDELOOSE]:s[i.TILDE];return e.replace(o,(function(t,o,s,n,i){var a;return r("tilde",e,t,o,s,n,i),R(o)?a="":R(s)?a=">="+o+".0.0 <"+(+o+1)+".0.0":R(n)?a=">="+o+"."+s+".0 <"+o+"."+(+s+1)+".0":i?(r("replaceTilde pr",i),a=">="+o+"."+s+"."+n+"-"+i+" <"+o+"."+(+s+1)+".0"):a=">="+o+"."+s+"."+n+" <"+o+"."+(+s+1)+".0",r("tilde return",a),a}))}(e,t)})).join(" ")}(e,t),r("tildes",e),e=function(e,t){return r("replaceXRanges",e,t),e.split(/\s+/).map((function(e){return function(e,t){e=e.trim();var o=t.loose?s[i.XRANGELOOSE]:s[i.XRANGE];return e.replace(o,(function(o,s,n,i,a,c){r("xRange",e,o,s,n,i,a,c);var u=R(n),p=u||R(i),l=p||R(a),d=l;return"="===s&&d&&(s=""),c=t.includePrerelease?"-0":"",u?o=">"===s||"<"===s?"<0.0.0-0":"*":s&&d?(p&&(i=0),a=0,">"===s?(s=">=",p?(n=+n+1,i=0,a=0):(i=+i+1,a=0)):"<="===s&&(s="<",p?n=+n+1:i=+i+1),o=s+n+"."+i+"."+a+c):p?o=">="+n+".0.0"+c+" <"+(+n+1)+".0.0"+c:l&&(o=">="+n+"."+i+".0"+c+" <"+n+"."+(+i+1)+".0"+c),r("xRange return",o),o}))}(e,t)})).join(" ")}(e,t),r("xrange",e),e=function(e,t){return r("replaceStars",e,t),e.trim().replace(s[i.STAR],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join(" ").split(/\s+/);return this.options.loose&&(a=a.filter((function(e){return!!e.match(n)}))),a=a.map((function(e){return new v(e,this.options)}),this)},P.prototype.intersects=function(e,t){if(!(e instanceof P))throw new TypeError("a Range is required");return this.set.some((function(r){return O(r,t)&&e.set.some((function(e){return O(e,t)&&r.every((function(r){return e.every((function(e){return r.intersects(e,t)}))}))}))}))},t.toComparators=function(e,t){return new P(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(" ").trim().split(" ")}))},P.prototype.test=function(e){if(!e)return!1;if("string"==typeof e)try{e=new l(e,this.options)}catch(e){return!1}for(var t=0;t<this.set.length;t++)if(A(this.set[t],e,this.options))return!0;return!1},t.satisfies=k,t.maxSatisfying=function(e,t,r){var o=null,s=null;try{var n=new P(t,r)}catch(e){return null}return e.forEach((function(e){n.test(e)&&(o&&-1!==s.compare(e)||(s=new l(o=e,r)))})),o},t.minSatisfying=function(e,t,r){var o=null,s=null;try{var n=new P(t,r)}catch(e){return null}return e.forEach((function(e){n.test(e)&&(o&&1!==s.compare(e)||(s=new l(o=e,r)))})),o},t.minVersion=function(e,t){e=new P(e,t);var r=new l("0.0.0");if(e.test(r))return r;if(r=new l("0.0.0-0"),e.test(r))return r;r=null;for(var o=0;o<e.set.length;++o){e.set[o].forEach((function(e){var t=new l(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!f(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}}))}if(r&&e.test(r))return r;return null},t.validRange=function(e,t){try{return new P(e,t).range||"*"}catch(e){return null}},t.ltr=function(e,t,r){return C(e,t,"<",r)},t.gtr=function(e,t,r){return C(e,t,">",r)},t.outside=C,t.prerelease=function(e,t){var r=p(e,t);return r&&r.prerelease.length?r.prerelease:null},t.intersects=function(e,t,r){return e=new P(e,r),t=new P(t,r),e.intersects(t)},t.coerce=function(e,t){if(e instanceof l)return e;"number"==typeof e&&(e=String(e));if("string"!=typeof e)return null;var r=null;if((t=t||{}).rtl){for(var o;(o=s[i.COERCERTL].exec(e))&&(!r||r.index+r[0].length!==e.length);)r&&o.index+o[0].length===r.index+r[0].length||(r=o),s[i.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;s[i.COERCERTL].lastIndex=-1}else r=e.match(s[i.COERCE]);if(null===r)return null;return p(r[2]+"."+(r[3]||"0")+"."+(r[4]||"0"),t)}},function(e,t,r){var o=r(46),s=r(47),n=s;n.v1=o,n.v4=s,e.exports=n},function(e,t,r){var o,s,n=r(23),i=r(24),a=0,c=0;e.exports=function(e,t,r){var u=t&&r||0,p=t||[],l=(e=e||{}).node||o,d=void 0!==e.clockseq?e.clockseq:s;if(null==l||null==d){var m=n();null==l&&(l=o=[1|m[0],m[1],m[2],m[3],m[4],m[5]]),null==d&&(d=s=16383&(m[6]<<8|m[7]))}var h=void 0!==e.msecs?e.msecs:(new Date).getTime(),f=void 0!==e.nsecs?e.nsecs:c+1,g=h-a+(f-c)/1e4;if(g<0&&void 0===e.clockseq&&(d=d+1&16383),(g<0||h>a)&&void 0===e.nsecs&&(f=0),f>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");a=h,c=f,s=d;var E=(1e4*(268435455&(h+=122192928e5))+f)%4294967296;p[u++]=E>>>24&255,p[u++]=E>>>16&255,p[u++]=E>>>8&255,p[u++]=255&E;var w=h/4294967296*1e4&268435455;p[u++]=w>>>8&255,p[u++]=255&w,p[u++]=w>>>24&15|16,p[u++]=w>>>16&255,p[u++]=d>>>8|128,p[u++]=255&d;for(var T=0;T<6;++T)p[u+T]=l[T];return t||i(p)}},function(e,t,r){var o=r(23),s=r(24);e.exports=function(e,t,r){var n=t&&r||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var i=(e=e||{}).random||(e.rng||o)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t)for(var a=0;a<16;++a)t[n+a]=i[a];return t||s(i)}},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=s(r(5)),i=r(25),a=r(54),c=s(r(12)),u=s(r(2)),p=s(r(1)),l=s(r(9)),d=s(r(14)),m=r(19);function h(e){return!!e&&(e>=200&&e<300)}function f(e){return!e||e>=500}function g(e){if(!e)return!1;return[i.HttpCodes.BadGateway,i.HttpCodes.ServiceUnavailable,i.HttpCodes.GatewayTimeout].includes(e)}function E(e){const t=(process.env.ACTIONS_CACHE_URL||process.env.ACTIONS_RUNTIME_URL||"").replace("pipelines","artifactcache");if(!t)throw new Error("Cache Service Url not found, unable to restore cache.");const r=`${t}_apis/artifactcache/${e}`;return n.debug("Resource Url: "+r),r}function w(){const e=process.env.ACTIONS_RUNTIME_TOKEN||"",t=new a.BearerCredentialHandler(e);return new i.HttpClient("actions/cache",[t],{headers:{Accept:(r="application/json",o="6.0-preview.1",`${r};api-version=${o}`)}});var r,o}function T(e,t){const r=e.concat(t&&t!==m.CompressionMethod.Gzip?[t]:[]);return r.push("1.0"),c.createHash("sha256").update(r.join("|")).digest("hex")}function y(e,t,r,s=2){return o(this,void 0,void 0,(function*(){let o=void 0,i=void 0,a=!1,c="",u=1;for(;u<=s;){try{if(o=yield t(),i=r(o),!f(i))return o;a=g(i),c="Cache service responded with "+i}catch(e){a=!0,c=e.message}if(n.debug(`${e} - Attempt ${u} of ${s} failed with error: ${c}`),!a){n.debug(e+" - Error is not retryable");break}u++}throw Error(`${e} failed: ${c}`)}))}function b(e,t,r=2){return o(this,void 0,void 0,(function*(){return yield y(e,t,e=>e.statusCode,r)}))}function v(e,t,r=2){return o(this,void 0,void 0,(function*(){return yield y(e,t,e=>e.message.statusCode,r)}))}function _(e,t){return`bytes ${e}-${t}/*`}function P(e,t,r,s,i){return o(this,void 0,void 0,(function*(){n.debug(`Uploading chunk of size ${i-s+1} bytes at offset ${s} with content range: ${_(s,i)}`);const a={"Content-Type":"application/octet-stream","Content-Range":_(s,i)};yield v(`uploadChunk (start: ${s}, end: ${i})`,()=>o(this,void 0,void 0,(function*(){return e.sendStream("PATCH",t,r(),a)})))}))}t.getCacheVersion=T,t.retry=y,t.retryTypedResponse=b,t.retryHttpClientResponse=v,t.getCacheEntry=function(e,t,r){return o(this,void 0,void 0,(function*(){const s=w(),i=T(t,null==r?void 0:r.compressionMethod),a=`cache?keys=${encodeURIComponent(e.join(","))}&version=${i}`,c=yield b("getCacheEntry",()=>o(this,void 0,void 0,(function*(){return s.getJson(E(a))})));if(204===c.statusCode)return null;if(!h(c.statusCode))throw new Error("Cache service responded with "+c.statusCode);const u=c.result,p=null==u?void 0:u.archiveLocation;if(!p)throw new Error("Cache not found.");return n.setSecret(p),n.debug("Cache Result:"),n.debug(JSON.stringify(u)),u}))},t.downloadCache=function(e,t){return o(this,void 0,void 0,(function*(){const r=u.createWriteStream(t),s=new i.HttpClient("actions/cache"),a=yield v("downloadCache",()=>o(this,void 0,void 0,(function*(){return s.get(e)})));a.message.socket.setTimeout(m.SocketTimeout,()=>{a.message.destroy(),n.debug(`Aborting download, socket timed out after ${m.SocketTimeout} ms`)}),yield function(e,t){return o(this,void 0,void 0,(function*(){const r=l.promisify(p.pipeline);yield r(e.message,t)}))}(a,r);const c=a.message.headers["content-length"];if(c){const e=parseInt(c),r=d.getArchiveFileSizeIsBytes(t);if(r!==e)throw new Error(`Incomplete download. Expected file size: ${e}, actual file size: ${r}`)}else n.debug("Unable to validate download, no Content-Length header")}))},t.reserveCache=function(e,t,r){var s,n;return o(this,void 0,void 0,(function*(){const i=w(),a=T(t,null==r?void 0:r.compressionMethod),c={key:e,version:a},u=yield b("reserveCache",()=>o(this,void 0,void 0,(function*(){return i.postJson(E("caches"),c)})));return null!==(n=null===(s=null==u?void 0:u.result)||void 0===s?void 0:s.cacheId)&&void 0!==n?n:-1}))},t.saveCache=function(e,t,r){return o(this,void 0,void 0,(function*(){const s=w();n.debug("Upload cache"),yield function(e,t,r,s){var i,a;return o(this,void 0,void 0,(function*(){const c=u.statSync(r).size,p=E("caches/"+t.toString()),l=u.openSync(r,"r"),d=null!==(i=null==s?void 0:s.uploadConcurrency)&&void 0!==i?i:4,m=null!==(a=null==s?void 0:s.uploadChunkSize)&&void 0!==a?a:33554432;n.debug(`Concurrency: ${d} and Chunk Size: ${m}`);const h=[...new Array(d).keys()];n.debug("Awaiting all uploads");let f=0;try{yield Promise.all(h.map(()=>o(this,void 0,void 0,(function*(){for(;f<c;){const t=Math.min(c-f,m),o=f,s=f+t-1;f+=m,yield P(e,p,()=>u.createReadStream(r,{fd:l,start:o,end:s,autoClose:!1}).on("error",e=>{throw new Error("Cache upload failed because file read failed with "+e.Message)}),o,s)}}))))}finally{u.closeSync(l)}}))}(s,e,t,r),n.debug("Commiting cache");const i=d.getArchiveFileSizeIsBytes(t),a=yield function(e,t,r){return o(this,void 0,void 0,(function*(){const s={size:r};return yield b("commitCache",()=>o(this,void 0,void 0,(function*(){return e.postJson(E("caches/"+t.toString()),s)})))}))}(s,e,i);if(!h(a.statusCode))throw new Error(`Cache service responded with ${a.statusCode} during commit cache.`);n.info("Cache saved successfully")}))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=r(6);function s(e){if(!e.hostname)return!1;let t,r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;e.port?t=Number(e.port):"http:"===e.protocol?t=80:"https:"===e.protocol&&(t=443);let o=[e.hostname.toUpperCase()];"number"==typeof t&&o.push(`${o[0]}:${t}`);for(let e of r.split(",").map(e=>e.trim().toUpperCase()).filter(e=>e))if(o.some(t=>t===e))return!0;return!1}t.getProxyUrl=function(e){let t,r,n="https:"===e.protocol;return s(e)||(r=n?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY,r&&(t=o.parse(r))),t},t.checkBypass=s},function(e,t,r){e.exports=r(51)},function(e,t,r){"use strict";r(52);var o,s=r(53),n=r(8),i=r(10),a=r(21),c=(r(7),r(9));function u(e){var t=this;t.options=e||{},t.proxyOptions=t.options.proxy||{},t.maxSockets=t.options.maxSockets||n.Agent.defaultMaxSockets,t.requests=[],t.sockets=[],t.on("free",(function(e,r,o,s){for(var n=l(r,o,s),i=0,a=t.requests.length;i<a;++i){var c=t.requests[i];if(c.host===n.host&&c.port===n.port)return t.requests.splice(i,1),void c.request.onSocket(e)}e.destroy(),t.removeSocket(e)}))}function p(e,t){var r=this;u.prototype.createSocket.call(r,e,(function(o){var n=e.request.getHeader("host"),i=d({},r.options,{socket:o,servername:n?n.replace(/:.*$/,""):e.host}),a=s.connect(0,i);r.sockets[r.sockets.indexOf(o)]=a,t(a)}))}function l(e,t,r){return"string"==typeof e?{host:e,port:t,localAddress:r}:e}function d(e){for(var t=1,r=arguments.length;t<r;++t){var o=arguments[t];if("object"==typeof o)for(var s=Object.keys(o),n=0,i=s.length;n<i;++n){var a=s[n];void 0!==o[a]&&(e[a]=o[a])}}return e}t.httpOverHttp=function(e){var t=new u(e);return t.request=n.request,t},t.httpsOverHttp=function(e){var t=new u(e);return t.request=n.request,t.createSocket=p,t.defaultPort=443,t},t.httpOverHttps=function(e){var t=new u(e);return t.request=i.request,t},t.httpsOverHttps=function(e){var t=new u(e);return t.request=i.request,t.createSocket=p,t.defaultPort=443,t},c.inherits(u,a.EventEmitter),u.prototype.addRequest=function(e,t,r,o){var s=this,n=d({request:e},s.options,l(t,r,o));s.sockets.length>=this.maxSockets?s.requests.push(n):s.createSocket(n,(function(t){function r(){s.emit("free",t,n)}function o(e){s.removeSocket(t),t.removeListener("free",r),t.removeListener("close",o),t.removeListener("agentRemove",o)}t.on("free",r),t.on("close",o),t.on("agentRemove",o),e.onSocket(t)}))},u.prototype.createSocket=function(e,t){var r=this,s={};r.sockets.push(s);var n=d({},r.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),o("making CONNECT request");var i=r.request(n);function a(n,a,c){var u;return i.removeAllListeners(),a.removeAllListeners(),200!==n.statusCode?(o("tunneling socket could not be established, statusCode=%d",n.statusCode),a.destroy(),(u=new Error("tunneling socket could not be established, statusCode="+n.statusCode)).code="ECONNRESET",e.request.emit("error",u),void r.removeSocket(s)):c.length>0?(o("got illegal response body from proxy"),a.destroy(),(u=new Error("got illegal response body from proxy")).code="ECONNRESET",e.request.emit("error",u),void r.removeSocket(s)):(o("tunneling connection has established"),r.sockets[r.sockets.indexOf(s)]=a,t(a))}i.useChunkedEncodingByDefault=!1,i.once("response",(function(e){e.upgrade=!0})),i.once("upgrade",(function(e,t,r){process.nextTick((function(){a(e,t,r)}))})),i.once("connect",a),i.once("error",(function(t){i.removeAllListeners(),o("tunneling socket could not be established, cause=%s\n",t.message,t.stack);var n=new Error("tunneling socket could not be established, cause="+t.message);n.code="ECONNRESET",e.request.emit("error",n),r.removeSocket(s)})),i.end()},u.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(-1!==t){this.sockets.splice(t,1);var r=this.requests.shift();r&&this.createSocket(r,(function(e){r.request.onSocket(e)}))}},o=process.env.NODE_DEBUG&&/\btunnel\b/.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments);"string"==typeof e[0]?e[0]="TUNNEL: "+e[0]:e.unshift("TUNNEL:"),console.error.apply(console,e)}:function(){},t.debug=o},function(e,t){e.exports=require("net")},function(e,t){e.exports=require("tls")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.BasicCredentialHandler=class{constructor(e,t){this.username=e,this.password=t}prepareRequest(e){e.headers.Authorization="Basic "+Buffer.from(this.username+":"+this.password).toString("base64")}canHandleAuthentication(e){return!1}handleAuthentication(e,t,r){return null}};t.BearerCredentialHandler=class{constructor(e){this.token=e}prepareRequest(e){e.headers.Authorization="Bearer "+this.token}canHandleAuthentication(e){return!1}handleAuthentication(e,t,r){return null}};t.PersonalAccessTokenCredentialHandler=class{constructor(e){this.token=e}prepareRequest(e){e.headers.Authorization="Basic "+Buffer.from("PAT:"+this.token).toString("base64")}canHandleAuthentication(e){return!1}handleAuthentication(e,t,r){return null}}},function(e,t,r){"use strict";var o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(s,n){function i(e){try{c(o.next(e))}catch(e){n(e)}}function a(e){try{c(o.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}))},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=r(15),i=s(r(16)),a=r(2),c=s(r(0)),u=s(r(14)),p=r(19);function l(e,t,r){return o(this,void 0,void 0,(function*(){try{yield n.exec(`"${yield function(e,t){return o(this,void 0,void 0,(function*(){if("win32"===process.platform){const r=process.env.windir+"\\System32\\tar.exe";if(t!==p.CompressionMethod.Gzip)e.push("--force-local");else{if(a.existsSync(r))return r;(yield u.isGnuTarInstalled())&&e.push("--force-local")}}return yield i.which("tar",!0)}))}(e,t)}"`,e,{cwd:r})}catch(e){throw new Error("Tar failed with error: "+(null==e?void 0:e.message))}}))}function d(){var e;return null!==(e=process.env.GITHUB_WORKSPACE)&&void 0!==e?e:process.cwd()}t.extractTar=function(e,t){return o(this,void 0,void 0,(function*(){const r=d();yield i.mkdirP(r);const o=[...function(){switch(t){case p.CompressionMethod.Zstd:return["--use-compress-program","zstd -d --long=30"];case p.CompressionMethod.ZstdWithoutLong:return["--use-compress-program","zstd -d"];default:return["-z"]}}(),"-xf",e.replace(new RegExp("\\"+c.sep,"g"),"/"),"-P","-C",r.replace(new RegExp("\\"+c.sep,"g"),"/")];yield l(o,t)}))},t.createTar=function(e,t,r){return o(this,void 0,void 0,(function*(){const o=u.getCacheFileName(r);a.writeFileSync(c.join(e,"manifest.txt"),t.join("\n"));const s=d();const n=[...function(){switch(r){case p.CompressionMethod.Zstd:return["--use-compress-program","zstd -T0 --long=30"];case p.CompressionMethod.ZstdWithoutLong:return["--use-compress-program","zstd -T0"];default:return["-z"]}}(),"-cf",o.replace(new RegExp("\\"+c.sep,"g"),"/"),"-P","-C",s.replace(new RegExp("\\"+c.sep,"g"),"/"),"--files-from","manifest.txt"];yield l(n,r,e)}))}},function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&o(t,e,r);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.getOctokit=t.context=void 0;const i=n(r(26)),a=r(57);t.context=new i.Context,t.getOctokit=function(e,t){return new a.GitHub(a.getOctokitOptions(e,t))}},function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&o(t,e,r);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.getOctokitOptions=t.GitHub=t.context=void 0;const i=n(r(26)),a=n(r(58)),c=r(65),u=r(63),p=r(64);t.context=new i.Context;const l=a.getApiBaseUrl(),d={baseUrl:l,request:{agent:a.getProxyAgent(l)}};t.GitHub=c.Octokit.plugin(u.restEndpointMethods,p.paginateRest).defaults(d),t.getOctokitOptions=function(e,t){const r=Object.assign({},t||{}),o=a.getAuthString(e,r);return o&&(r.auth=o),r}},function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&o(t,e,r);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.getApiBaseUrl=t.getProxyAgent=t.getAuthString=void 0;const i=n(r(25));t.getAuthString=function(e,t){if(!e&&!t.auth)throw new Error("Parameter token or opts.auth is required");if(e&&t.auth)throw new Error("Parameters token and opts.auth may not both be specified");return"string"==typeof t.auth?t.auth:"token "+e},t.getProxyAgent=function(e){return(new i.HttpClient).getAgent(e)},t.getApiBaseUrl=function(){return process.env.GITHUB_API_URL||"https://api.github.com"}},function(e,t){e.exports=function e(t,r,o,s){if("function"!=typeof o)throw new Error("method for before hook must be a function");s||(s={});if(Array.isArray(r))return r.reverse().reduce((function(r,o){return e.bind(null,t,o,r,s)}),o)();return Promise.resolve().then((function(){return t.registry[r]?t.registry[r].reduce((function(e,t){return t.hook.bind(null,e,s)}),o)():o(s)}))}},function(e,t){e.exports=function(e,t,r,o){var s=o;e.registry[r]||(e.registry[r]=[]);"before"===t&&(o=function(e,t){return Promise.resolve().then(s.bind(null,t)).then(e.bind(null,t))});"after"===t&&(o=function(e,t){var r;return Promise.resolve().then(e.bind(null,t)).then((function(e){return s(r=e,t)})).then((function(){return r}))});"error"===t&&(o=function(e,t){return Promise.resolve().then(e.bind(null,t)).catch((function(e){return s(e,t)}))});e.registry[r].push({hook:o,orig:s})}},function(e,t){e.exports=function(e,t,r){if(!e.registry[t])return;var o=e.registry[t].map((function(e){return e.orig})).indexOf(r);if(-1===o)return;e.registry[t].splice(o,1)}},function(e,t){e.exports=function e(t,r){if(t&&r)return e(t)(r);if("function"!=typeof t)throw new TypeError("need wrapper function");return Object.keys(t).forEach((function(e){o[e]=t[e]})),o;function o(){for(var e=new Array(arguments.length),r=0;r<e.length;r++)e[r]=arguments[r];var o=t.apply(this,e),s=e[e.length-1];return"function"==typeof o&&o!==s&&Object.keys(s).forEach((function(e){o[e]=s[e]})),o}}},function(e,t,r){"use strict";r.r(t),r.d(t,"restEndpointMethods",(function(){return n}));const o={actions:{addSelectedRepoToOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],cancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],createOrUpdateOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{},{renamedParameters:{name:"secret_name"}}],createOrUpdateSecretForRepo:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{},{renamed:["actions","createOrUpdateRepoSecret"],renamedParameters:{name:"secret_name"}}],createRegistrationToken:["POST /repos/{owner}/{repo}/actions/runners/registration-token",{},{renamed:["actions","createRegistrationTokenForRepo"]}],createRegistrationTokenForOrg:["POST /orgs/{org}/actions/runners/registration-token"],createRegistrationTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/registration-token"],createRemoveToken:["POST /repos/{owner}/{repo}/actions/runners/remove-token",{},{renamed:["actions","createRemoveTokenForRepo"]}],createRemoveTokenForOrg:["POST /orgs/{org}/actions/runners/remove-token"],createRemoveTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/remove-token"],deleteArtifact:["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],deleteOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}",{},{renamedParameters:{name:"secret_name"}}],deleteSecretFromRepo:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}",{},{renamed:["actions","deleteRepoSecret"],renamedParameters:{name:"secret_name"}}],deleteSelfHostedRunnerFromOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}"],deleteSelfHostedRunnerFromRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],deleteWorkflowRunLogs:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],downloadArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],downloadJobLogsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],downloadWorkflowJobLogs:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs",{},{renamed:["actions","downloadJobLogsForWorkflowRun"]}],downloadWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],getArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],getJobForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],getOrgPublicKey:["GET /orgs/{org}/actions/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}"],getPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key",{},{renamed:["actions","getRepoPublicKey"]}],getRepoPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}",{},{renamedParameters:{name:"secret_name"}}],getSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}",{},{renamed:["actions","getRepoSecret"],renamedParameters:{name:"secret_name"}}],getSelfHostedRunner:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}",{},{renamed:["actions","getSelfHostedRunnerForRepo"]}],getSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}"],getSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],getWorkflow:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],getWorkflowJob:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}",{},{renamed:["actions","getJobForWorkflowRun"]}],getWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],getWorkflowRunUsage:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],getWorkflowUsage:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],listArtifactsForRepo:["GET /repos/{owner}/{repo}/actions/artifacts"],listDownloadsForSelfHostedRunnerApplication:["GET /repos/{owner}/{repo}/actions/runners/downloads",{},{renamed:["actions","listRunnerApplicationsForRepo"]}],listJobsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],listOrgSecrets:["GET /orgs/{org}/actions/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/actions/secrets"],listRepoWorkflowRuns:["GET /repos/{owner}/{repo}/actions/runs",{},{renamed:["actions","listWorkflowRunsForRepo"]}],listRepoWorkflows:["GET /repos/{owner}/{repo}/actions/workflows"],listRunnerApplicationsForOrg:["GET /orgs/{org}/actions/runners/downloads"],listRunnerApplicationsForRepo:["GET /repos/{owner}/{repo}/actions/runners/downloads"],listSecretsForRepo:["GET /repos/{owner}/{repo}/actions/secrets",{},{renamed:["actions","listRepoSecrets"]}],listSelectedReposForOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],listSelfHostedRunnersForOrg:["GET /orgs/{org}/actions/runners"],listSelfHostedRunnersForRepo:["GET /repos/{owner}/{repo}/actions/runners"],listWorkflowJobLogs:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs",{},{renamed:["actions","downloadWorkflowJobLogs"]}],listWorkflowRunArtifacts:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],listWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs",{},{renamed:["actions","downloadWorkflowRunLogs"]}],listWorkflowRuns:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],listWorkflowRunsForRepo:["GET /repos/{owner}/{repo}/actions/runs"],reRunWorkflow:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],removeSelfHostedRunner:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}",{},{renamed:["actions","deleteSelfHostedRunnerFromRepo"]}],setSelectedReposForOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"]},activity:{checkRepoIsStarredByAuthenticatedUser:["GET /user/starred/{owner}/{repo}"],checkStarringRepo:["GET /user/starred/{owner}/{repo}",{},{renamed:["activity","checkRepoIsStarredByAuthenticatedUser"]}],deleteRepoSubscription:["DELETE /repos/{owner}/{repo}/subscription"],deleteThreadSubscription:["DELETE /notifications/threads/{thread_id}/subscription"],getFeeds:["GET /feeds"],getRepoSubscription:["GET /repos/{owner}/{repo}/subscription"],getThread:["GET /notifications/threads/{thread_id}"],getThreadSubscription:["PUT /notifications",{},{renamed:["activity","getThreadSubscriptionForAuthenticatedUser"]}],getThreadSubscriptionForAuthenticatedUser:["GET /notifications/threads/{thread_id}/subscription"],listEventsForAuthenticatedUser:["GET /users/{username}/events"],listEventsForOrg:["GET /users/{username}/events/orgs/{org}",{},{renamed:["activity","listOrgEventsForAuthenticatedUser"]}],listEventsForUser:["GET /users/{username}/events",{},{renamed:["activity","listEventsForAuthenticatedUser"]}],listFeeds:["GET /feeds",{},{renamed:["activity","getFeeds"]}],listNotifications:["GET /notifications",{},{renamed:["activity","listNotificationsForAuthenticatedUser"]}],listNotificationsForAuthenticatedUser:["GET /notifications"],listNotificationsForRepo:["GET /repos/{owner}/{repo}/notifications",{},{renamed:["activity","listRepoNotificationsForAuthenticatedUser"]}],listOrgEventsForAuthenticatedUser:["GET /users/{username}/events/orgs/{org}"],listPublicEvents:["GET /events"],listPublicEventsForOrg:["GET /orgs/{org}/events",{},{renamed:["activity","listPublicOrgEvents"]}],listPublicEventsForRepoNetwork:["GET /networks/{owner}/{repo}/events"],listPublicEventsForUser:["GET /users/{username}/events/public"],listPublicOrgEvents:["GET /orgs/{org}/events"],listReceivedEventsForUser:["GET /users/{username}/received_events"],listReceivedPublicEventsForUser:["GET /users/{username}/received_events/public"],listRepoEvents:["GET /repos/{owner}/{repo}/events"],listRepoNotificationsForAuthenticatedUser:["GET /repos/{owner}/{repo}/notifications"],listReposStarredByAuthenticatedUser:["GET /user/starred"],listReposStarredByUser:["GET /users/{username}/starred"],listReposWatchedByUser:["GET /users/{username}/subscriptions"],listStargazersForRepo:["GET /repos/{owner}/{repo}/stargazers"],listWatchedReposForAuthenticatedUser:["GET /user/subscriptions"],listWatchersForRepo:["GET /repos/{owner}/{repo}/subscribers"],markAsRead:["PUT /notifications",{},{renamed:["activity","markNotificationsAsRead"]}],markNotificationsAsRead:["PUT /notifications"],markNotificationsAsReadForRepo:["PUT /repos/{owner}/{repo}/notifications",{},{renamed:["activity","markRepoNotificationsAsRead"]}],markRepoNotificationsAsRead:["PUT /repos/{owner}/{repo}/notifications"],markThreadAsRead:["PATCH /notifications/threads/{thread_id}"],setRepoSubscription:["PUT /repos/{owner}/{repo}/subscription"],setThreadSubscription:["PUT /notifications/threads/{thread_id}/subscription"],starRepo:["PUT /user/starred/{owner}/{repo}",{},{renamed:["activity","starRepoForAuthenticatedUser"]}],starRepoForAuthenticatedUser:["PUT /user/starred/{owner}/{repo}"],unstarRepo:["DELETE /user/starred/{owner}/{repo}",{},{renamed:["activity","unstarRepoForAuthenticatedUser"]}],unstarRepoForAuthenticatedUser:["DELETE /user/starred/{owner}/{repo}"]},apps:{addRepoToInstallation:["PUT /user/installations/{installation_id}/repositories/{repository_id}",{mediaType:{previews:["machine-man"]}}],checkAccountIsAssociatedWithAny:["GET /marketplace_listing/accounts/{account_id}",{},{renamed:["apps","getSubscriptionPlanForAccount"]}],checkAccountIsAssociatedWithAnyStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}",{},{renamed:["apps","getSubscriptionPlanForAccountStubbed"]}],checkToken:["POST /applications/{client_id}/token"],createContentAttachment:["POST /content_references/{content_reference_id}/attachments",{mediaType:{previews:["corsair"]}}],createFromManifest:["POST /app-manifests/{code}/conversions"],createInstallationAccessToken:["POST /app/installations/{installation_id}/access_tokens",{mediaType:{previews:["machine-man"]}}],createInstallationToken:["POST /app/installations/{installation_id}/access_tokens",{mediaType:{previews:["machine-man"]}},{renamed:["apps","createInstallationAccessToken"]}],deleteAuthorization:["DELETE /applications/{client_id}/grant"],deleteInstallation:["DELETE /app/installations/{installation_id}",{mediaType:{previews:["machine-man"]}}],deleteToken:["DELETE /applications/{client_id}/token"],getAuthenticated:["GET /app",{mediaType:{previews:["machine-man"]}}],getBySlug:["GET /apps/{app_slug}",{mediaType:{previews:["machine-man"]}}],getInstallation:["GET /app/installations/{installation_id}",{mediaType:{previews:["machine-man"]}}],getOrgInstallation:["GET /orgs/{org}/installation",{mediaType:{previews:["machine-man"]}}],getRepoInstallation:["GET /repos/{owner}/{repo}/installation",{mediaType:{previews:["machine-man"]}}],getSubscriptionPlanForAccount:["GET /marketplace_listing/accounts/{account_id}"],getSubscriptionPlanForAccountStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}"],getUserInstallation:["GET /users/{username}/installation",{mediaType:{previews:["machine-man"]}}],listAccountsForPlan:["GET /marketplace_listing/plans/{plan_id}/accounts"],listAccountsForPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],listAccountsUserOrOrgOnPlan:["GET /marketplace_listing/plans/{plan_id}/accounts",{},{renamed:["apps","listAccountsForPlan"]}],listAccountsUserOrOrgOnPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts",{},{renamed:["apps","listAccountsForPlanStubbed"]}],listInstallationReposForAuthenticatedUser:["GET /user/installations/{installation_id}/repositories",{mediaType:{previews:["machine-man"]}}],listInstallations:["GET /app/installations",{mediaType:{previews:["machine-man"]}}],listInstallationsForAuthenticatedUser:["GET /user/installations",{mediaType:{previews:["machine-man"]}}],listMarketplacePurchasesForAuthenticatedUser:["GET /user/marketplace_purchases",{},{renamed:["apps","listSubscriptionsForAuthenticatedUser"]}],listMarketplacePurchasesForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed",{},{renamed:["apps","listSubscriptionsForAuthenticatedUserStubbed"]}],listPlans:["GET /marketplace_listing/plans"],listPlansStubbed:["GET /marketplace_listing/stubbed/plans"],listRepos:["GET /installation/repositories",{mediaType:{previews:["machine-man"]}},{renamed:["apps","listReposAccessibleToInstallation"]}],listReposAccessibleToInstallation:["GET /installation/repositories",{mediaType:{previews:["machine-man"]}}],listSubscriptionsForAuthenticatedUser:["GET /user/marketplace_purchases"],listSubscriptionsForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed"],removeRepoFromInstallation:["DELETE /user/installations/{installation_id}/repositories/{repository_id}",{mediaType:{previews:["machine-man"]}}],resetToken:["PATCH /applications/{client_id}/token"],revokeInstallationAccessToken:["DELETE /installation/token"],revokeInstallationToken:["DELETE /installation/token",{},{renamed:["apps","revokeInstallationAccessToken"]}],suspendInstallation:["PUT /app/installations/{installation_id}/suspended"],unsuspendInstallation:["DELETE /app/installations/{installation_id}/suspended"]},checks:{create:["POST /repos/{owner}/{repo}/check-runs",{mediaType:{previews:["antiope"]}}],createSuite:["POST /repos/{owner}/{repo}/check-suites",{mediaType:{previews:["antiope"]}}],get:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}",{mediaType:{previews:["antiope"]}}],getSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}",{mediaType:{previews:["antiope"]}}],listAnnotations:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations",{mediaType:{previews:["antiope"]}}],listForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-runs",{mediaType:{previews:["antiope"]}}],listForSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs",{mediaType:{previews:["antiope"]}}],listSuitesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-suites",{mediaType:{previews:["antiope"]}}],rerequestSuite:["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest",{mediaType:{previews:["antiope"]}}],setSuitesPreferences:["PATCH /repos/{owner}/{repo}/check-suites/preferences",{mediaType:{previews:["antiope"]}}],update:["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}",{mediaType:{previews:["antiope"]}}]},codeScanning:{getAlert:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_id}"],listAlertsForRepo:["GET /repos/{owner}/{repo}/code-scanning/alerts"]},codesOfConduct:{getAllCodesOfConduct:["GET /codes_of_conduct",{mediaType:{previews:["scarlet-witch"]}}],getConductCode:["GET /codes_of_conduct/{key}",{mediaType:{previews:["scarlet-witch"]}}],getForRepo:["GET /repos/{owner}/{repo}/community/code_of_conduct",{mediaType:{previews:["scarlet-witch"]}}],listConductCodes:["GET /codes_of_conduct",{mediaType:{previews:["scarlet-witch"]}},{renamed:["codesOfConduct","getAllCodesOfConduct"]}]},emojis:{get:["GET /emojis"]},gists:{checkIsStarred:["GET /gists/{gist_id}/star"],create:["POST /gists"],createComment:["POST /gists/{gist_id}/comments"],delete:["DELETE /gists/{gist_id}"],deleteComment:["DELETE /gists/{gist_id}/comments/{comment_id}"],fork:["POST /gists/{gist_id}/forks"],get:["GET /gists/{gist_id}"],getComment:["GET /gists/{gist_id}/comments/{comment_id}"],getRevision:["GET /gists/{gist_id}/{sha}"],list:["GET /gists"],listComments:["GET /gists/{gist_id}/comments"],listCommits:["GET /gists/{gist_id}/commits"],listForUser:["GET /users/{username}/gists"],listForks:["GET /gists/{gist_id}/forks"],listPublic:["GET /gists/public"],listPublicForUser:["GET /users/{username}/gists",{},{renamed:["gists","listForUser"]}],listStarred:["GET /gists/starred"],star:["PUT /gists/{gist_id}/star"],unstar:["DELETE /gists/{gist_id}/star"],update:["PATCH /gists/{gist_id}"],updateComment:["PATCH /gists/{gist_id}/comments/{comment_id}"]},git:{createBlob:["POST /repos/{owner}/{repo}/git/blobs"],createCommit:["POST /repos/{owner}/{repo}/git/commits"],createRef:["POST /repos/{owner}/{repo}/git/refs"],createTag:["POST /repos/{owner}/{repo}/git/tags"],createTree:["POST /repos/{owner}/{repo}/git/trees"],deleteRef:["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],getBlob:["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],getCommit:["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],getRef:["GET /repos/{owner}/{repo}/git/ref/{ref}"],getTag:["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],getTree:["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],listMatchingRefs:["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],updateRef:["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]},gitignore:{getAllTemplates:["GET /gitignore/templates"],getTemplate:["GET /gitignore/templates/{name}"],listTemplates:["GET /gitignore/templates",{},{renamed:["gitignore","getAllTemplates"]}]},interactions:{addOrUpdateRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits",{mediaType:{previews:["sombra"]}},{renamed:["interactions","setRestrictionsForOrg"]}],addOrUpdateRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits",{mediaType:{previews:["sombra"]}},{renamed:["interactions","setRestrictionsForRepo"]}],getRestrictionsForOrg:["GET /orgs/{org}/interaction-limits",{mediaType:{previews:["sombra"]}}],getRestrictionsForRepo:["GET /repos/{owner}/{repo}/interaction-limits",{mediaType:{previews:["sombra"]}}],removeRestrictionsForOrg:["DELETE /orgs/{org}/interaction-limits",{mediaType:{previews:["sombra"]}}],removeRestrictionsForRepo:["DELETE /repos/{owner}/{repo}/interaction-limits",{mediaType:{previews:["sombra"]}}],setRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits",{mediaType:{previews:["sombra"]}}],setRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits",{mediaType:{previews:["sombra"]}}]},issues:{addAssignees:["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],addLabels:["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],checkAssignee:["GET /repos/{owner}/{repo}/assignees/{assignee}",{},{renamed:["issues","checkUserCanBeAssigned"]}],checkUserCanBeAssigned:["GET /repos/{owner}/{repo}/assignees/{assignee}"],create:["POST /repos/{owner}/{repo}/issues"],createComment:["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],createLabel:["POST /repos/{owner}/{repo}/labels"],createMilestone:["POST /repos/{owner}/{repo}/milestones"],deleteComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],deleteLabel:["DELETE /repos/{owner}/{repo}/labels/{name}"],deleteMilestone:["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],get:["GET /repos/{owner}/{repo}/issues/{issue_number}"],getComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],getEvent:["GET /repos/{owner}/{repo}/issues/events/{event_id}"],getLabel:["GET /repos/{owner}/{repo}/labels/{name}"],getMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],list:["GET /issues"],listAssignees:["GET /repos/{owner}/{repo}/assignees"],listComments:["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],listCommentsForRepo:["GET /repos/{owner}/{repo}/issues/comments"],listEvents:["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],listEventsForRepo:["GET /repos/{owner}/{repo}/issues/events"],listEventsForTimeline:["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline",{mediaType:{previews:["mockingbird"]}}],listForAuthenticatedUser:["GET /user/issues"],listForOrg:["GET /orgs/{org}/issues"],listForRepo:["GET /repos/{owner}/{repo}/issues"],listLabelsForMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],listLabelsForRepo:["GET /repos/{owner}/{repo}/labels"],listLabelsOnIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],listMilestones:["GET /repos/{owner}/{repo}/milestones"],listMilestonesForRepo:["GET /repos/{owner}/{repo}/milestones",{},{renamed:["issues","listMilestones"]}],lock:["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],removeAllLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],removeAssignees:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],removeLabel:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],removeLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels",{},{renamed:["issues","removeAllLabels"]}],replaceAllLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels",{},{renamed:["issues","setLabels"]}],replaceLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels",{},{renamed:["issues","replaceAllLabels"]}],setLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],unlock:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],update:["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],updateComment:["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],updateLabel:["PATCH /repos/{owner}/{repo}/labels/{name}"],updateMilestone:["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]},licenses:{get:["GET /licenses/{license}"],getAllCommonlyUsed:["GET /licenses"],getForRepo:["GET /repos/{owner}/{repo}/license"],listCommonlyUsed:["GET /licenses",{},{renamed:["licenses","getAllCommonlyUsed"]}]},markdown:{render:["POST /markdown"],renderRaw:["POST /markdown/raw",{headers:{"content-type":"text/plain; charset=utf-8"}}]},meta:{get:["GET /meta"]},migrations:{cancelImport:["DELETE /repos/{owner}/{repo}/import"],deleteArchiveForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/archive",{mediaType:{previews:["wyandotte"]}}],deleteArchiveForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/archive",{mediaType:{previews:["wyandotte"]}}],downloadArchiveForOrg:["GET /orgs/{org}/migrations/{migration_id}/archive",{mediaType:{previews:["wyandotte"]}}],getArchiveForAuthenticatedUser:["GET /user/migrations/{migration_id}/archive",{mediaType:{previews:["wyandotte"]}}],getCommitAuthors:["GET /repos/{owner}/{repo}/import/authors"],getImportProgress:["GET /repos/{owner}/{repo}/import",{},{renamed:["migrations","getImportStatus"]}],getImportStatus:["GET /repos/{owner}/{repo}/import"],getLargeFiles:["GET /repos/{owner}/{repo}/import/large_files"],getStatusForAuthenticatedUser:["GET /user/migrations/{migration_id}",{mediaType:{previews:["wyandotte"]}}],getStatusForOrg:["GET /orgs/{org}/migrations/{migration_id}",{mediaType:{previews:["wyandotte"]}}],listForAuthenticatedUser:["GET /user/migrations",{mediaType:{previews:["wyandotte"]}}],listForOrg:["GET /orgs/{org}/migrations",{mediaType:{previews:["wyandotte"]}}],listReposForOrg:["GET /orgs/{org}/migrations/{migration_id}/repositories",{mediaType:{previews:["wyandotte"]}}],listReposForUser:["GET /user/{migration_id}/repositories",{mediaType:{previews:["wyandotte"]}}],mapCommitAuthor:["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"],setLfsPreference:["PATCH /repos/{owner}/{repo}/import/lfs"],startForAuthenticatedUser:["POST /user/migrations"],startForOrg:["POST /orgs/{org}/migrations"],startImport:["PUT /repos/{owner}/{repo}/import"],unlockRepoForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock",{mediaType:{previews:["wyandotte"]}}],unlockRepoForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock",{mediaType:{previews:["wyandotte"]}}],updateImport:["PATCH /repos/{owner}/{repo}/import"]},orgs:{addOrUpdateMembership:["PUT /orgs/{org}/memberships/{username}",{},{renamed:["orgs","setMembershipForUser"]}],blockUser:["PUT /orgs/{org}/blocks/{username}"],checkBlockedUser:["GET /orgs/{org}/blocks/{username}"],checkMembership:["GET /orgs/{org}/members/{username}",{},{renamed:["orgs","checkMembershipForUser"]}],checkMembershipForUser:["GET /orgs/{org}/members/{username}"],checkPublicMembership:["GET /orgs/{org}/public_members/{username}",{},{renamed:["orgs","checkPublicMembershipForUser"]}],checkPublicMembershipForUser:["GET /orgs/{org}/public_members/{username}"],concealMembership:["DELETE /orgs/{org}/public_members/{username}",{},{renamed:["orgs","removePublicMembershipForAuthenticatedUser"]}],convertMemberToOutsideCollaborator:["PUT /orgs/{org}/outside_collaborators/{username}"],createHook:["POST /orgs/{org}/hooks",{},{renamed:["orgs","createWebhook"]}],createInvitation:["POST /orgs/{org}/invitations"],createWebhook:["POST /orgs/{org}/hooks"],deleteHook:["DELETE /orgs/{org}/hooks/{hook_id}",{},{renamed:["orgs","deleteWebhook"]}],deleteWebhook:["DELETE /orgs/{org}/hooks/{hook_id}"],get:["GET /orgs/{org}"],getHook:["GET /orgs/{org}/hooks/{hook_id}",{},{renamed:["orgs","getWebhook"]}],getMembership:["GET /orgs/{org}/memberships/{username}",{},{renamed:["orgs","getMembershipForUser"]}],getMembershipForAuthenticatedUser:["GET /user/memberships/orgs/{org}"],getMembershipForUser:["GET /orgs/{org}/memberships/{username}"],getWebhook:["GET /orgs/{org}/hooks/{hook_id}"],list:["GET /organizations"],listAppInstallations:["GET /orgs/{org}/installations",{mediaType:{previews:["machine-man"]}}],listBlockedUsers:["GET /orgs/{org}/blocks"],listForAuthenticatedUser:["GET /user/orgs"],listForUser:["GET /users/{username}/orgs"],listHooks:["GET /orgs/{org}/hooks",{},{renamed:["orgs","listWebhooks"]}],listInstallations:["GET /orgs/{org}/installations",{mediaType:{previews:["machine-man"]}},{renamed:["orgs","listAppInstallations"]}],listInvitationTeams:["GET /orgs/{org}/invitations/{invitation_id}/teams"],listMembers:["GET /orgs/{org}/members"],listMemberships:["GET /user/memberships/orgs",{},{renamed:["orgs","listMembershipsForAuthenticatedUser"]}],listMembershipsForAuthenticatedUser:["GET /user/memberships/orgs"],listOutsideCollaborators:["GET /orgs/{org}/outside_collaborators"],listPendingInvitations:["GET /orgs/{org}/invitations"],listPublicMembers:["GET /orgs/{org}/public_members"],listWebhooks:["GET /orgs/{org}/hooks"],pingHook:["POST /orgs/{org}/hooks/{hook_id}/pings",{},{renamed:["orgs","pingWebhook"]}],pingWebhook:["POST /orgs/{org}/hooks/{hook_id}/pings"],publicizeMembership:["PUT /orgs/{org}/public_members/{username}",{},{renamed:["orgs","setPublicMembershipForAuthenticatedUser"]}],removeMember:["DELETE /orgs/{org}/members/{username}"],removeMembership:["DELETE /orgs/{org}/memberships/{username}",{},{renamed:["orgs","removeMembershipForUser"]}],removeMembershipForUser:["DELETE /orgs/{org}/memberships/{username}"],removeOutsideCollaborator:["DELETE /orgs/{org}/outside_collaborators/{username}"],removePublicMembershipForAuthenticatedUser:["DELETE /orgs/{org}/public_members/{username}"],setMembershipForUser:["PUT /orgs/{org}/memberships/{username}"],setPublicMembershipForAuthenticatedUser:["PUT /orgs/{org}/public_members/{username}"],unblockUser:["DELETE /orgs/{org}/blocks/{username}"],update:["PATCH /orgs/{org}"],updateHook:["PATCH /orgs/{org}/hooks/{hook_id}",{},{renamed:["orgs","updateWebhook"]}],updateMembership:["PATCH /user/memberships/orgs/{org}",{},{renamed:["orgs","updateMembershipForAuthenticatedUser"]}],updateMembershipForAuthenticatedUser:["PATCH /user/memberships/orgs/{org}"],updateWebhook:["PATCH /orgs/{org}/hooks/{hook_id}"]},projects:{addCollaborator:["PUT /projects/{project_id}/collaborators/{username}",{mediaType:{previews:["inertia"]}}],createCard:["POST /projects/columns/{column_id}/cards",{mediaType:{previews:["inertia"]}}],createColumn:["POST /projects/{project_id}/columns",{mediaType:{previews:["inertia"]}}],createForAuthenticatedUser:["POST /user/projects",{mediaType:{previews:["inertia"]}}],createForOrg:["POST /orgs/{org}/projects",{mediaType:{previews:["inertia"]}}],createForRepo:["POST /repos/{owner}/{repo}/projects",{mediaType:{previews:["inertia"]}}],delete:["DELETE /projects/{project_id}",{mediaType:{previews:["inertia"]}}],deleteCard:["DELETE /projects/columns/cards/{card_id}",{mediaType:{previews:["inertia"]}}],deleteColumn:["DELETE /projects/columns/{column_id}",{mediaType:{previews:["inertia"]}}],get:["GET /projects/{project_id}",{mediaType:{previews:["inertia"]}}],getCard:["GET /projects/columns/cards/{card_id}",{mediaType:{previews:["inertia"]}}],getColumn:["GET /projects/columns/{column_id}",{mediaType:{previews:["inertia"]}}],getPermissionForUser:["GET /projects/{project_id}/collaborators/{username}/permission",{mediaType:{previews:["inertia"]}}],listCards:["GET /projects/columns/{column_id}/cards",{mediaType:{previews:["inertia"]}}],listCollaborators:["GET /projects/{project_id}/collaborators",{mediaType:{previews:["inertia"]}}],listColumns:["GET /projects/{project_id}/columns",{mediaType:{previews:["inertia"]}}],listForOrg:["GET /orgs/{org}/projects",{mediaType:{previews:["inertia"]}}],listForRepo:["GET /repos/{owner}/{repo}/projects",{mediaType:{previews:["inertia"]}}],listForUser:["GET /users/{username}/projects",{mediaType:{previews:["inertia"]}}],moveCard:["POST /projects/columns/cards/{card_id}/moves",{mediaType:{previews:["inertia"]}}],moveColumn:["POST /projects/columns/{column_id}/moves",{mediaType:{previews:["inertia"]}}],removeCollaborator:["DELETE /projects/{project_id}/collaborators/{username}",{mediaType:{previews:["inertia"]}}],reviewUserPermissionLevel:["GET /projects/{project_id}/collaborators/{username}/permission",{mediaType:{previews:["inertia"]}},{renamed:["projects","getPermissionForUser"]}],update:["PATCH /projects/{project_id}",{mediaType:{previews:["inertia"]}}],updateCard:["PATCH /projects/columns/cards/{card_id}",{mediaType:{previews:["inertia"]}}],updateColumn:["PATCH /projects/columns/{column_id}",{mediaType:{previews:["inertia"]}}]},pulls:{checkIfMerged:["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],create:["POST /repos/{owner}/{repo}/pulls"],createComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments",{},{renamed:["pulls","createReviewComment"]}],createReplyForReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],createReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],createReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],createReviewCommentReply:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies",{},{renamed:["pulls","createReplyForReviewComment"]}],createReviewRequest:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers",{},{renamed:["pulls","requestReviewers"]}],deleteComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}",{},{renamed:["pulls","deleteReviewComment"]}],deletePendingReview:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],deleteReviewComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],deleteReviewRequest:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers",{},{renamed:["pulls","removeRequestedReviewers"]}],dismissReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],get:["GET /repos/{owner}/{repo}/pulls/{pull_number}"],getComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}",{},{renamed:["pulls","getReviewComment"]}],getCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments",{},{renamed:["pulls","listCommentsForReview"]}],getReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],getReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],list:["GET /repos/{owner}/{repo}/pulls"],listComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments",{},{renamed:["pulls","listReviewComments"]}],listCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments",{},{renamed:["pulls","listReviewCommentsForRepo"]}],listCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],listCommits:["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],listFiles:["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],listRequestedReviewers:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],listReviewComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],listReviewCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments"],listReviewRequests:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers",{},{renamed:["pulls","listRequestedReviewers"]}],listReviews:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],merge:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],removeRequestedReviewers:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],requestReviewers:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],submitReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],update:["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],updateBranch:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch",{mediaType:{previews:["lydian"]}}],updateComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}",{},{renamed:["pulls","updateReviewComment"]}],updateReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],updateReviewComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]},rateLimit:{get:["GET /rate_limit"]},reactions:{createForCommitComment:["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions",{mediaType:{previews:["squirrel-girl"]}}],createForIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions",{mediaType:{previews:["squirrel-girl"]}}],createForIssueComment:["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions",{mediaType:{previews:["squirrel-girl"]}}],createForPullRequestReviewComment:["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions",{mediaType:{previews:["squirrel-girl"]}}],createForTeamDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions",{mediaType:{previews:["squirrel-girl"]}}],createForTeamDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions",{mediaType:{previews:["squirrel-girl"]}}],delete:["DELETE /reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}},{renamed:["reactions","deleteLegacy"]}],deleteForCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}}],deleteForIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}}],deleteForIssueComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}}],deleteForPullRequestComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}}],deleteForTeamDiscussion:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}}],deleteForTeamDiscussionComment:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}}],deleteLegacy:["DELETE /reactions/{reaction_id}",{mediaType:{previews:["squirrel-girl"]}},{deprecated:"octokit.reactions.deleteLegacy() is deprecated, see https://developer.github.com/v3/reactions/#delete-a-reaction-legacy"}],listForCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions",{mediaType:{previews:["squirrel-girl"]}}],listForIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions",{mediaType:{previews:["squirrel-girl"]}}],listForIssueComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions",{mediaType:{previews:["squirrel-girl"]}}],listForPullRequestReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions",{mediaType:{previews:["squirrel-girl"]}}],listForTeamDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions",{mediaType:{previews:["squirrel-girl"]}}],listForTeamDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions",{mediaType:{previews:["squirrel-girl"]}}]},repos:{acceptInvitation:["PATCH /user/repository_invitations/{invitation_id}"],addAppAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],addCollaborator:["PUT /repos/{owner}/{repo}/collaborators/{username}"],addDeployKey:["POST /repos/{owner}/{repo}/keys",{},{renamed:["repos","createDeployKey"]}],addProtectedBranchAdminEnforcement:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins",{},{renamed:["repos","setAdminBranchProtection"]}],addProtectedBranchAppRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps",renamed:["repos","addAppAccessRestrictions"]}],addProtectedBranchRequiredSignatures:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",{mediaType:{previews:["zzzax"]}},{renamed:["repos","createCommitSignatureProtection"]}],addProtectedBranchRequiredStatusChecksContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts",renamed:["repos","addStatusCheckContexts"]}],addProtectedBranchTeamRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams",renamed:["repos","addTeamAccessRestrictions"]}],addProtectedBranchUserRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users",renamed:["repos","addUserAccessRestrictions"]}],addStatusCheckContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],addTeamAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],addUserAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],checkCollaborator:["GET /repos/{owner}/{repo}/collaborators/{username}"],checkVulnerabilityAlerts:["GET /repos/{owner}/{repo}/vulnerability-alerts",{mediaType:{previews:["dorian"]}}],compareCommits:["GET /repos/{owner}/{repo}/compare/{base}...{head}"],createCommitComment:["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],createCommitSignatureProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",{mediaType:{previews:["zzzax"]}}],createCommitStatus:["POST /repos/{owner}/{repo}/statuses/{sha}"],createDeployKey:["POST /repos/{owner}/{repo}/keys"],createDeployment:["POST /repos/{owner}/{repo}/deployments"],createDeploymentStatus:["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],createDispatchEvent:["POST /repos/{owner}/{repo}/dispatches"],createForAuthenticatedUser:["POST /user/repos"],createFork:["POST /repos/{owner}/{repo}/forks"],createHook:["POST /repos/{owner}/{repo}/hooks",{},{renamed:["repos","createWebhook"]}],createInOrg:["POST /orgs/{org}/repos"],createOrUpdateFile:["PUT /repos/{owner}/{repo}/contents/{path}",{},{renamed:["repos","createOrUpdateFileContents"]}],createOrUpdateFileContents:["PUT /repos/{owner}/{repo}/contents/{path}"],createPagesSite:["POST /repos/{owner}/{repo}/pages",{mediaType:{previews:["switcheroo"]}}],createRelease:["POST /repos/{owner}/{repo}/releases"],createStatus:["POST /repos/{owner}/{repo}/statuses/{sha}",{},{renamed:["repos","createCommitStatus"]}],createUsingTemplate:["POST /repos/{template_owner}/{template_repo}/generate",{mediaType:{previews:["baptiste"]}}],createWebhook:["POST /repos/{owner}/{repo}/hooks"],declineInvitation:["DELETE /user/repository_invitations/{invitation_id}"],delete:["DELETE /repos/{owner}/{repo}"],deleteAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],deleteAdminBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],deleteBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],deleteCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],deleteCommitSignatureProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",{mediaType:{previews:["zzzax"]}}],deleteDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}"],deleteDeployment:["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],deleteDownload:["DELETE /repos/{owner}/{repo}/downloads/{download_id}"],deleteFile:["DELETE /repos/{owner}/{repo}/contents/{path}"],deleteHook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}",{},{renamed:["repos","deleteWebhook"]}],deleteInvitation:["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],deletePagesSite:["DELETE /repos/{owner}/{repo}/pages",{mediaType:{previews:["switcheroo"]}}],deletePullRequestReviewProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],deleteRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}"],deleteReleaseAsset:["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],deleteWebhook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],disableAutomatedSecurityFixes:["DELETE /repos/{owner}/{repo}/automated-security-fixes",{mediaType:{previews:["london"]}}],disablePagesSite:["DELETE /repos/{owner}/{repo}/pages",{mediaType:{previews:["switcheroo"]}},{renamed:["repos","deletePagesSite"]}],disableVulnerabilityAlerts:["DELETE /repos/{owner}/{repo}/vulnerability-alerts",{mediaType:{previews:["dorian"]}}],downloadArchive:["GET /repos/{owner}/{repo}/{archive_format}/{ref}"],enableAutomatedSecurityFixes:["PUT /repos/{owner}/{repo}/automated-security-fixes",{mediaType:{previews:["london"]}}],enablePagesSite:["POST /repos/{owner}/{repo}/pages",{mediaType:{previews:["switcheroo"]}},{renamed:["repos","createPagesSite"]}],enableVulnerabilityAlerts:["PUT /repos/{owner}/{repo}/vulnerability-alerts",{mediaType:{previews:["dorian"]}}],get:["GET /repos/{owner}/{repo}"],getAccessRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],getAdminBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],getAllStatusCheckContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],getAllTopics:["GET /repos/{owner}/{repo}/topics",{mediaType:{previews:["mercy"]}}],getAppsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],getArchiveLink:["GET /repos/{owner}/{repo}/{archive_format}/{ref}",{},{renamed:["repos","downloadArchive"]}],getBranch:["GET /repos/{owner}/{repo}/branches/{branch}"],getBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection"],getClones:["GET /repos/{owner}/{repo}/traffic/clones"],getCodeFrequencyStats:["GET /repos/{owner}/{repo}/stats/code_frequency"],getCollaboratorPermissionLevel:["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],getCombinedStatusForRef:["GET /repos/{owner}/{repo}/commits/{ref}/status"],getCommit:["GET /repos/{owner}/{repo}/commits/{ref}"],getCommitActivityStats:["GET /repos/{owner}/{repo}/stats/commit_activity"],getCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}"],getCommitSignatureProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",{mediaType:{previews:["zzzax"]}}],getCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile"],getContent:["GET /repos/{owner}/{repo}/contents/{path}"],getContents:["GET /repos/{owner}/{repo}/contents/{path}",{},{renamed:["repos","getContent"]}],getContributorsStats:["GET /repos/{owner}/{repo}/stats/contributors"],getDeployKey:["GET /repos/{owner}/{repo}/keys/{key_id}"],getDeployment:["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],getDeploymentStatus:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],getDownload:["GET /repos/{owner}/{repo}/downloads/{download_id}"],getHook:["GET /repos/{owner}/{repo}/hooks/{hook_id}",{},{renamed:["repos","getWebhook"]}],getLatestPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/latest"],getLatestRelease:["GET /repos/{owner}/{repo}/releases/latest"],getPages:["GET /repos/{owner}/{repo}/pages"],getPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],getParticipationStats:["GET /repos/{owner}/{repo}/stats/participation"],getProtectedBranchAdminEnforcement:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins",{},{renamed:["repos","getAdminBranchProtection"]}],getProtectedBranchPullRequestReviewEnforcement:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews",{},{renamed:["repos","getPullRequestReviewProtection"]}],getProtectedBranchRequiredSignatures:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",{mediaType:{previews:["zzzax"]}},{renamed:["repos","getCommitSignatureProtection"]}],getProtectedBranchRequiredStatusChecks:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","getStatusChecksProtection"]}],getProtectedBranchRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions",{},{renamed:["repos","getAccessRestrictions"]}],getPullRequestReviewProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],getPunchCardStats:["GET /repos/{owner}/{repo}/stats/punch_card"],getReadme:["GET /repos/{owner}/{repo}/readme"],getRelease:["GET /repos/{owner}/{repo}/releases/{release_id}"],getReleaseAsset:["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],getReleaseByTag:["GET /repos/{owner}/{repo}/releases/tags/{tag}"],getStatusChecksProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],getTeamsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],getTopPaths:["GET /repos/{owner}/{repo}/traffic/popular/paths"],getTopReferrers:["GET /repos/{owner}/{repo}/traffic/popular/referrers"],getUsersWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],getViews:["GET /repos/{owner}/{repo}/traffic/views"],getWebhook:["GET /repos/{owner}/{repo}/hooks/{hook_id}"],list:["GET /user/repos",{},{renamed:["repos","listForAuthenticatedUser"]}],listAssetsForRelease:["GET /repos/{owner}/{repo}/releases/{release_id}/assets",{},{renamed:["repos","listReleaseAssets"]}],listBranches:["GET /repos/{owner}/{repo}/branches"],listBranchesForHeadCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head",{mediaType:{previews:["groot"]}}],listCollaborators:["GET /repos/{owner}/{repo}/collaborators"],listCommentsForCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],listCommitComments:["GET /repos/{owner}/{repo}/comments",{},{renamed:["repos","listCommitCommentsForRepo"]}],listCommitCommentsForRepo:["GET /repos/{owner}/{repo}/comments"],listCommitStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],listCommits:["GET /repos/{owner}/{repo}/commits"],listContributors:["GET /repos/{owner}/{repo}/contributors"],listDeployKeys:["GET /repos/{owner}/{repo}/keys"],listDeploymentStatuses:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],listDeployments:["GET /repos/{owner}/{repo}/deployments"],listDownloads:["GET /repos/{owner}/{repo}/downloads"],listForAuthenticatedUser:["GET /user/repos"],listForOrg:["GET /orgs/{org}/repos"],listForUser:["GET /users/{username}/repos"],listForks:["GET /repos/{owner}/{repo}/forks"],listHooks:["GET /repos/{owner}/{repo}/hooks",{},{renamed:["repos","listWebhooks"]}],listInvitations:["GET /repos/{owner}/{repo}/invitations"],listInvitationsForAuthenticatedUser:["GET /user/repository_invitations"],listLanguages:["GET /repos/{owner}/{repo}/languages"],listPagesBuilds:["GET /repos/{owner}/{repo}/pages/builds"],listProtectedBranchRequiredStatusChecksContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{renamed:["repos","getAllStatusCheckContexts"]}],listPublic:["GET /repositories"],listPullRequestsAssociatedWithCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls",{mediaType:{previews:["groot"]}}],listReleaseAssets:["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],listReleases:["GET /repos/{owner}/{repo}/releases"],listStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses",{},{renamed:["repos","listCommitStatusesForRef"]}],listTags:["GET /repos/{owner}/{repo}/tags"],listTeams:["GET /repos/{owner}/{repo}/teams"],listTopics:["GET /repos/{owner}/{repo}/topics",{mediaType:{previews:["mercy"]}},{renamed:["repos","getAllTopics"]}],listWebhooks:["GET /repos/{owner}/{repo}/hooks"],merge:["POST /repos/{owner}/{repo}/merges"],pingHook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings",{},{renamed:["repos","pingWebhook"]}],pingWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],removeAppAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],removeBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection",{},{renamed:["repos","deleteBranchProtection"]}],removeCollaborator:["DELETE /repos/{owner}/{repo}/collaborators/{username}"],removeDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}",{},{renamed:["repos","deleteDeployKey"]}],removeProtectedBranchAdminEnforcement:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins",{},{renamed:["repos","deleteAdminBranchProtection"]}],removeProtectedBranchAppRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps",renamed:["repos","removeAppAccessRestrictions"]}],removeProtectedBranchPullRequestReviewEnforcement:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews",{},{renamed:["repos","deletePullRequestReviewProtection"]}],removeProtectedBranchRequiredSignatures:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures",{mediaType:{previews:["zzzax"]}},{renamed:["repos","deleteCommitSignatureProtection"]}],removeProtectedBranchRequiredStatusChecks:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","removeStatusChecksProtection"]}],removeProtectedBranchRequiredStatusChecksContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts",renamed:["repos","removeStatusCheckContexts"]}],removeProtectedBranchRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions",{},{renamed:["repos","deleteAccessRestrictions"]}],removeProtectedBranchTeamRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams",renamed:["repos","removeTeamAccessRestrictions"]}],removeProtectedBranchUserRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users",renamed:["repos","removeUserAccessRestrictions"]}],removeStatusCheckContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],removeStatusCheckProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],removeTeamAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],removeUserAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],replaceAllTopics:["PUT /repos/{owner}/{repo}/topics",{mediaType:{previews:["mercy"]}}],replaceProtectedBranchAppRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps",renamed:["repos","setAppAccessRestrictions"]}],replaceProtectedBranchRequiredStatusChecksContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts",renamed:["repos","setStatusCheckContexts"]}],replaceProtectedBranchTeamRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams",renamed:["repos","setTeamAccessRestrictions"]}],replaceProtectedBranchUserRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users",renamed:["repos","setUserAccessRestrictions"]}],replaceTopics:["PUT /repos/{owner}/{repo}/topics",{mediaType:{previews:["mercy"]}},{renamed:["repos","replaceAllTopics"]}],requestPageBuild:["POST /repos/{owner}/{repo}/pages/builds",{},{renamed:["repos","requestPagesBuild"]}],requestPagesBuild:["POST /repos/{owner}/{repo}/pages/builds"],retrieveCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile",{},{renamed:["repos","getCommunityProfileMetrics"]}],setAdminBranchProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],setAppAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],setStatusCheckContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],setTeamAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],setUserAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],testPushHook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests",{},{renamed:["repos","testPushWebhook"]}],testPushWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],transfer:["POST /repos/{owner}/{repo}/transfer"],update:["PATCH /repos/{owner}/{repo}"],updateBranchProtection:["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],updateCommitComment:["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],updateHook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}",{},{renamed:["repos","updateWebhook"]}],updateInformationAboutPagesSite:["PUT /repos/{owner}/{repo}/pages"],updateInvitation:["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],updateProtectedBranchPullRequestReviewEnforcement:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews",{},{renamed:["repos","updatePullRequestReviewProtection"]}],updateProtectedBranchRequiredStatusChecks:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","updateStatusChecksProtection"]}],updatePullRequestReviewProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],updateRelease:["PATCH /repos/{owner}/{repo}/releases/{release_id}"],updateReleaseAsset:["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],updateStatusCheckPotection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],updateWebhook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],uploadReleaseAsset:["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",{baseUrl:"https://uploads.github.com"}]},search:{code:["GET /search/code"],commits:["GET /search/commits",{mediaType:{previews:["cloak"]}}],issuesAndPullRequests:["GET /search/issues"],labels:["GET /search/labels"],repos:["GET /search/repositories"],topics:["GET /search/topics"],users:["GET /search/users"]},teams:{addOrUpdateMembershipForUserInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],addOrUpdateMembershipInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}",{},{renamed:["teams","addOrUpdateMembershipForUserInOrg"]}],addOrUpdateProjectInOrg:["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}",{mediaType:{previews:["inertia"]}},{renamed:["teams","addOrUpdateProjectPermissionsInOrg"]}],addOrUpdateProjectPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}",{mediaType:{previews:["inertia"]}}],addOrUpdateRepoInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}",{},{renamed:["teams","addOrUpdateRepoPermissionsInOrg"]}],addOrUpdateRepoPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],checkManagesRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}",{},{renamed:["teams","checkPermissionsForRepoInOrg"]}],checkPermissionsForProjectInOrg:["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}",{mediaType:{previews:["inertia"]}}],checkPermissionsForRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],create:["POST /orgs/{org}/teams"],createDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],createDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions"],deleteDiscussionCommentInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],deleteDiscussionInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],deleteInOrg:["DELETE /orgs/{org}/teams/{team_slug}"],getByName:["GET /orgs/{org}/teams/{team_slug}"],getDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],getDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],getMembershipForUserInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],getMembershipInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}",{},{renamed:["teams","getMembershipForUserInOrg"]}],list:["GET /orgs/{org}/teams"],listChildInOrg:["GET /orgs/{org}/teams/{team_slug}/teams"],listDiscussionCommentsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],listDiscussionsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions"],listForAuthenticatedUser:["GET /user/teams"],listMembersInOrg:["GET /orgs/{org}/teams/{team_slug}/members"],listPendingInvitationsInOrg:["GET /orgs/{org}/teams/{team_slug}/invitations"],listProjectsInOrg:["GET /orgs/{org}/teams/{team_slug}/projects",{mediaType:{previews:["inertia"]}}],listReposInOrg:["GET /orgs/{org}/teams/{team_slug}/repos"],removeMembershipForUserInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],removeMembershipInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}",{},{renamed:["teams","removeMembershipForUserInOrg"]}],removeProjectInOrg:["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"],removeRepoInOrg:["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],reviewProjectInOrg:["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}",{mediaType:{previews:["inertia"]}},{renamed:["teams","checkPermissionsForProjectInOrg"]}],updateDiscussionCommentInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],updateDiscussionInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],updateInOrg:["PATCH /orgs/{org}/teams/{team_slug}"]},users:{addEmailForAuthenticated:["POST /user/emails"],addEmails:["POST /user/emails",{},{renamed:["users","addEmailsForAuthenticated"]}],block:["PUT /user/blocks/{username}"],checkBlocked:["GET /user/blocks/{username}"],checkFollowing:["GET /user/following/{username}",{},{renamed:["users","checkPersonIsFollowedByAuthenticated"]}],checkFollowingForUser:["GET /users/{username}/following/{target_user}"],checkPersonIsFollowedByAuthenticated:["GET /user/following/{username}"],createGpgKey:["POST /user/gpg_keys",{},{renamed:["users","createGpgKeyForAuthenticated"]}],createGpgKeyForAuthenticated:["POST /user/gpg_keys"],createPublicKey:["POST /user/keys",{},{renamed:["users","createPublicSshKeyForAuthenticated"]}],createPublicSshKeyForAuthenticated:["POST /user/keys"],deleteEmailForAuthenticated:["DELETE /user/emails"],deleteEmails:["DELETE /user/emails",{},{renamed:["users","deleteEmailsForAuthenticated"]}],deleteGpgKey:["DELETE /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","deleteGpgKeyForAuthenticated"]}],deleteGpgKeyForAuthenticated:["DELETE /user/gpg_keys/{gpg_key_id}"],deletePublicKey:["DELETE /user/keys/{key_id}",{},{renamed:["users","deletePublicSshKeyForAuthenticated"]}],deletePublicSshKeyForAuthenticated:["DELETE /user/keys/{key_id}"],follow:["PUT /user/following/{username}"],getAuthenticated:["GET /user"],getByUsername:["GET /users/{username}"],getContextForUser:["GET /users/{username}/hovercard"],getGpgKey:["GET /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","getGpgKeyForAuthenticated"]}],getGpgKeyForAuthenticated:["GET /user/gpg_keys/{gpg_key_id}"],getPublicKey:["GET /user/keys/{key_id}",{},{renamed:["users","getPublicSshKeyForAuthenticated"]}],getPublicSshKeyForAuthenticated:["GET /user/keys/{key_id}"],list:["GET /users"],listBlocked:["GET /user/blocks",{},{renamed:["users","listBlockedByAuthenticated"]}],listBlockedByAuthenticated:["GET /user/blocks"],listEmails:["GET /user/emails",{},{renamed:["users","listEmailsForAuthenticated"]}],listEmailsForAuthenticated:["GET /user/emails"],listFollowedByAuthenticated:["GET /user/following"],listFollowersForAuthenticatedUser:["GET /user/followers"],listFollowersForUser:["GET /users/{username}/followers"],listFollowingForAuthenticatedUser:["GET /user/following",{},{renamed:["users","listFollowedByAuthenticated"]}],listFollowingForUser:["GET /users/{username}/following"],listGpgKeys:["GET /user/gpg_keys",{},{renamed:["users","listGpgKeysForAuthenticated"]}],listGpgKeysForAuthenticated:["GET /user/gpg_keys"],listGpgKeysForUser:["GET /users/{username}/gpg_keys"],listPublicEmails:["GET /user/public_emails",{},{renamed:["users","listPublicEmailsForAuthenticatedUser"]}],listPublicEmailsForAuthenticated:["GET /user/public_emails"],listPublicKeys:["GET /user/keys",{},{renamed:["users","listPublicSshKeysForAuthenticated"]}],listPublicKeysForUser:["GET /users/{username}/keys"],listPublicSshKeysForAuthenticated:["GET /user/keys"],setPrimaryEmailVisibilityForAuthenticated:["PATCH /user/email/visibility"],togglePrimaryEmailVisibility:["PATCH /user/email/visibility",{},{renamed:["users","setPrimaryEmailVisibilityForAuthenticated"]}],unblock:["DELETE /user/blocks/{username}"],unfollow:["DELETE /user/following/{username}"],updateAuthenticated:["PATCH /user"]}};function s(e,t,r,o,s){const n=e.request.defaults(o);return Object.assign((function(...o){let i=n.endpoint.merge(...o);if(s.mapToData)return i=Object.assign({},i,{data:i[s.mapToData],[s.mapToData]:void 0}),n(i);if(s.renamed){const[o,n]=s.renamed;e.log.warn(`octokit.${t}.${r}() has been renamed to octokit.${o}.${n}()`)}if(s.deprecated&&e.log.warn(s.deprecated),s.renamedParameters){const i=n.endpoint.merge(...o);for(const[o,n]of Object.entries(s.renamedParameters))o in i&&(e.log.warn(`"${o}" parameter is deprecated for "octokit.${t}.${r}()". Use "${n}" instead`),n in i||(i[n]=i[o]),delete i[o]);return n(i)}return n(...o)}),n)}function n(e){return function(e,t){const r={};for(const[o,n]of Object.entries(t))for(const[t,i]of Object.entries(n)){const[n,a,c]=i,[u,p]=n.split(/ /),l=Object.assign({method:u,url:p},a);r[o]||(r[o]={});const d=r[o];c?d[t]=s(e,o,t,l,c):d[t]=e.request.defaults(l)}return r}(e,o)}n.VERSION="3.17.0"},function(e,t,r){"use strict";r.r(t),r.d(t,"paginateRest",(function(){return i}));function o(e){if(!("total_count"in e.data&&!("url"in e.data)))return e;const t=e.data.incomplete_results,r=e.data.repository_selection,o=e.data.total_count;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count;const s=Object.keys(e.data)[0],n=e.data[s];return e.data=n,void 0!==t&&(e.data.incomplete_results=t),void 0!==r&&(e.data.repository_selection=r),e.data.total_count=o,e}function s(e,t,r){const s="function"==typeof t?t.endpoint(r):e.request.endpoint(t,r),n="function"==typeof t?t:e.request,i=s.method,a=s.headers;let c=s.url;return{[Symbol.asyncIterator]:()=>({next:()=>c?n({method:i,url:c,headers:a}).then(o).then(e=>(c=((e.headers.link||"").match(/<([^>]+)>;\s*rel="next"/)||[])[1],{value:e})):Promise.resolve({done:!0})})}}function n(e,t,r,o){return"function"==typeof r&&(o=r,r=void 0),function e(t,r,o,s){return o.next().then(n=>{if(n.done)return r;let i=!1;return r=r.concat(s?s(n.value,(function(){i=!0})):n.value.data),i?r:e(t,r,o,s)})}(e,[],s(e,t,r)[Symbol.asyncIterator](),o)}function i(e){return{paginate:Object.assign(n.bind(null,e),{iterator:s.bind(null,e)})}}i.VERSION="2.2.2"},function(e,t,r){"use strict";function o(){try{return ({}).userAgent}catch(e){return"<environment undetectable>"}}r.r(t),r.d(t,"Octokit",(function(){return _e}));var s=r(27);
+/*!
+ * isobject <https://github.com/jonschlinkert/isobject>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+/*!
+ * is-plain-object <https://github.com/jonschlinkert/is-plain-object>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+function n(e){return!0==(null!=(t=e)&&"object"==typeof t&&!1===Array.isArray(t))&&"[object Object]"===Object.prototype.toString.call(e);var t}function i(e){var t,r;return!1!==n(e)&&("function"==typeof(t=e.constructor)&&(!1!==n(r=t.prototype)&&!1!==r.hasOwnProperty("isPrototypeOf")))}function a(e,t,r){if("string"==typeof t){let[e,o]=t.split(" ");r=Object.assign(o?{method:e,url:o}:{url:e},r)}else r=Object.assign({},t);var o;r.headers=(o=r.headers)?Object.keys(o).reduce((e,t)=>(e[t.toLowerCase()]=o[t],e),{}):{};const s=function e(t,r){const o=Object.assign({},t);return Object.keys(r).forEach(s=>{i(r[s])?s in t?o[s]=e(t[s],r[s]):Object.assign(o,{[s]:r[s]}):Object.assign(o,{[s]:r[s]})}),o}(e||{},r);return e&&e.mediaType.previews.length&&(s.mediaType.previews=e.mediaType.previews.filter(e=>!s.mediaType.previews.includes(e)).concat(s.mediaType.previews)),s.mediaType.previews=s.mediaType.previews.map(e=>e.replace(/-preview/,"")),s}const c=/\{[^}]+\}/g;function u(e){return e.replace(/^\W+|\W+$/g,"").split(/,/)}function p(e,t){return Object.keys(e).filter(e=>!t.includes(e)).reduce((t,r)=>(t[r]=e[r],t),{})}function l(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map((function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e})).join("")}function d(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function m(e,t,r){return t="+"===e||"#"===e?l(t):d(t),r?d(r)+"="+t:t}function h(e){return null!=e}function f(e){return";"===e||"&"===e||"?"===e}function g(e,t){var r=["+","#",".","/",";","?","&"];return e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,(function(e,o,s){if(o){let e="";const s=[];if(-1!==r.indexOf(o.charAt(0))&&(e=o.charAt(0),o=o.substr(1)),o.split(/,/g).forEach((function(r){var o=/([^:\*]*)(?::(\d+)|(\*))?/.exec(r);s.push(function(e,t,r,o){var s=e[r],n=[];if(h(s)&&""!==s)if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)s=s.toString(),o&&"*"!==o&&(s=s.substring(0,parseInt(o,10))),n.push(m(t,s,f(t)?r:""));else if("*"===o)Array.isArray(s)?s.filter(h).forEach((function(e){n.push(m(t,e,f(t)?r:""))})):Object.keys(s).forEach((function(e){h(s[e])&&n.push(m(t,s[e],e))}));else{const e=[];Array.isArray(s)?s.filter(h).forEach((function(r){e.push(m(t,r))})):Object.keys(s).forEach((function(r){h(s[r])&&(e.push(d(r)),e.push(m(t,s[r].toString())))})),f(t)?n.push(d(r)+"="+e.join(",")):0!==e.length&&n.push(e.join(","))}else";"===t?h(s)&&n.push(d(r)):""!==s||"&"!==t&&"?"!==t?""===s&&n.push(""):n.push(d(r)+"=");return n}(t,e,o[1],o[2]||o[3]))})),e&&"+"!==e){var n=",";return"?"===e?n="&":"#"!==e&&(n=e),(0!==s.length?e:"")+s.join(n)}return s.join(",")}return l(s)}))}function E(e){let t,r=e.method.toUpperCase(),o=(e.url||"/").replace(/:([a-z]\w+)/g,"{+$1}"),s=Object.assign({},e.headers),n=p(e,["method","baseUrl","url","headers","request","mediaType"]);const i=function(e){const t=e.match(c);return t?t.map(u).reduce((e,t)=>e.concat(t),[]):[]}(o);var a;o=(a=o,{expand:g.bind(null,a)}).expand(n),/^http/.test(o)||(o=e.baseUrl+o);const l=p(n,Object.keys(e).filter(e=>i.includes(e)).concat("baseUrl"));if(!/application\/octet-stream/i.test(s.accept)&&(e.mediaType.format&&(s.accept=s.accept.split(/,/).map(t=>t.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,"application/vnd$1$2."+e.mediaType.format)).join(",")),e.mediaType.previews.length)){const t=s.accept.match(/[\w-]+(?=-preview)/g)||[];s.accept=t.concat(e.mediaType.previews).map(t=>`application/vnd.github.${t}-preview${e.mediaType.format?"."+e.mediaType.format:"+json"}`).join(",")}return["GET","HEAD"].includes(r)?o=function(e,t){const r=/\?/.test(e)?"&":"?",o=Object.keys(t);return 0===o.length?e:e+r+o.map(e=>"q"===e?"q="+t.q.split("+").map(encodeURIComponent).join("+"):`${e}=${encodeURIComponent(t[e])}`).join("&")}(o,l):"data"in l?t=l.data:Object.keys(l).length?t=l:s["content-length"]=0,s["content-type"]||void 0===t||(s["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(r)&&void 0===t&&(t=""),Object.assign({method:r,url:o,headers:s},void 0!==t?{body:t}:null,e.request?{request:e.request}:null)}function w(e,t,r){return E(a(e,t,r))}const T=function e(t,r){const o=a(t,r),s=w.bind(null,o);return Object.assign(s,{DEFAULTS:o,defaults:e.bind(null,o),merge:a.bind(null,o),parse:E})}(null,{method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":"octokit-endpoint.js/6.0.3 "+o()},mediaType:{format:"",previews:[]}});var y=r(1),b=r(8),v=r(6),_=r(10),P=r(3);const O=y.Readable,R=Symbol("buffer"),S=Symbol("type");class A{constructor(){this[S]="";const e=arguments[0],t=arguments[1],r=[];let o=0;if(e){const t=e,s=Number(t.length);for(let e=0;e<s;e++){const s=t[e];let n;n=s instanceof Buffer?s:ArrayBuffer.isView(s)?Buffer.from(s.buffer,s.byteOffset,s.byteLength):s instanceof ArrayBuffer?Buffer.from(s):s instanceof A?s[R]:Buffer.from("string"==typeof s?s:String(s)),o+=n.length,r.push(n)}}this[R]=Buffer.concat(r);let s=t&&void 0!==t.type&&String(t.type).toLowerCase();s&&!/[^\u0020-\u007E]/.test(s)&&(this[S]=s)}get size(){return this[R].length}get type(){return this[S]}text(){return Promise.resolve(this[R].toString())}arrayBuffer(){const e=this[R],t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);return Promise.resolve(t)}stream(){const e=new O;return e._read=function(){},e.push(this[R]),e.push(null),e}toString(){return"[object Blob]"}slice(){const e=this.size,t=arguments[0],r=arguments[1];let o,s;o=void 0===t?0:t<0?Math.max(e+t,0):Math.min(t,e),s=void 0===r?e:r<0?Math.max(e+r,0):Math.min(r,e);const n=Math.max(s-o,0),i=this[R].slice(o,o+n),a=new A([],{type:arguments[2]});return a[R]=i,a}}function k(e,t,r){Error.call(this,e),this.message=e,this.type=t,r&&(this.code=this.errno=r.code),Error.captureStackTrace(this,this.constructor)}let C;Object.defineProperties(A.prototype,{size:{enumerable:!0},type:{enumerable:!0},slice:{enumerable:!0}}),Object.defineProperty(A.prototype,Symbol.toStringTag,{value:"Blob",writable:!1,enumerable:!1,configurable:!0}),k.prototype=Object.create(Error.prototype),k.prototype.constructor=k,k.prototype.name="FetchError";try{C=require("encoding").convert}catch(e){}const G=Symbol("Body internals"),I=y.PassThrough;function L(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=r.size;let s=void 0===o?0:o;var n=r.timeout;let i=void 0===n?0:n;null==e?e=null:F(e)?e=Buffer.from(e.toString()):U(e)||Buffer.isBuffer(e)||("[object ArrayBuffer]"===Object.prototype.toString.call(e)?e=Buffer.from(e):ArrayBuffer.isView(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof y||(e=Buffer.from(String(e)))),this[G]={body:e,disturbed:!1,error:null},this.size=s,this.timeout=i,e instanceof y&&e.on("error",(function(e){const r="AbortError"===e.name?e:new k(`Invalid response body while trying to fetch ${t.url}: ${e.message}`,"system",e);t[G].error=r}))}function x(){var e=this;if(this[G].disturbed)return L.Promise.reject(new TypeError("body used already for: "+this.url));if(this[G].disturbed=!0,this[G].error)return L.Promise.reject(this[G].error);let t=this.body;if(null===t)return L.Promise.resolve(Buffer.alloc(0));if(U(t)&&(t=t.stream()),Buffer.isBuffer(t))return L.Promise.resolve(t);if(!(t instanceof y))return L.Promise.resolve(Buffer.alloc(0));let r=[],o=0,s=!1;return new L.Promise((function(n,i){let a;e.timeout&&(a=setTimeout((function(){s=!0,i(new k(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))}),e.timeout)),t.on("error",(function(t){"AbortError"===t.name?(s=!0,i(t)):i(new k(`Invalid response body while trying to fetch ${e.url}: ${t.message}`,"system",t))})),t.on("data",(function(t){if(!s&&null!==t){if(e.size&&o+t.length>e.size)return s=!0,void i(new k(`content size at ${e.url} over limit: ${e.size}`,"max-size"));o+=t.length,r.push(t)}})),t.on("end",(function(){if(!s){clearTimeout(a);try{n(Buffer.concat(r,o))}catch(t){i(new k(`Could not create Buffer from response body for ${e.url}: ${t.message}`,"system",t))}}}))}))}function F(e){return"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&("URLSearchParams"===e.constructor.name||"[object URLSearchParams]"===Object.prototype.toString.call(e)||"function"==typeof e.sort)}function U(e){return"object"==typeof e&&"function"==typeof e.arrayBuffer&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}function D(e){let t,r,o=e.body;if(e.bodyUsed)throw new Error("cannot clone body after it is used");return o instanceof y&&"function"!=typeof o.getBoundary&&(t=new I,r=new I,o.pipe(t),o.pipe(r),e[G].body=t,o=r),o}function j(e){return null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":F(e)?"application/x-www-form-urlencoded;charset=UTF-8":U(e)?e.type||null:Buffer.isBuffer(e)||"[object ArrayBuffer]"===Object.prototype.toString.call(e)||ArrayBuffer.isView(e)?null:"function"==typeof e.getBoundary?"multipart/form-data;boundary="+e.getBoundary():e instanceof y?null:"text/plain;charset=UTF-8"}function N(e){const t=e.body;return null===t?0:U(t)?t.size:Buffer.isBuffer(t)?t.length:t&&"function"==typeof t.getLengthSync&&(t._lengthRetrievers&&0==t._lengthRetrievers.length||t.hasKnownLength&&t.hasKnownLength())?t.getLengthSync():null}L.prototype={get body(){return this[G].body},get bodyUsed(){return this[G].disturbed},arrayBuffer(){return x.call(this).then((function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}))},blob(){let e=this.headers&&this.headers.get("content-type")||"";return x.call(this).then((function(t){return Object.assign(new A([],{type:e.toLowerCase()}),{[R]:t})}))},json(){var e=this;return x.call(this).then((function(t){try{return JSON.parse(t.toString())}catch(t){return L.Promise.reject(new k(`invalid json response body at ${e.url} reason: ${t.message}`,"invalid-json"))}}))},text(){return x.call(this).then((function(e){return e.toString()}))},buffer(){return x.call(this)},textConverted(){var e=this;return x.call(this).then((function(t){return function(e,t){if("function"!=typeof C)throw new Error("The package `encoding` must be installed to use the textConverted() function");const r=t.get("content-type");let o,s,n="utf-8";r&&(o=/charset=([^;]*)/i.exec(r));s=e.slice(0,1024).toString(),!o&&s&&(o=/<meta.+?charset=(['"])(.+?)\1/i.exec(s));!o&&s&&(o=/<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(s),o||(o=/<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(s),o&&o.pop()),o&&(o=/charset=(.*)/i.exec(o.pop())));!o&&s&&(o=/<\?xml.+?encoding=(['"])(.+?)\1/i.exec(s));o&&(n=o.pop(),"gb2312"!==n&&"gbk"!==n||(n="gb18030"));return C(e,"UTF-8",n).toString()}(t,e.headers)}))}},Object.defineProperties(L.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}}),L.mixIn=function(e){for(const t of Object.getOwnPropertyNames(L.prototype))if(!(t in e)){const r=Object.getOwnPropertyDescriptor(L.prototype,t);Object.defineProperty(e,t,r)}},L.Promise=global.Promise;const q=/[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/,M=/[^\t\x20-\x7e\x80-\xff]/;function B(e){if(e=""+e,q.test(e)||""===e)throw new TypeError(e+" is not a legal HTTP header name")}function H(e){if(e=""+e,M.test(e))throw new TypeError(e+" is not a legal HTTP header value")}function $(e,t){t=t.toLowerCase();for(const r in e)if(r.toLowerCase()===t)return r}const W=Symbol("map");class z{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(this[W]=Object.create(null),e instanceof z){const t=e.raw(),r=Object.keys(t);for(const e of r)for(const r of t[e])this.append(e,r)}else if(null==e);else{if("object"!=typeof e)throw new TypeError("Provided initializer must be an object");{const t=e[Symbol.iterator];if(null!=t){if("function"!=typeof t)throw new TypeError("Header pairs must be iterable");const r=[];for(const t of e){if("object"!=typeof t||"function"!=typeof t[Symbol.iterator])throw new TypeError("Each header pair must be iterable");r.push(Array.from(t))}for(const e of r){if(2!==e.length)throw new TypeError("Each header pair must be a name/value tuple");this.append(e[0],e[1])}}else for(const t of Object.keys(e)){const r=e[t];this.append(t,r)}}}}get(e){B(e=""+e);const t=$(this[W],e);return void 0===t?null:this[W][t].join(", ")}forEach(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=K(this),o=0;for(;o<r.length;){var s=r[o];const n=s[0],i=s[1];e.call(t,i,n,this),r=K(this),o++}}set(e,t){t=""+t,B(e=""+e),H(t);const r=$(this[W],e);this[W][void 0!==r?r:e]=[t]}append(e,t){t=""+t,B(e=""+e),H(t);const r=$(this[W],e);void 0!==r?this[W][r].push(t):this[W][e]=[t]}has(e){return B(e=""+e),void 0!==$(this[W],e)}delete(e){B(e=""+e);const t=$(this[W],e);void 0!==t&&delete this[W][t]}raw(){return this[W]}keys(){return X(this,"key")}values(){return X(this,"value")}[Symbol.iterator](){return X(this,"key+value")}}function K(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"key+value";const r=Object.keys(e[W]).sort();return r.map("key"===t?function(e){return e.toLowerCase()}:"value"===t?function(t){return e[W][t].join(", ")}:function(t){return[t.toLowerCase(),e[W][t].join(", ")]})}z.prototype.entries=z.prototype[Symbol.iterator],Object.defineProperty(z.prototype,Symbol.toStringTag,{value:"Headers",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(z.prototype,{get:{enumerable:!0},forEach:{enumerable:!0},set:{enumerable:!0},append:{enumerable:!0},has:{enumerable:!0},delete:{enumerable:!0},keys:{enumerable:!0},values:{enumerable:!0},entries:{enumerable:!0}});const V=Symbol("internal");function X(e,t){const r=Object.create(J);return r[V]={target:e,kind:t,index:0},r}const J=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==J)throw new TypeError("Value of `this` is not a HeadersIterator");var e=this[V];const t=e.target,r=e.kind,o=e.index,s=K(t,r);return o>=s.length?{value:void 0,done:!0}:(this[V].index=o+1,{value:s[o],done:!1})}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));function Z(e){const t=Object.assign({__proto__:null},e[W]),r=$(e[W],"Host");return void 0!==r&&(t[r]=t[r][0]),t}Object.defineProperty(J,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});const Y=Symbol("Response internals"),Q=b.STATUS_CODES;class ee{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};L.call(this,e,t);const r=t.status||200,o=new z(t.headers);if(null!=e&&!o.has("Content-Type")){const t=j(e);t&&o.append("Content-Type",t)}this[Y]={url:t.url,status:r,statusText:t.statusText||Q[r],headers:o,counter:t.counter}}get url(){return this[Y].url||""}get status(){return this[Y].status}get ok(){return this[Y].status>=200&&this[Y].status<300}get redirected(){return this[Y].counter>0}get statusText(){return this[Y].statusText}get headers(){return this[Y].headers}clone(){return new ee(D(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}L.mixIn(ee.prototype),Object.defineProperties(ee.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}}),Object.defineProperty(ee.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});const te=Symbol("Request internals"),re=v.parse,oe=v.format,se="destroy"in y.Readable.prototype;function ne(e){return"object"==typeof e&&"object"==typeof e[te]}class ie{constructor(e){let t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};ne(e)?t=re(e.url):(t=e&&e.href?re(e.href):re(""+e),e={});let o=r.method||e.method||"GET";if(o=o.toUpperCase(),(null!=r.body||ne(e)&&null!==e.body)&&("GET"===o||"HEAD"===o))throw new TypeError("Request with GET/HEAD method cannot have body");let s=null!=r.body?r.body:ne(e)&&null!==e.body?D(e):null;L.call(this,s,{timeout:r.timeout||e.timeout||0,size:r.size||e.size||0});const n=new z(r.headers||e.headers||{});if(null!=s&&!n.has("Content-Type")){const e=j(s);e&&n.append("Content-Type",e)}let i=ne(e)?e.signal:null;if("signal"in r&&(i=r.signal),null!=i&&!function(e){const t=e&&"object"==typeof e&&Object.getPrototypeOf(e);return!(!t||"AbortSignal"!==t.constructor.name)}(i))throw new TypeError("Expected signal to be an instanceof AbortSignal");this[te]={method:o,redirect:r.redirect||e.redirect||"follow",headers:n,parsedURL:t,signal:i},this.follow=void 0!==r.follow?r.follow:void 0!==e.follow?e.follow:20,this.compress=void 0!==r.compress?r.compress:void 0===e.compress||e.compress,this.counter=r.counter||e.counter||0,this.agent=r.agent||e.agent}get method(){return this[te].method}get url(){return oe(this[te].parsedURL)}get headers(){return this[te].headers}get redirect(){return this[te].redirect}get signal(){return this[te].signal}clone(){return new ie(this)}}function ae(e){Error.call(this,e),this.type="aborted",this.message=e,Error.captureStackTrace(this,this.constructor)}L.mixIn(ie.prototype),Object.defineProperty(ie.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(ie.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}}),ae.prototype=Object.create(Error.prototype),ae.prototype.constructor=ae,ae.prototype.name="AbortError";const ce=y.PassThrough,ue=v.resolve;function pe(e,t){if(!pe.Promise)throw new Error("native promise missing, set fetch.Promise to your favorite alternative");return L.Promise=pe.Promise,new pe.Promise((function(r,o){const s=new ie(e,t),n=function(e){const t=e[te].parsedURL,r=new z(e[te].headers);if(r.has("Accept")||r.set("Accept","*/*"),!t.protocol||!t.hostname)throw new TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(t.protocol))throw new TypeError("Only HTTP(S) protocols are supported");if(e.signal&&e.body instanceof y.Readable&&!se)throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let o=null;if(null==e.body&&/^(POST|PUT)$/i.test(e.method)&&(o="0"),null!=e.body){const t=N(e);"number"==typeof t&&(o=String(t))}o&&r.set("Content-Length",o),r.has("User-Agent")||r.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"),e.compress&&!r.has("Accept-Encoding")&&r.set("Accept-Encoding","gzip,deflate");let s=e.agent;return"function"==typeof s&&(s=s(t)),r.has("Connection")||s||r.set("Connection","close"),Object.assign({},t,{method:e.method,headers:Z(r),agent:s})}(s),i=("https:"===n.protocol?_:b).request,a=s.signal;let c=null;const u=function(){let e=new ae("The user aborted a request.");o(e),s.body&&s.body instanceof y.Readable&&s.body.destroy(e),c&&c.body&&c.body.emit("error",e)};if(a&&a.aborted)return void u();const p=function(){u(),m()},l=i(n);let d;function m(){l.abort(),a&&a.removeEventListener("abort",p),clearTimeout(d)}a&&a.addEventListener("abort",p),s.timeout&&l.once("socket",(function(e){d=setTimeout((function(){o(new k("network timeout at: "+s.url,"request-timeout")),m()}),s.timeout)})),l.on("error",(function(e){o(new k(`request to ${s.url} failed, reason: ${e.message}`,"system",e)),m()})),l.on("response",(function(e){clearTimeout(d);const t=function(e){const t=new z;for(const r of Object.keys(e))if(!q.test(r))if(Array.isArray(e[r]))for(const o of e[r])M.test(o)||(void 0===t[W][r]?t[W][r]=[o]:t[W][r].push(o));else M.test(e[r])||(t[W][r]=[e[r]]);return t}(e.headers);if(pe.isRedirect(e.statusCode)){const n=t.get("Location"),i=null===n?null:ue(s.url,n);switch(s.redirect){case"error":return o(new k("uri requested responds with a redirect, redirect mode is set to error: "+s.url,"no-redirect")),void m();case"manual":if(null!==i)try{t.set("Location",i)}catch(e){o(e)}break;case"follow":if(null===i)break;if(s.counter>=s.follow)return o(new k("maximum redirect reached at: "+s.url,"max-redirect")),void m();const n={headers:new z(s.headers),follow:s.follow,counter:s.counter+1,agent:s.agent,compress:s.compress,method:s.method,body:s.body,signal:s.signal,timeout:s.timeout,size:s.size};return 303!==e.statusCode&&s.body&&null===N(s)?(o(new k("Cannot follow redirect with body being a readable stream","unsupported-redirect")),void m()):(303!==e.statusCode&&(301!==e.statusCode&&302!==e.statusCode||"POST"!==s.method)||(n.method="GET",n.body=void 0,n.headers.delete("content-length")),r(pe(new ie(i,n))),void m())}}e.once("end",(function(){a&&a.removeEventListener("abort",p)}));let n=e.pipe(new ce);const i={url:s.url,status:e.statusCode,statusText:e.statusMessage,headers:t,size:s.size,timeout:s.timeout,counter:s.counter},u=t.get("Content-Encoding");if(!s.compress||"HEAD"===s.method||null===u||204===e.statusCode||304===e.statusCode)return c=new ee(n,i),void r(c);const l={flush:P.Z_SYNC_FLUSH,finishFlush:P.Z_SYNC_FLUSH};if("gzip"==u||"x-gzip"==u)return n=n.pipe(P.createGunzip(l)),c=new ee(n,i),void r(c);if("deflate"!=u&&"x-deflate"!=u){if("br"==u&&"function"==typeof P.createBrotliDecompress)return n=n.pipe(P.createBrotliDecompress()),c=new ee(n,i),void r(c);c=new ee(n,i),r(c)}else{e.pipe(new ce).once("data",(function(e){n=8==(15&e[0])?n.pipe(P.createInflate()):n.pipe(P.createInflateRaw()),c=new ee(n,i),r(c)}))}})),function(e,t){const r=t.body;null===r?e.end():U(r)?r.stream().pipe(e):Buffer.isBuffer(r)?(e.write(r),e.end()):r.pipe(e)}(l,s)}))}pe.isRedirect=function(e){return 301===e||302===e||303===e||307===e||308===e},pe.Promise=global.Promise;var le=pe;class de extends Error{constructor(e){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="Deprecation"}}var me=r(28);const he=r.n(me)()(e=>console.warn(e));class fe extends Error{constructor(e,t,r){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="HttpError",this.status=t,Object.defineProperty(this,"code",{get:()=>(he(new de("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")),t)}),this.headers=r.headers||{};const o=Object.assign({},r.request);r.request.headers.authorization&&(o.headers=Object.assign({},r.request.headers,{authorization:r.request.headers.authorization.replace(/ .*$/," [REDACTED]")})),o.url=o.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=o}}function ge(e){(i(e.body)||Array.isArray(e.body))&&(e.body=JSON.stringify(e.body));let t,r,o={};return(e.request&&e.request.fetch||le)(e.url,Object.assign({method:e.method,body:e.body,headers:e.headers,redirect:e.redirect},e.request)).then(s=>{r=s.url,t=s.status;for(const e of s.headers)o[e[0]]=e[1];if(204===t||205===t)return;if("HEAD"===e.method){if(t<400)return;throw new fe(s.statusText,t,{headers:o,request:e})}if(304===t)throw new fe("Not modified",t,{headers:o,request:e});if(t>=400)return s.text().then(r=>{const s=new fe(r,t,{headers:o,request:e});try{let e=JSON.parse(s.message);Object.assign(s,e);let t=e.errors;s.message=s.message+": "+t.map(JSON.stringify).join(", ")}catch(e){}throw s});const n=s.headers.get("content-type");return/application\/json/.test(n)?s.json():!n||/^text\/|charset=utf-8$/.test(n)?s.text():function(e){return e.arrayBuffer()}(s)}).then(e=>({status:t,url:r,headers:o,data:e})).catch(t=>{if(t instanceof fe)throw t;throw new fe(t.message,500,{headers:o,request:e})})}const Ee=function e(t,r){const o=t.defaults(r);return Object.assign((function(t,r){const s=o.merge(t,r);if(!s.request||!s.request.hook)return ge(o.parse(s));const n=(e,t)=>ge(o.parse(o.merge(e,t)));return Object.assign(n,{endpoint:o,defaults:e.bind(null,o)}),s.request.hook(n,s)}),{endpoint:o,defaults:e.bind(null,o)})}(T,{headers:{"user-agent":"octokit-request.js/5.4.5 "+o()}});class we extends Error{constructor(e,t){super(t.data.errors[0].message),Object.assign(this,t.data),this.name="GraphqlError",this.request=e,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}const Te=["method","baseUrl","url","headers","request","query","mediaType"];function ye(e,t){const r=e.defaults(t);return Object.assign((e,t)=>function(e,t,r){r=r="string"==typeof t?Object.assign({query:t},r):t;const o=Object.keys(r).reduce((e,t)=>Te.includes(t)?(e[t]=r[t],e):(e.variables||(e.variables={}),e.variables[t]=r[t],e),{});return e(o).then(e=>{if(e.data.errors)throw new we(o,{data:e.data});return e.data.data})}(r,e,t),{defaults:ye.bind(null,r),endpoint:Ee.endpoint})}ye(Ee,{headers:{"user-agent":"octokit-graphql.js/4.5.1 "+o()},method:"POST",url:"/graphql"});async function be(e){const t=3===e.split(/\./).length?"app":/^v\d+\./.test(e)?"installation":"oauth";return{type:"token",token:e,tokenType:t}}async function ve(e,t,r,o){const s=t.endpoint.merge(r,o);return s.headers.authorization=function(e){return 3===e.split(/\./).length?"bearer "+e:"token "+e}(e),t(s)}class _e{constructor(e={}){const t=new s.Collection,r={baseUrl:Ee.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,"request")}),mediaType:{previews:[],format:""}};var n;if(r.headers["user-agent"]=[e.userAgent,"octokit-core.js/2.5.4 "+o()].filter(Boolean).join(" "),e.baseUrl&&(r.baseUrl=e.baseUrl),e.previews&&(r.mediaType.previews=e.previews),e.timeZone&&(r.headers["time-zone"]=e.timeZone),this.request=Ee.defaults(r),this.graphql=(n=this.request,ye(n,{method:"POST",url:"/graphql"})).defaults({...r,baseUrl:r.baseUrl.replace(/\/api\/v3$/,"/api")}),this.log=Object.assign({debug:()=>{},info:()=>{},warn:console.warn.bind(console),error:console.error.bind(console)},e.log),this.hook=t,e.authStrategy){const r=e.authStrategy(Object.assign({request:this.request},e.auth));t.wrap("request",r.hook),this.auth=r}else if(e.auth){const r=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if("string"!=typeof e)throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(be.bind(null,e),{hook:ve.bind(null,e)})}(e.auth);t.wrap("request",r.hook),this.auth=r}else this.auth=async()=>({type:"unauthenticated"});this.constructor.plugins.forEach(t=>{Object.assign(this,t(this,e))})}static defaults(e){return class extends(this){constructor(...t){const r=t[0]||{};super(Object.assign({},e,r,r.userAgent&&e.userAgent?{userAgent:`${r.userAgent} ${e.userAgent}`}:null))}}}static plugin(e,...t){var r;e instanceof Array&&console.warn(["Passing an array of plugins to Octokit.plugin() has been deprecated.","Instead of:","  Octokit.plugin([plugin1, plugin2, ...])","Use:","  Octokit.plugin(plugin1, plugin2, ...)"].join("\n"));const o=this.plugins;let s=[...e instanceof Array?e:[e],...t];return(r=class extends(this){}).plugins=o.concat(s.filter(e=>!o.includes(e))),r}}_e.VERSION="2.5.4",_e.plugins=[]}]);
\ No newline at end of file
