diff --git a/README.md b/README.md index 9571314..5c27e01 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The one label from the `allowed` or `allowed_multiple` list that was located. I ## Example usage ```yaml -uses: zwaldowski/match-label-action@v3 +uses: zwaldowski/match-label-action@v4 with: allowed: major, minor, patch ``` diff --git a/action.yml b/action.yml index 76c5f09..dae40d2 100644 --- a/action.yml +++ b/action.yml @@ -20,7 +20,7 @@ outputs: match: description: 'The matched label, if found. Comma-separated if multiple.' runs: - using: 'node12' + using: 'node16' main: 'dist/index.js' branding: icon: 'hash' diff --git a/dist/index.js b/dist/index.js index 21c696a..ec4268b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -276,13 +276,9 @@ function exportVariable(name, val) { process.env[name] = convertedVal; const filePath = process.env['GITHUB_ENV'] || ''; if (filePath) { - const delimiter = '_GitHubActionsFileCommandDelimeter_'; - const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; - file_command_1.issueCommand('ENV', commandValue); - } - else { - command_1.issueCommand('set-env', { name }, convertedVal); + return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val)); } + command_1.issueCommand('set-env', { name }, convertedVal); } exports.exportVariable = exportVariable; /** @@ -300,7 +296,7 @@ exports.setSecret = setSecret; function addPath(inputPath) { const filePath = process.env['GITHUB_PATH'] || ''; if (filePath) { - file_command_1.issueCommand('PATH', inputPath); + file_command_1.issueFileCommand('PATH', inputPath); } else { command_1.issueCommand('add-path', {}, inputPath); @@ -340,7 +336,10 @@ function getMultilineInput(name, options) { const inputs = getInput(name, options) .split('\n') .filter(x => x !== ''); - return inputs; + if (options && options.trimWhitespace === false) { + return inputs; + } + return inputs.map(input => input.trim()); } exports.getMultilineInput = getMultilineInput; /** @@ -373,8 +372,12 @@ exports.getBooleanInput = getBooleanInput; */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function setOutput(name, value) { + const filePath = process.env['GITHUB_OUTPUT'] || ''; + if (filePath) { + return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value)); + } process.stdout.write(os.EOL); - command_1.issueCommand('set-output', { name }, value); + command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value)); } exports.setOutput = setOutput; /** @@ -503,7 +506,11 @@ exports.group = group; */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function saveState(name, value) { - command_1.issueCommand('save-state', { name }, value); + const filePath = process.env['GITHUB_STATE'] || ''; + if (filePath) { + return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value)); + } + command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value)); } exports.saveState = saveState; /** @@ -522,6 +529,23 @@ function getIDToken(aud) { }); } exports.getIDToken = getIDToken; +/** + * Summary exports + */ +var summary_1 = __nccwpck_require__(1327); +Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); +/** + * @deprecated use core.summary + */ +var summary_2 = __nccwpck_require__(1327); +Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); +/** + * Path exports + */ +var path_utils_1 = __nccwpck_require__(2981); +Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); +Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); +Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); //# sourceMappingURL=core.js.map /***/ }), @@ -552,13 +576,14 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.issueCommand = void 0; +exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; // We use any as a valid input type /* eslint-disable @typescript-eslint/no-explicit-any */ const fs = __importStar(__nccwpck_require__(5747)); const os = __importStar(__nccwpck_require__(2087)); +const uuid_1 = __nccwpck_require__(9521); const utils_1 = __nccwpck_require__(5278); -function issueCommand(command, message) { +function issueFileCommand(command, message) { const filePath = process.env[`GITHUB_${command}`]; if (!filePath) { throw new Error(`Unable to find environment variable for file command ${command}`); @@ -570,7 +595,22 @@ function issueCommand(command, message) { encoding: 'utf8' }); } -exports.issueCommand = issueCommand; +exports.issueFileCommand = issueFileCommand; +function prepareKeyValueMessage(key, value) { + const delimiter = `ghadelimiter_${uuid_1.v4()}`; + const convertedValue = utils_1.toCommandValue(value); + // These should realistically never happen, but just in case someone finds a + // way to exploit uuid generation let's not allow keys or values that contain + // the delimiter. + if (key.includes(delimiter)) { + throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); + } + if (convertedValue.includes(delimiter)) { + throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); + } + return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; +} +exports.prepareKeyValueMessage = prepareKeyValueMessage; //# sourceMappingURL=file-command.js.map /***/ }), @@ -591,8 +631,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OidcClient = void 0; -const http_client_1 = __nccwpck_require__(9925); -const auth_1 = __nccwpck_require__(3702); +const http_client_1 = __nccwpck_require__(1404); +const auth_1 = __nccwpck_require__(6758); const core_1 = __nccwpck_require__(2186); class OidcClient { static createHttpClient(allowRetry = true, maxRetry = 10) { @@ -659,6 +699,361 @@ exports.OidcClient = OidcClient; /***/ }), +/***/ 2981: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0; +const path = __importStar(__nccwpck_require__(5622)); +/** + * toPosixPath converts the given path to the posix form. On Windows, \\ will be + * replaced with /. + * + * @param pth. Path to transform. + * @return string Posix path. + */ +function toPosixPath(pth) { + return pth.replace(/[\\]/g, '/'); +} +exports.toPosixPath = toPosixPath; +/** + * toWin32Path converts the given path to the win32 form. On Linux, / will be + * replaced with \\. + * + * @param pth. Path to transform. + * @return string Win32 path. + */ +function toWin32Path(pth) { + return pth.replace(/[/]/g, '\\'); +} +exports.toWin32Path = toWin32Path; +/** + * toPlatformPath converts the given path to a platform-specific path. It does + * this by replacing instances of / and \ with the platform-specific path + * separator. + * + * @param pth The path to platformize. + * @return string The platform-specific path. + */ +function toPlatformPath(pth) { + return pth.replace(/[/\\]/g, path.sep); +} +exports.toPlatformPath = toPlatformPath; +//# sourceMappingURL=path-utils.js.map + +/***/ }), + +/***/ 1327: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; +const os_1 = __nccwpck_require__(2087); +const fs_1 = __nccwpck_require__(5747); +const { access, appendFile, writeFile } = fs_1.promises; +exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; +exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary'; +class Summary { + constructor() { + this._buffer = ''; + } + /** + * Finds the summary file path from the environment, rejects if env var is not found or file does not exist + * Also checks r/w permissions. + * + * @returns step summary file path + */ + filePath() { + return __awaiter(this, void 0, void 0, function* () { + if (this._filePath) { + return this._filePath; + } + const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; + if (!pathFromEnv) { + throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); + } + try { + yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); + } + catch (_a) { + throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); + } + this._filePath = pathFromEnv; + return this._filePath; + }); + } + /** + * Wraps content in an HTML tag, adding any HTML attributes + * + * @param {string} tag HTML tag to wrap + * @param {string | null} content content within the tag + * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add + * + * @returns {string} content wrapped in HTML element + */ + wrap(tag, content, attrs = {}) { + const htmlAttrs = Object.entries(attrs) + .map(([key, value]) => ` ${key}="${value}"`) + .join(''); + if (!content) { + return `<${tag}${htmlAttrs}>`; + } + return `<${tag}${htmlAttrs}>${content}`; + } + /** + * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. + * + * @param {SummaryWriteOptions} [options] (optional) options for write operation + * + * @returns {Promise} summary instance + */ + write(options) { + return __awaiter(this, void 0, void 0, function* () { + const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); + const filePath = yield this.filePath(); + const writeFunc = overwrite ? writeFile : appendFile; + yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); + return this.emptyBuffer(); + }); + } + /** + * Clears the summary buffer and wipes the summary file + * + * @returns {Summary} summary instance + */ + clear() { + return __awaiter(this, void 0, void 0, function* () { + return this.emptyBuffer().write({ overwrite: true }); + }); + } + /** + * Returns the current summary buffer as a string + * + * @returns {string} string of summary buffer + */ + stringify() { + return this._buffer; + } + /** + * If the summary buffer is empty + * + * @returns {boolen} true if the buffer is empty + */ + isEmptyBuffer() { + return this._buffer.length === 0; + } + /** + * Resets the summary buffer without writing to summary file + * + * @returns {Summary} summary instance + */ + emptyBuffer() { + this._buffer = ''; + return this; + } + /** + * Adds raw text to the summary buffer + * + * @param {string} text content to add + * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) + * + * @returns {Summary} summary instance + */ + addRaw(text, addEOL = false) { + this._buffer += text; + return addEOL ? this.addEOL() : this; + } + /** + * Adds the operating system-specific end-of-line marker to the buffer + * + * @returns {Summary} summary instance + */ + addEOL() { + return this.addRaw(os_1.EOL); + } + /** + * Adds an HTML codeblock to the summary buffer + * + * @param {string} code content to render within fenced code block + * @param {string} lang (optional) language to syntax highlight code + * + * @returns {Summary} summary instance + */ + addCodeBlock(code, lang) { + const attrs = Object.assign({}, (lang && { lang })); + const element = this.wrap('pre', this.wrap('code', code), attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML list to the summary buffer + * + * @param {string[]} items list of items to render + * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) + * + * @returns {Summary} summary instance + */ + addList(items, ordered = false) { + const tag = ordered ? 'ol' : 'ul'; + const listItems = items.map(item => this.wrap('li', item)).join(''); + const element = this.wrap(tag, listItems); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML table to the summary buffer + * + * @param {SummaryTableCell[]} rows table rows + * + * @returns {Summary} summary instance + */ + addTable(rows) { + const tableBody = rows + .map(row => { + const cells = row + .map(cell => { + if (typeof cell === 'string') { + return this.wrap('td', cell); + } + const { header, data, colspan, rowspan } = cell; + const tag = header ? 'th' : 'td'; + const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); + return this.wrap(tag, data, attrs); + }) + .join(''); + return this.wrap('tr', cells); + }) + .join(''); + const element = this.wrap('table', tableBody); + return this.addRaw(element).addEOL(); + } + /** + * Adds a collapsable HTML details element to the summary buffer + * + * @param {string} label text for the closed state + * @param {string} content collapsable content + * + * @returns {Summary} summary instance + */ + addDetails(label, content) { + const element = this.wrap('details', this.wrap('summary', label) + content); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML image tag to the summary buffer + * + * @param {string} src path to the image you to embed + * @param {string} alt text description of the image + * @param {SummaryImageOptions} options (optional) addition image attributes + * + * @returns {Summary} summary instance + */ + addImage(src, alt, options) { + const { width, height } = options || {}; + const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); + const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML section heading element + * + * @param {string} text heading text + * @param {number | string} [level=1] (optional) the heading level, default: 1 + * + * @returns {Summary} summary instance + */ + addHeading(text, level) { + const tag = `h${level}`; + const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) + ? tag + : 'h1'; + const element = this.wrap(allowedTag, text); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML thematic break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addSeparator() { + const element = this.wrap('hr', null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML line break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addBreak() { + const element = this.wrap('br', null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML blockquote to the summary buffer + * + * @param {string} text quote text + * @param {string} cite (optional) citation url + * + * @returns {Summary} summary instance + */ + addQuote(text, cite) { + const attrs = Object.assign({}, (cite && { cite })); + const element = this.wrap('blockquote', text, attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML anchor tag to the summary buffer + * + * @param {string} text link text/content + * @param {string} href hyperlink + * + * @returns {Summary} summary instance + */ + addLink(text, href) { + const element = this.wrap('a', text, { href }); + return this.addRaw(element).addEOL(); + } +} +const _summary = new Summary(); +/** + * @deprecated use `core.summary` + */ +exports.markdownSummary = _summary; +exports.summary = _summary; +//# sourceMappingURL=summary.js.map + +/***/ }), + /***/ 5278: /***/ ((__unused_webpack_module, exports) => { @@ -706,250 +1101,134 @@ exports.toCommandProperties = toCommandProperties; /***/ }), -/***/ 4087: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +/***/ 6758: +/***/ (function(__unused_webpack_module, exports) { "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -const fs_1 = __nccwpck_require__(5747); -const os_1 = __nccwpck_require__(2087); -class Context { - /** - * Hydrate the context from the environment - */ - constructor() { - this.payload = {}; - if (process.env.GITHUB_EVENT_PATH) { - if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) { - this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' })); - } - else { - const path = process.env.GITHUB_EVENT_PATH; - process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); - } +exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; +class BasicCredentialHandler { + constructor(username, password) { + this.username = username; + this.password = password; + } + prepareRequest(options) { + if (!options.headers) { + throw Error('The request has no headers'); } - 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; + options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; } - get issue() { - const payload = this.payload; - return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); + // This handler cannot handle 401 + canHandleAuthentication() { + return false; } - get repo() { - if (process.env.GITHUB_REPOSITORY) { - const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); - return { owner, repo }; + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); + } +} +exports.BasicCredentialHandler = BasicCredentialHandler; +class BearerCredentialHandler { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!options.headers) { + throw Error('The request has no headers'); } - if (this.payload.repository) { - return { - owner: this.payload.repository.owner.login, - repo: this.payload.repository.name - }; + options.headers['Authorization'] = `Bearer ${this.token}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); + } +} +exports.BearerCredentialHandler = BearerCredentialHandler; +class PersonalAccessTokenCredentialHandler { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!options.headers) { + throw Error('The request has no headers'); } - throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); + options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); } } -exports.Context = Context; -//# sourceMappingURL=context.js.map +exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; +//# sourceMappingURL=auth.js.map /***/ }), -/***/ 5438: +/***/ 1404: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts -const graphql_1 = __nccwpck_require__(8467); -const rest_1 = __nccwpck_require__(9351); -const Context = __importStar(__nccwpck_require__(4087)); -const httpClient = __importStar(__nccwpck_require__(9925)); -// We need this in order to extend Octokit -rest_1.Octokit.prototype = new rest_1.Octokit(); -exports.context = new Context.Context(); -class GitHub extends rest_1.Octokit { - constructor(token, opts) { - super(GitHub.getOctokitOptions(GitHub.disambiguate(token, opts))); - this.graphql = GitHub.getGraphQL(GitHub.disambiguate(token, opts)); - } - /** - * Disambiguates the constructor overload parameters - */ - static disambiguate(token, opts) { - return [ - typeof token === 'string' ? token : '', - typeof token === 'object' ? token : opts || {} - ]; - } - static getOctokitOptions(args) { - const token = args[0]; - const options = Object.assign({}, args[1]); // Shallow clone - don't mutate the object provided by the caller - // Base URL - GHES or Dotcom - options.baseUrl = options.baseUrl || this.getApiBaseUrl(); - // Auth - const auth = GitHub.getAuthString(token, options); - if (auth) { - options.auth = auth; - } - // Proxy - const agent = GitHub.getProxyAgent(options.baseUrl, options); - if (agent) { - // Shallow clone - don't mutate the object provided by the caller - options.request = options.request ? Object.assign({}, options.request) : {}; - // Set the agent - options.request.agent = agent; - } - return options; - } - static getGraphQL(args) { - const defaults = {}; - defaults.baseUrl = this.getGraphQLBaseUrl(); - const token = args[0]; - const options = args[1]; - // Authorization - const auth = this.getAuthString(token, options); - if (auth) { - defaults.headers = { - authorization: auth - }; - } - // Proxy - const agent = GitHub.getProxyAgent(defaults.baseUrl, options); - if (agent) { - defaults.request = { agent }; - } - return graphql_1.graphql.defaults(defaults); - } - static getAuthString(token, options) { - // Validate args - if (!token && !options.auth) { - throw new Error('Parameter token or opts.auth is required'); - } - else if (token && options.auth) { - throw new Error('Parameters token and opts.auth may not both be specified'); - } - return typeof options.auth === 'string' ? options.auth : `token ${token}`; - } - static getProxyAgent(destinationUrl, options) { - var _a; - if (!((_a = options.request) === null || _a === void 0 ? void 0 : _a.agent)) { - if (httpClient.getProxyUrl(destinationUrl)) { - const hc = new httpClient.HttpClient(); - return hc.getAgent(destinationUrl); - } - } - return undefined; - } - static getApiBaseUrl() { - return process.env['GITHUB_API_URL'] || 'https://api.github.com'; - } - static getGraphQLBaseUrl() { - let url = process.env['GITHUB_GRAPHQL_URL'] || 'https://api.github.com/graphql'; - // Shouldn't be a trailing slash, but remove if so - if (url.endsWith('/')) { - url = url.substr(0, url.length - 1); - } - // Remove trailing "/graphql" - if (url.toUpperCase().endsWith('/GRAPHQL')) { - url = url.substr(0, url.length - '/graphql'.length); - } - return url; - } -} -exports.GitHub = GitHub; -//# sourceMappingURL=github.js.map - -/***/ }), - -/***/ 3702: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -class BasicCredentialHandler { - constructor(username, password) { - this.username = username; - this.password = password; - } - prepareRequest(options) { - options.headers['Authorization'] = - 'Basic ' + - Buffer.from(this.username + ':' + this.password).toString('base64'); - } - // This handler cannot handle 401 - canHandleAuthentication(response) { - return false; - } - handleAuthentication(httpClient, requestInfo, objs) { - return null; - } -} -exports.BasicCredentialHandler = BasicCredentialHandler; -class BearerCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - options.headers['Authorization'] = 'Bearer ' + this.token; - } - // This handler cannot handle 401 - canHandleAuthentication(response) { - return false; - } - handleAuthentication(httpClient, requestInfo, objs) { - return null; - } -} -exports.BearerCredentialHandler = BearerCredentialHandler; -class PersonalAccessTokenCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - options.headers['Authorization'] = - 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); - } - // This handler cannot handle 401 - canHandleAuthentication(response) { - return false; - } - handleAuthentication(httpClient, requestInfo, objs) { - return null; - } -} -exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; - - -/***/ }), - -/***/ 9925: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - +/* eslint-disable @typescript-eslint/no-explicit-any */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -const http = __nccwpck_require__(8605); -const https = __nccwpck_require__(7211); -const pm = __nccwpck_require__(6443); -let tunnel; +exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; +const http = __importStar(__nccwpck_require__(8605)); +const https = __importStar(__nccwpck_require__(7211)); +const pm = __importStar(__nccwpck_require__(2843)); +const tunnel = __importStar(__nccwpck_require__(4294)); var HttpCodes; (function (HttpCodes) { HttpCodes[HttpCodes["OK"] = 200] = "OK"; @@ -994,7 +1273,7 @@ var MediaTypes; * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com */ function getProxyUrl(serverUrl) { - let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); return proxyUrl ? proxyUrl.href : ''; } exports.getProxyUrl = getProxyUrl; @@ -1027,20 +1306,22 @@ class HttpClientResponse { this.message = message; } readBody() { - return new Promise(async (resolve, reject) => { - let output = Buffer.alloc(0); - this.message.on('data', (chunk) => { - output = Buffer.concat([output, chunk]); - }); - this.message.on('end', () => { - resolve(output.toString()); - }); + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + })); }); } } exports.HttpClientResponse = HttpClientResponse; function isHttps(requestUrl) { - let parsedUrl = new URL(requestUrl); + const parsedUrl = new URL(requestUrl); return parsedUrl.protocol === 'https:'; } exports.isHttps = isHttps; @@ -1083,141 +1364,169 @@ class HttpClient { } } options(requestUrl, additionalHeaders) { - return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + return __awaiter(this, void 0, void 0, function* () { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + }); } get(requestUrl, additionalHeaders) { - return this.request('GET', requestUrl, null, additionalHeaders || {}); + return __awaiter(this, void 0, void 0, function* () { + return this.request('GET', requestUrl, null, additionalHeaders || {}); + }); } del(requestUrl, additionalHeaders) { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + return __awaiter(this, void 0, void 0, function* () { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + }); } post(requestUrl, data, additionalHeaders) { - return this.request('POST', requestUrl, data, additionalHeaders || {}); + return __awaiter(this, void 0, void 0, function* () { + return this.request('POST', requestUrl, data, additionalHeaders || {}); + }); } patch(requestUrl, data, additionalHeaders) { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + return __awaiter(this, void 0, void 0, function* () { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + }); } put(requestUrl, data, additionalHeaders) { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); + return __awaiter(this, void 0, void 0, function* () { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + }); } head(requestUrl, additionalHeaders) { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + return __awaiter(this, void 0, void 0, function* () { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + }); } sendStream(verb, requestUrl, stream, additionalHeaders) { - return this.request(verb, requestUrl, stream, additionalHeaders); + return __awaiter(this, void 0, void 0, function* () { + return this.request(verb, requestUrl, stream, additionalHeaders); + }); } /** * Gets a typed object from an endpoint * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise */ - async getJson(requestUrl, additionalHeaders = {}) { - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - let res = await this.get(requestUrl, additionalHeaders); - return this._processResponse(res, this.requestOptions); + getJson(requestUrl, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + const res = yield this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } - async postJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.post(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); + postJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + const res = yield this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } - async putJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.put(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); + putJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + const res = yield this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } - async patchJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.patch(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); + patchJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + const res = yield this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } /** * Makes a raw http request. * All other methods such as get, post, patch, and request ultimately call this. * Prefer get, del, post and patch */ - async request(verb, requestUrl, data, headers) { - if (this._disposed) { - throw new Error('Client has already been disposed.'); - } - let parsedUrl = new URL(requestUrl); - let info = this._prepareRequest(verb, parsedUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 - ? this._maxRetries + 1 - : 1; - let numTries = 0; - let response; - while (numTries < maxTries) { - response = await this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && - response.message && - response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (let i = 0; i < this.handlers.length; i++) { - if (this.handlers[i].canHandleAuthentication(response)) { - authenticationHandler = this.handlers[i]; - break; + request(verb, requestUrl, data, headers) { + return __awaiter(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error('Client has already been disposed.'); + } + const parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + do { + response = yield this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (const handler of this.handlers) { + if (handler.canHandleAuthentication(response)) { + authenticationHandler = handler; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; } } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); + let redirectsRemaining = this._maxRedirects; + while (response.message.statusCode && + HttpRedirectCodes.includes(response.message.statusCode) && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + const parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol === 'https:' && + parsedUrl.protocol !== parsedRedirectUrl.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.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + yield response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (const header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } + } + } + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = yield this.requestRaw(info, data); + redirectsRemaining--; } - else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. + if (!response.message.statusCode || + !HttpResponseRetryCodes.includes(response.message.statusCode)) { + // If not a retry code, return immediately instead of retrying return response; } - } - let redirectsRemaining = this._maxRedirects; - while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && - this._allowRedirects && - redirectsRemaining > 0) { - const redirectUrl = response.message.headers['location']; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - let parsedRedirectUrl = new URL(redirectUrl); - if (parsedUrl.protocol == 'https:' && - parsedUrl.protocol != parsedRedirectUrl.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.'); - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - await response.readBody(); - // strip authorization header if redirected to a different hostname - if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { - for (let header in headers) { - // header names are case insensitive - if (header.toLowerCase() === 'authorization') { - delete headers[header]; - } - } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); } - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, parsedRedirectUrl, headers); - response = await this.requestRaw(info, data); - redirectsRemaining--; - } - if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { - // If not a retry code, return immediately instead of retrying - return response; - } - numTries += 1; - if (numTries < maxTries) { - await response.readBody(); - await this._performExponentialBackoff(numTries); - } - } - return response; + } while (numTries < maxTries); + return response; + }); } /** * Needs to be called if keepAlive is set to true in request options. @@ -1234,14 +1543,22 @@ class HttpClient { * @param data */ requestRaw(info, data) { - return new Promise((resolve, reject) => { - let callbackForResult = function (err, res) { - if (err) { - reject(err); + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + function callbackForResult(err, res) { + if (err) { + reject(err); + } + else if (!res) { + // If `err` is not passed, then `res` must be passed. + reject(new Error('Unknown error')); + } + else { + resolve(res); + } } - resolve(res); - }; - this.requestRawWithCallback(info, data, callbackForResult); + this.requestRawWithCallback(info, data, callbackForResult); + }); }); } /** @@ -1251,21 +1568,24 @@ class HttpClient { * @param onResult */ requestRawWithCallback(info, data, onResult) { - let socket; if (typeof data === 'string') { + if (!info.options.headers) { + info.options.headers = {}; + } info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); } let callbackCalled = false; - let handleResult = (err, res) => { + function handleResult(err, res) { if (!callbackCalled) { callbackCalled = true; onResult(err, res); } - }; - let req = info.httpModule.request(info.options, (msg) => { - let res = new HttpClientResponse(msg); - handleResult(null, res); + } + const req = info.httpModule.request(info.options, (msg) => { + const res = new HttpClientResponse(msg); + handleResult(undefined, res); }); + let socket; req.on('socket', sock => { socket = sock; }); @@ -1274,12 +1594,12 @@ class HttpClient { if (socket) { socket.end(); } - handleResult(new Error('Request timeout: ' + info.options.path), null); + handleResult(new Error(`Request timeout: ${info.options.path}`)); }); req.on('error', function (err) { // err has statusCode property // res should have headers - handleResult(err, null); + handleResult(err); }); if (data && typeof data === 'string') { req.write(data, 'utf8'); @@ -1300,7 +1620,7 @@ class HttpClient { * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com */ getAgent(serverUrl) { - let parsedUrl = new URL(serverUrl); + const parsedUrl = new URL(serverUrl); return this._getAgent(parsedUrl); } _prepareRequest(method, requestUrl, headers) { @@ -1324,21 +1644,19 @@ class HttpClient { info.options.agent = this._getAgent(info.parsedUrl); // gives handlers an opportunity to participate if (this.handlers) { - this.handlers.forEach(handler => { + for (const handler of this.handlers) { handler.prepareRequest(info.options); - }); + } } return info; } _mergeHeaders(headers) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); } return lowercaseKeys(headers || {}); } _getExistingOrDefaultHeader(additionalHeaders, header, _default) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); let clientHeader; if (this.requestOptions && this.requestOptions.headers) { clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; @@ -1347,8 +1665,8 @@ class HttpClient { } _getAgent(parsedUrl) { let agent; - let proxyUrl = pm.getProxyUrl(parsedUrl); - let useProxy = proxyUrl && proxyUrl.hostname; + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; if (this._keepAlive && useProxy) { agent = this._proxyAgent; } @@ -1356,29 +1674,22 @@ class HttpClient { agent = this._agent; } // if agent is already assigned use that agent. - if (!!agent) { + if (agent) { return agent; } const usingSsl = parsedUrl.protocol === 'https:'; let maxSockets = 100; - if (!!this.requestOptions) { + if (this.requestOptions) { maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; } - if (useProxy) { - // If using proxy, need tunnel - if (!tunnel) { - tunnel = __nccwpck_require__(4294); - } + // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. + if (proxyUrl && proxyUrl.hostname) { const agentOptions = { - maxSockets: maxSockets, + maxSockets, keepAlive: this._keepAlive, - proxy: { - ...((proxyUrl.username || proxyUrl.password) && { - proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` - }), - host: proxyUrl.hostname, - port: proxyUrl.port - } + proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + })), { host: proxyUrl.hostname, port: proxyUrl.port }) }; let tunnelAgent; const overHttps = proxyUrl.protocol === 'https:'; @@ -1393,7 +1704,7 @@ class HttpClient { } // if reusing agent across request and tunneling agent isn't assigned create a new agent if (this._keepAlive && !agent) { - const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; + const options = { keepAlive: this._keepAlive, maxSockets }; agent = usingSsl ? new https.Agent(options) : new http.Agent(options); this._agent = agent; } @@ -1412,109 +1723,117 @@ class HttpClient { return agent; } _performExponentialBackoff(retryNumber) { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); - } - static dateTimeDeserializer(key, value) { - if (typeof value === 'string') { - let a = new Date(value); - if (!isNaN(a.valueOf())) { - return a; - } - } - return value; + return __awaiter(this, void 0, void 0, function* () { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + }); } - async _processResponse(res, options) { - return new Promise(async (resolve, reject) => { - const statusCode = res.message.statusCode; - const response = { - statusCode: statusCode, - result: null, - headers: {} - }; - // not found leads to null obj returned - if (statusCode == HttpCodes.NotFound) { - resolve(response); - } - let obj; - let contents; - // get the result from the body - try { - contents = await res.readBody(); - if (contents && contents.length > 0) { - if (options && options.deserializeDates) { - obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); + _processResponse(res, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode || 0; + const response = { + statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode === HttpCodes.NotFound) { + resolve(response); + } + // get the result from the body + function dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + const a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } } - else { - obj = JSON.parse(contents); + return value; + } + let obj; + let contents; + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; } - response.result = obj; + response.headers = res.message.headers; } - response.headers = res.message.headers; - } - catch (err) { - // Invalid resource (contents not json); leaving result obj null - } - // note that 3xx redirects are handled by the http layer. - if (statusCode > 299) { - let msg; - // if exception/error in body, attempt to get better error - if (obj && obj.message) { - msg = obj.message; + catch (err) { + // Invalid resource (contents not json); leaving result obj null } - else if (contents && contents.length > 0) { - // it may be the case that the exception is in the body message as string - msg = contents; + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = `Failed request: (${statusCode})`; + } + const err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); } else { - msg = 'Failed request: (' + statusCode + ')'; + resolve(response); } - let err = new HttpClientError(msg, statusCode); - err.result = response.result; - reject(err); - } - else { - resolve(response); - } + })); }); } } exports.HttpClient = HttpClient; - +const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); +//# sourceMappingURL=index.js.map /***/ }), -/***/ 6443: +/***/ 2843: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.checkBypass = exports.getProxyUrl = void 0; function getProxyUrl(reqUrl) { - let usingSsl = reqUrl.protocol === 'https:'; - let proxyUrl; + const usingSsl = reqUrl.protocol === 'https:'; if (checkBypass(reqUrl)) { - return proxyUrl; + return undefined; } - let proxyVar; - if (usingSsl) { - proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; + const proxyVar = (() => { + if (usingSsl) { + return process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + return process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + })(); + if (proxyVar) { + return new URL(proxyVar); } else { - proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; - } - if (proxyVar) { - proxyUrl = new URL(proxyVar); + return undefined; } - return proxyUrl; } exports.getProxyUrl = getProxyUrl; function checkBypass(reqUrl) { if (!reqUrl.hostname) { return false; } - let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; if (!noProxy) { return false; } @@ -1530,12 +1849,12 @@ function checkBypass(reqUrl) { reqPort = 443; } // Format the request hostname and hostname with port - let upperReqHosts = [reqUrl.hostname.toUpperCase()]; + const upperReqHosts = [reqUrl.hostname.toUpperCase()]; if (typeof reqPort === 'number') { upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); } // Compare request host against noproxy - for (let upperNoProxyItem of noProxy + for (const upperNoProxyItem of noProxy .split(',') .map(x => x.trim().toUpperCase()) .filter(x => x)) { @@ -1546,1221 +1865,1582 @@ function checkBypass(reqUrl) { return false; } exports.checkBypass = checkBypass; - +//# sourceMappingURL=proxy.js.map /***/ }), -/***/ 334: -/***/ ((__unused_webpack_module, exports) => { +/***/ 4087: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; - Object.defineProperty(exports, "__esModule", ({ value: true })); - -const REGEX_IS_INSTALLATION_LEGACY = /^v1\./; -const REGEX_IS_INSTALLATION = /^ghs_/; -const REGEX_IS_USER_TO_SERVER = /^ghu_/; -async function auth(token) { - const isApp = token.split(/\./).length === 3; - const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); - const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); - const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; - return { - type: "token", - token: token, - tokenType - }; -} - -/** - * Prefix token for usage in the Authorization header - * - * @param token OAuth token or JSON Web Token - */ -function withAuthorizationPrefix(token) { - if (token.split(/\./).length === 3) { - return `bearer ${token}`; - } - - return `token ${token}`; -} - -async function hook(token, request, route, parameters) { - const endpoint = request.endpoint.merge(route, parameters); - endpoint.headers.authorization = withAuthorizationPrefix(token); - return request(endpoint); +const fs_1 = __nccwpck_require__(5747); +const os_1 = __nccwpck_require__(2087); +class Context { + /** + * Hydrate the context from the environment + */ + constructor() { + this.payload = {}; + if (process.env.GITHUB_EVENT_PATH) { + if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) { + this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' })); + } + else { + const path = process.env.GITHUB_EVENT_PATH; + process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); + } + } + this.eventName = process.env.GITHUB_EVENT_NAME; + this.sha = process.env.GITHUB_SHA; + this.ref = process.env.GITHUB_REF; + this.workflow = process.env.GITHUB_WORKFLOW; + this.action = process.env.GITHUB_ACTION; + this.actor = process.env.GITHUB_ACTOR; + } + get issue() { + const payload = this.payload; + return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); + } + get repo() { + if (process.env.GITHUB_REPOSITORY) { + const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); + return { owner, repo }; + } + if (this.payload.repository) { + return { + owner: this.payload.repository.owner.login, + repo: this.payload.repository.name + }; + } + throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); + } } - -const createTokenAuth = function createTokenAuth(token) { - if (!token) { - throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); - } - - if (typeof token !== "string") { - throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); - } - - token = token.replace(/^(token|bearer) +/i, ""); - return Object.assign(auth.bind(null, token), { - hook: hook.bind(null, token) - }); -}; - -exports.createTokenAuth = createTokenAuth; -//# sourceMappingURL=index.js.map - +exports.Context = Context; +//# sourceMappingURL=context.js.map /***/ }), -/***/ 9440: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +/***/ 5438: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; - +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; Object.defineProperty(exports, "__esModule", ({ value: true })); - -var isPlainObject = __nccwpck_require__(3287); -var universalUserAgent = __nccwpck_require__(5030); - -function lowercaseKeys(object) { - if (!object) { - return {}; - } - - return Object.keys(object).reduce((newObj, key) => { - newObj[key.toLowerCase()] = object[key]; - return newObj; - }, {}); -} - -function mergeDeep(defaults, options) { - const result = Object.assign({}, defaults); - Object.keys(options).forEach(key => { - if (isPlainObject.isPlainObject(options[key])) { - if (!(key in defaults)) Object.assign(result, { - [key]: options[key] - });else result[key] = mergeDeep(defaults[key], options[key]); - } else { - Object.assign(result, { - [key]: options[key] - }); +// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts +const graphql_1 = __nccwpck_require__(8467); +const rest_1 = __nccwpck_require__(9351); +const Context = __importStar(__nccwpck_require__(4087)); +const httpClient = __importStar(__nccwpck_require__(9925)); +// We need this in order to extend Octokit +rest_1.Octokit.prototype = new rest_1.Octokit(); +exports.context = new Context.Context(); +class GitHub extends rest_1.Octokit { + constructor(token, opts) { + super(GitHub.getOctokitOptions(GitHub.disambiguate(token, opts))); + this.graphql = GitHub.getGraphQL(GitHub.disambiguate(token, opts)); } - }); - return result; -} - -function removeUndefinedProperties(obj) { - for (const key in obj) { - if (obj[key] === undefined) { - delete obj[key]; + /** + * Disambiguates the constructor overload parameters + */ + static disambiguate(token, opts) { + return [ + typeof token === 'string' ? token : '', + typeof token === 'object' ? token : opts || {} + ]; + } + static getOctokitOptions(args) { + const token = args[0]; + const options = Object.assign({}, args[1]); // Shallow clone - don't mutate the object provided by the caller + // Base URL - GHES or Dotcom + options.baseUrl = options.baseUrl || this.getApiBaseUrl(); + // Auth + const auth = GitHub.getAuthString(token, options); + if (auth) { + options.auth = auth; + } + // Proxy + const agent = GitHub.getProxyAgent(options.baseUrl, options); + if (agent) { + // Shallow clone - don't mutate the object provided by the caller + options.request = options.request ? Object.assign({}, options.request) : {}; + // Set the agent + options.request.agent = agent; + } + return options; + } + static getGraphQL(args) { + const defaults = {}; + defaults.baseUrl = this.getGraphQLBaseUrl(); + const token = args[0]; + const options = args[1]; + // Authorization + const auth = this.getAuthString(token, options); + if (auth) { + defaults.headers = { + authorization: auth + }; + } + // Proxy + const agent = GitHub.getProxyAgent(defaults.baseUrl, options); + if (agent) { + defaults.request = { agent }; + } + return graphql_1.graphql.defaults(defaults); + } + static getAuthString(token, options) { + // Validate args + if (!token && !options.auth) { + throw new Error('Parameter token or opts.auth is required'); + } + else if (token && options.auth) { + throw new Error('Parameters token and opts.auth may not both be specified'); + } + return typeof options.auth === 'string' ? options.auth : `token ${token}`; + } + static getProxyAgent(destinationUrl, options) { + var _a; + if (!((_a = options.request) === null || _a === void 0 ? void 0 : _a.agent)) { + if (httpClient.getProxyUrl(destinationUrl)) { + const hc = new httpClient.HttpClient(); + return hc.getAgent(destinationUrl); + } + } + return undefined; + } + static getApiBaseUrl() { + return process.env['GITHUB_API_URL'] || 'https://api.github.com'; + } + static getGraphQLBaseUrl() { + let url = process.env['GITHUB_GRAPHQL_URL'] || 'https://api.github.com/graphql'; + // Shouldn't be a trailing slash, but remove if so + if (url.endsWith('/')) { + url = url.substr(0, url.length - 1); + } + // Remove trailing "/graphql" + if (url.toUpperCase().endsWith('/GRAPHQL')) { + url = url.substr(0, url.length - '/graphql'.length); + } + return url; } - } - - return obj; -} - -function merge(defaults, route, options) { - if (typeof route === "string") { - let [method, url] = route.split(" "); - options = Object.assign(url ? { - method, - url - } : { - url: method - }, options); - } else { - options = Object.assign({}, route); - } // lowercase header names before merging with defaults to avoid duplicates - - - options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging - - removeUndefinedProperties(options); - removeUndefinedProperties(options.headers); - const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten - - if (defaults && defaults.mediaType.previews.length) { - mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); - } - - mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); - return mergedOptions; } +exports.GitHub = GitHub; +//# sourceMappingURL=github.js.map -function addQueryParameters(url, parameters) { - const separator = /\?/.test(url) ? "&" : "?"; - const names = Object.keys(parameters); +/***/ }), - if (names.length === 0) { - return url; - } +/***/ 9925: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - return url + separator + names.map(name => { - if (name === "q") { - return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); - } +"use strict"; - return `${name}=${encodeURIComponent(parameters[name])}`; - }).join("&"); -} - -const urlVariableRegex = /\{[^}]+\}/g; - -function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); -} - -function extractUrlVariableNames(url) { - const matches = url.match(urlVariableRegex); - - if (!matches) { - return []; - } - - return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); -} - -function omit(object, keysToOmit) { - return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { - obj[key] = object[key]; - return obj; - }, {}); +Object.defineProperty(exports, "__esModule", ({ value: true })); +const http = __nccwpck_require__(8605); +const https = __nccwpck_require__(7211); +const pm = __nccwpck_require__(6443); +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers = exports.Headers || (exports.Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); +/** + * Returns the proxy URL, depending upon the supplied url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ +function getProxyUrl(serverUrl) { + let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + return proxyUrl ? proxyUrl.href : ''; } - -// Based on https://github.com/bramstein/url-template, licensed under BSD -// TODO: create separate package. -// -// Copyright (c) 2012-2014, Bram Stein -// All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// 3. The name of the author may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/* istanbul ignore file */ -function encodeReserved(str) { - return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { - if (!/%[0-9A-Fa-f]/.test(part)) { - part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); +exports.getProxyUrl = getProxyUrl; +const HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +const HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; +const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; +const ExponentialBackoffCeiling = 10; +const ExponentialBackoffTimeSlice = 5; +class HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = 'HttpClientError'; + this.statusCode = statusCode; + Object.setPrototypeOf(this, HttpClientError.prototype); } - - return part; - }).join(""); -} - -function encodeUnreserved(str) { - return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { - return "%" + c.charCodeAt(0).toString(16).toUpperCase(); - }); -} - -function encodeValue(operator, value, key) { - value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); - - if (key) { - return encodeUnreserved(key) + "=" + value; - } else { - return value; - } } - -function isDefined(value) { - return value !== undefined && value !== null; +exports.HttpClientError = HttpClientError; +class HttpClientResponse { + constructor(message) { + this.message = message; + } + readBody() { + return new Promise(async (resolve, reject) => { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + }); + } } - -function isKeyOperator(operator) { - return operator === ";" || operator === "&" || operator === "?"; +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let parsedUrl = new URL(requestUrl); + return parsedUrl.protocol === 'https:'; } - -function getValues(context, operator, key, modifier) { - var value = context[key], - result = []; - - if (isDefined(value) && value !== "") { - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - value = value.toString(); - - if (modifier && modifier !== "*") { - value = value.substring(0, parseInt(modifier, 10)); - } - - result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); - } else { - if (modifier === "*") { - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function (value) { - result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); - }); - } else { - Object.keys(value).forEach(function (k) { - if (isDefined(value[k])) { - result.push(encodeValue(operator, value[k], k)); +exports.isHttps = isHttps; +class HttpClient { + constructor(userAgent, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = userAgent; + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; } - }); - } - } else { - const tmp = []; - - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function (value) { - tmp.push(encodeValue(operator, value)); - }); - } else { - Object.keys(value).forEach(function (k) { - if (isDefined(value[k])) { - tmp.push(encodeUnreserved(k)); - tmp.push(encodeValue(operator, value[k].toString())); + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; } - }); - } - - if (isKeyOperator(operator)) { - result.push(encodeUnreserved(key) + "=" + tmp.join(",")); - } else if (tmp.length !== 0) { - result.push(tmp.join(",")); } - } } - } else { - if (operator === ";") { - if (isDefined(value)) { - result.push(encodeUnreserved(key)); - } - } else if (value === "" && (operator === "&" || operator === "?")) { - result.push(encodeUnreserved(key) + "="); - } else if (value === "") { - result.push(""); + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); } - } - - return result; -} - -function parseUrl(template) { - return { - expand: expand.bind(null, template) - }; -} - -function expand(template, context) { - var operators = ["+", "#", ".", "/", ";", "?", "&"]; - return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { - if (expression) { - let operator = ""; - const values = []; - - if (operators.indexOf(expression.charAt(0)) !== -1) { - operator = expression.charAt(0); - expression = expression.substr(1); - } - - expression.split(/,/g).forEach(function (variable) { - var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); - values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); - }); - - if (operator && operator !== "+") { - var separator = ","; - - if (operator === "?") { - separator = "&"; - } else if (operator !== "#") { - separator = operator; - } - - return (values.length !== 0 ? operator : "") + values.join(separator); - } else { - return values.join(","); - } - } else { - return encodeReserved(literal); + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); } - }); -} - -function parse(options) { - // https://fetch.spec.whatwg.org/#methods - let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible - - let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); - let headers = Object.assign({}, options.headers); - let body; - let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later - - const urlVariableNames = extractUrlVariableNames(url); - url = parseUrl(url).expand(parameters); - - if (!/^http/.test(url)) { - url = options.baseUrl + url; - } - - const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); - const remainingParameters = omit(parameters, omittedParameters); - const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); - - if (!isBinaryRequest) { - if (options.mediaType.format) { - // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw - headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); } - - if (options.mediaType.previews.length) { - const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; - headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { - const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; - return `application/vnd.github.${preview}-preview${format}`; - }).join(","); + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); } - } // for GET/HEAD requests, set URL query parameters from remaining parameters - // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters - - - if (["GET", "HEAD"].includes(method)) { - url = addQueryParameters(url, remainingParameters); - } else { - if ("data" in remainingParameters) { - body = remainingParameters.data; - } else { - if (Object.keys(remainingParameters).length) { - body = remainingParameters; - } else { - headers["content-length"] = 0; - } + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); } - } // default content-type for JSON if body is set - - - if (!headers["content-type"] && typeof body !== "undefined") { - headers["content-type"] = "application/json; charset=utf-8"; - } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. - // fetch does not allow to set `content-length` header, but we can set body to an empty string - - - if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { - body = ""; - } // Only return body/request keys if present - - - return Object.assign({ - method, - url, - headers - }, typeof body !== "undefined" ? { - body - } : null, options.request ? { - request: options.request - } : null); -} - -function endpointWithDefaults(defaults, route, options) { - return parse(merge(defaults, route, options)); -} - -function withDefaults(oldDefaults, newDefaults) { - const DEFAULTS = merge(oldDefaults, newDefaults); - const endpoint = endpointWithDefaults.bind(null, DEFAULTS); - return Object.assign(endpoint, { - DEFAULTS, - defaults: withDefaults.bind(null, DEFAULTS), - merge: merge.bind(null, DEFAULTS), - parse - }); -} - -const VERSION = "6.0.12"; - -const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. -// So we use RequestParameters and add method as additional required property. - -const DEFAULTS = { - method: "GET", - baseUrl: "https://api.github.com", - headers: { - accept: "application/vnd.github.v3+json", - "user-agent": userAgent - }, - mediaType: { - format: "", - previews: [] - } -}; - -const endpoint = withDefaults(null, DEFAULTS); - -exports.endpoint = endpoint; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 8467: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var request = __nccwpck_require__(6234); -var universalUserAgent = __nccwpck_require__(5030); - -const VERSION = "4.8.0"; - -function _buildMessageForResponseErrors(data) { - return `Request failed due to following response errors:\n` + data.errors.map(e => ` - ${e.message}`).join("\n"); -} - -class GraphqlResponseError extends Error { - constructor(request, headers, response) { - super(_buildMessageForResponseErrors(response)); - this.request = request; - this.headers = headers; - this.response = response; - this.name = "GraphqlResponseError"; // Expose the errors and response data in their shorthand properties. - - this.errors = response.errors; - this.data = response.data; // Maintains proper stack trace (only available on V8) - - /* istanbul ignore next */ - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); } - } - -} - -const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"]; -const FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; -const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; -function graphql(request, query, options) { - if (options) { - if (typeof query === "string" && "query" in options) { - return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); } - - for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; - return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`)); + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); } - } - - const parsedOptions = typeof query === "string" ? Object.assign({ - query - }, options) : query; - const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { - if (NON_VARIABLE_OPTIONS.includes(key)) { - result[key] = parsedOptions[key]; - return result; + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + async getJson(requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + let res = await this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - if (!result.variables) { - result.variables = {}; + async postJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - result.variables[key] = parsedOptions[key]; - return result; - }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix - // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451 - - const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl; - - if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { - requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); - } - - return request(requestOptions).then(response => { - if (response.data.errors) { - const headers = {}; - - for (const key of Object.keys(response.headers)) { - headers[key] = response.headers[key]; - } - - throw new GraphqlResponseError(requestOptions, headers, response.data); + async putJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - return response.data.data; - }); -} - -function withDefaults(request$1, newDefaults) { - const newRequest = request$1.defaults(newDefaults); - - const newApi = (query, options) => { - return graphql(newRequest, query, options); - }; - - return Object.assign(newApi, { - defaults: withDefaults.bind(null, newRequest), - endpoint: request.request.endpoint - }); -} - -const graphql$1 = withDefaults(request.request, { - headers: { - "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` - }, - method: "POST", - url: "/graphql" -}); -function withCustomRequest(customRequest) { - return withDefaults(customRequest, { - method: "POST", - url: "/graphql" - }); -} - -exports.GraphqlResponseError = GraphqlResponseError; -exports.graphql = graphql$1; -exports.withCustomRequest = withCustomRequest; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 4193: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -const VERSION = "1.1.2"; - -/** - * Some “list” response that can be paginated have a different response structure - * - * They have a `total_count` key in the response (search also has `incomplete_results`, - * /installation/repositories also has `repository_selection`), as well as a key with - * the list of the items which name varies from endpoint to endpoint: - * - * - https://developer.github.com/v3/search/#example (key `items`) - * - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`) - * - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`) - * - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`) - * - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`) - * - * Octokit normalizes these responses so that paginated results are always returned following - * the same structure. One challenge is that if the list response has only one page, no Link - * header is provided, so this header alone is not sufficient to check wether a response is - * paginated or not. For the exceptions with the namespace, a fallback check for the route - * paths has to be added in order to normalize the response. We cannot check for the total_count - * property because it also exists in the response of Get the combined status for a specific ref. - */ -const REGEX = [/^\/search\//, /^\/repos\/[^/]+\/[^/]+\/commits\/[^/]+\/(check-runs|check-suites)([^/]|$)/, /^\/installation\/repositories([^/]|$)/, /^\/user\/installations([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/secrets([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/workflows(\/[^/]+\/runs)?([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/runs(\/[^/]+\/(artifacts|jobs))?([^/]|$)/]; -function normalizePaginatedListResponse(octokit, url, response) { - const path = url.replace(octokit.request.endpoint.DEFAULTS.baseUrl, ""); - const responseNeedsNormalization = REGEX.find(regex => regex.test(path)); - if (!responseNeedsNormalization) return; // keep the additional properties intact as there is currently no other way - // to retrieve the same information. - - const incompleteResults = response.data.incomplete_results; - const repositorySelection = response.data.repository_selection; - const totalCount = response.data.total_count; - delete response.data.incomplete_results; - delete response.data.repository_selection; - delete response.data.total_count; - const namespaceKey = Object.keys(response.data)[0]; - const data = response.data[namespaceKey]; - response.data = data; - - if (typeof incompleteResults !== "undefined") { - response.data.incomplete_results = incompleteResults; - } - - if (typeof repositorySelection !== "undefined") { - response.data.repository_selection = repositorySelection; - } - - response.data.total_count = totalCount; - Object.defineProperty(response.data, namespaceKey, { - get() { - octokit.log.warn(`[@octokit/paginate-rest] "response.data.${namespaceKey}" is deprecated for "GET ${path}". Get the results directly from "response.data"`); - return Array.from(data); + async patchJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - }); -} - -function iterator(octokit, route, parameters) { - const options = octokit.request.endpoint(route, parameters); - const method = options.method; - const headers = options.headers; - let url = options.url; - return { - [Symbol.asyncIterator]: () => ({ - next() { - if (!url) { - return Promise.resolve({ - done: true - }); + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + async request(verb, requestUrl, data, headers) { + if (this._disposed) { + throw new Error('Client has already been disposed.'); } - - return octokit.request({ - method, - url, - headers - }).then(response => { - normalizePaginatedListResponse(octokit, url, response); // `response.headers.link` format: - // '; rel="next", ; rel="last"' - // sets `url` to undefined if "next" URL is not present or `link` header is not set - - url = ((response.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; - return { - value: response - }; - }); - } - - }) - }; -} - -function paginate(octokit, route, parameters, mapFn) { - if (typeof parameters === "function") { - mapFn = parameters; - parameters = undefined; - } - - return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); -} - -function gather(octokit, results, iterator, mapFn) { - return iterator.next().then(result => { - if (result.done) { - return results; - } - - let earlyExit = false; - - function done() { - earlyExit = true; - } - - results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); - - if (earlyExit) { - return results; - } - - return gather(octokit, results, iterator, mapFn); - }); -} - -/** - * @param octokit Octokit instance - * @param options Options passed to Octokit constructor - */ - -function paginateRest(octokit) { - return { - paginate: Object.assign(paginate.bind(null, octokit), { - iterator: iterator.bind(null, octokit) - }) - }; -} -paginateRest.VERSION = VERSION; - -exports.paginateRest = paginateRest; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 8883: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -const VERSION = "1.0.4"; - -/** - * @param octokit Octokit instance - * @param options Options passed to Octokit constructor - */ - -function requestLog(octokit) { - octokit.hook.wrap("request", (request, options) => { - octokit.log.debug("request", options); - const start = Date.now(); - const requestOptions = octokit.request.endpoint.parse(options); - const path = requestOptions.url.replace(options.baseUrl, ""); - return request(options).then(response => { - octokit.log.info(`${requestOptions.method} ${path} - ${response.status} in ${Date.now() - start}ms`); - return response; - }).catch(error => { - octokit.log.info(`${requestOptions.method} ${path} - ${error.status} in ${Date.now() - start}ms`); - throw error; - }); - }); -} -requestLog.VERSION = VERSION; - -exports.requestLog = requestLog; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 3044: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var deprecation = __nccwpck_require__(8932); - -var endpointsByScope = { - actions: { - cancelWorkflowRun: { - method: "POST", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - run_id: { - required: true, - type: "integer" + let parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + response = await this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + let parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol == 'https:' && + parsedUrl.protocol != parsedRedirectUrl.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.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + await response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (let header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } + } + } + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = await this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + await response.readBody(); + await this._performExponentialBackoff(numTries); + } } - }, - url: "/repos/:owner/:repo/actions/runs/:run_id/cancel" - }, - createOrUpdateSecretForRepo: { - method: "PUT", - params: { - encrypted_value: { - type: "string" - }, - key_id: { - type: "string" - }, - name: { - required: true, - type: "string" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + return response; + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); } - }, - url: "/repos/:owner/:repo/actions/secrets/:name" - }, - createRegistrationToken: { - method: "POST", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + let socket; + if (typeof data === 'string') { + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); } - }, - url: "/repos/:owner/:repo/actions/runners/registration-token" - }, - createRemoveToken: { - method: "POST", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', sock => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); + } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof data === 'string') { + req.write(data, 'utf8'); } - }, - url: "/repos/:owner/:repo/actions/runners/remove-token" - }, - deleteArtifact: { - method: "DELETE", - params: { - artifact_id: { - required: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + if (data && typeof data !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); } - }, - url: "/repos/:owner/:repo/actions/artifacts/:artifact_id" - }, - deleteSecretFromRepo: { - method: "DELETE", - params: { - name: { - required: true, - type: "string" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + else { + req.end(); } - }, - url: "/repos/:owner/:repo/actions/secrets/:name" - }, - downloadArtifact: { - method: "GET", - params: { - archive_format: { - required: true, - type: "string" - }, - artifact_id: { - required: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + let parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); + } + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port + ? parseInt(info.parsedUrl.port) + : defaultPort; + info.options.path = + (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers['user-agent'] = this.userAgent; } - }, - url: "/repos/:owner/:repo/actions/artifacts/:artifact_id/:archive_format" - }, - getArtifact: { - method: "GET", - params: { - artifact_id: { - required: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers) { + this.handlers.forEach(handler => { + handler.prepareRequest(info.options); + }); } - }, - url: "/repos/:owner/:repo/actions/artifacts/:artifact_id" - }, - getPublicKey: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + return info; + } + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); } - }, - url: "/repos/:owner/:repo/actions/secrets/public-key" - }, - getSecret: { - method: "GET", - params: { - name: { - required: true, - type: "string" - }, - owner: { - required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, - type: "string" + return lowercaseKeys(headers || {}); + } + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; } - }, - url: "/repos/:owner/:repo/actions/secrets/:name" - }, - getSelfHostedRunner: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - runner_id: { - required: true, - type: "integer" + return additionalHeaders[header] || clientHeader || _default; + } + _getAgent(parsedUrl) { + let agent; + let proxyUrl = pm.getProxyUrl(parsedUrl); + let useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; } - }, - url: "/repos/:owner/:repo/actions/runners/:runner_id" - }, - getWorkflow: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - workflow_id: { - required: true, - type: "integer" + if (this._keepAlive && !useProxy) { + agent = this._agent; } - }, - url: "/repos/:owner/:repo/actions/workflows/:workflow_id" - }, - getWorkflowJob: { - method: "GET", - params: { - job_id: { - required: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + // if agent is already assigned use that agent. + if (!!agent) { + return agent; } - }, - url: "/repos/:owner/:repo/actions/jobs/:job_id" - }, - getWorkflowRun: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - run_id: { - required: true, - type: "integer" + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; } - }, - url: "/repos/:owner/:repo/actions/runs/:run_id" - }, - listDownloadsForSelfHostedRunnerApplication: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = __nccwpck_require__(4294); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + ...((proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + }), + host: proxyUrl.hostname, + port: proxyUrl.port + } + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === 'https:'; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } + else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; } - }, - url: "/repos/:owner/:repo/actions/runners/downloads" - }, - listJobsForWorkflowRun: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, - type: "string" - }, - run_id: { - required: true, - type: "integer" + // if reusing agent across request and tunneling agent isn't assigned create a new agent + if (this._keepAlive && !agent) { + const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; } - }, - url: "/repos/:owner/:repo/actions/runs/:run_id/jobs" - }, - listRepoWorkflowRuns: { - method: "GET", - params: { - actor: { - type: "string" - }, - branch: { - type: "string" - }, - event: { - type: "string" - }, - owner: { - required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, - type: "string" - }, - status: { - enum: ["completed", "status", "conclusion"], - type: "string" + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; } - }, - url: "/repos/:owner/:repo/actions/runs" - }, - listRepoWorkflows: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, - type: "string" + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); } - }, - url: "/repos/:owner/:repo/actions/workflows" - }, - listSecretsForRepo: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, - type: "string" + return agent; + } + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } } - }, - url: "/repos/:owner/:repo/actions/secrets" - }, - listSelfHostedRunnersForRepo: { - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, - type: "string" + return value; + } + async _processResponse(res, options) { + return new Promise(async (resolve, reject) => { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = await res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = 'Failed request: (' + statusCode + ')'; + } + let err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } + else { + resolve(response); + } + }); + } +} +exports.HttpClient = HttpClient; + + +/***/ }), + +/***/ 6443: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +function getProxyUrl(reqUrl) { + let usingSsl = reqUrl.protocol === 'https:'; + let proxyUrl; + if (checkBypass(reqUrl)) { + return proxyUrl; + } + let proxyVar; + if (usingSsl) { + proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + if (proxyVar) { + proxyUrl = new URL(proxyVar); + } + return proxyUrl; +} +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + if (!noProxy) { + return false; + } + // Determine the request port + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } + else if (reqUrl.protocol === 'http:') { + reqPort = 80; + } + else if (reqUrl.protocol === 'https:') { + reqPort = 443; + } + // Format the request hostname and hostname with port + let upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (let upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperReqHosts.some(x => x === upperNoProxyItem)) { + return true; } - }, - url: "/repos/:owner/:repo/actions/runners" - }, - listWorkflowJobLogs: { - method: "GET", - params: { - job_id: { - required: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, - type: "string" + } + return false; +} +exports.checkBypass = checkBypass; + + +/***/ }), + +/***/ 334: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +const REGEX_IS_INSTALLATION_LEGACY = /^v1\./; +const REGEX_IS_INSTALLATION = /^ghs_/; +const REGEX_IS_USER_TO_SERVER = /^ghu_/; +async function auth(token) { + const isApp = token.split(/\./).length === 3; + const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); + const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); + const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; + return { + type: "token", + token: token, + tokenType + }; +} + +/** + * Prefix token for usage in the Authorization header + * + * @param token OAuth token or JSON Web Token + */ +function withAuthorizationPrefix(token) { + if (token.split(/\./).length === 3) { + return `bearer ${token}`; + } + + return `token ${token}`; +} + +async function hook(token, request, route, parameters) { + const endpoint = request.endpoint.merge(route, parameters); + endpoint.headers.authorization = withAuthorizationPrefix(token); + return request(endpoint); +} + +const createTokenAuth = function createTokenAuth(token) { + if (!token) { + throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); + } + + if (typeof token !== "string") { + throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); + } + + token = token.replace(/^(token|bearer) +/i, ""); + return Object.assign(auth.bind(null, token), { + hook: hook.bind(null, token) + }); +}; + +exports.createTokenAuth = createTokenAuth; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9440: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var isPlainObject = __nccwpck_require__(3287); +var universalUserAgent = __nccwpck_require__(5030); + +function lowercaseKeys(object) { + if (!object) { + return {}; + } + + return Object.keys(object).reduce((newObj, key) => { + newObj[key.toLowerCase()] = object[key]; + return newObj; + }, {}); +} + +function mergeDeep(defaults, options) { + const result = Object.assign({}, defaults); + Object.keys(options).forEach(key => { + if (isPlainObject.isPlainObject(options[key])) { + if (!(key in defaults)) Object.assign(result, { + [key]: options[key] + });else result[key] = mergeDeep(defaults[key], options[key]); + } else { + Object.assign(result, { + [key]: options[key] + }); + } + }); + return result; +} + +function removeUndefinedProperties(obj) { + for (const key in obj) { + if (obj[key] === undefined) { + delete obj[key]; + } + } + + return obj; +} + +function merge(defaults, route, options) { + if (typeof route === "string") { + let [method, url] = route.split(" "); + options = Object.assign(url ? { + method, + url + } : { + url: method + }, options); + } else { + options = Object.assign({}, route); + } // lowercase header names before merging with defaults to avoid duplicates + + + options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging + + removeUndefinedProperties(options); + removeUndefinedProperties(options.headers); + const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten + + if (defaults && defaults.mediaType.previews.length) { + mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); + } + + mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); + return mergedOptions; +} + +function addQueryParameters(url, parameters) { + const separator = /\?/.test(url) ? "&" : "?"; + const names = Object.keys(parameters); + + if (names.length === 0) { + return url; + } + + return url + separator + names.map(name => { + if (name === "q") { + return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + } + + return `${name}=${encodeURIComponent(parameters[name])}`; + }).join("&"); +} + +const urlVariableRegex = /\{[^}]+\}/g; + +function removeNonChars(variableName) { + return variableName.replace(/^\W+|\W+$/g, "").split(/,/); +} + +function extractUrlVariableNames(url) { + const matches = url.match(urlVariableRegex); + + if (!matches) { + return []; + } + + return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); +} + +function omit(object, keysToOmit) { + return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { + obj[key] = object[key]; + return obj; + }, {}); +} + +// Based on https://github.com/bramstein/url-template, licensed under BSD +// TODO: create separate package. +// +// Copyright (c) 2012-2014, Bram Stein +// All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* istanbul ignore file */ +function encodeReserved(str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + } + + return part; + }).join(""); +} + +function encodeUnreserved(str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return "%" + c.charCodeAt(0).toString(16).toUpperCase(); + }); +} + +function encodeValue(operator, value, key) { + value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); + + if (key) { + return encodeUnreserved(key) + "=" + value; + } else { + return value; + } +} + +function isDefined(value) { + return value !== undefined && value !== null; +} + +function isKeyOperator(operator) { + return operator === ";" || operator === "&" || operator === "?"; +} + +function getValues(context, operator, key, modifier) { + var value = context[key], + result = []; + + if (isDefined(value) && value !== "") { + if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + value = value.toString(); + + if (modifier && modifier !== "*") { + value = value.substring(0, parseInt(modifier, 10)); + } + + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); + } else { + if (modifier === "*") { + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + result.push(encodeValue(operator, value[k], k)); + } + }); + } + } else { + const tmp = []; + + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + tmp.push(encodeValue(operator, value)); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + tmp.push(encodeUnreserved(k)); + tmp.push(encodeValue(operator, value[k].toString())); + } + }); + } + + if (isKeyOperator(operator)) { + result.push(encodeUnreserved(key) + "=" + tmp.join(",")); + } else if (tmp.length !== 0) { + result.push(tmp.join(",")); + } + } + } + } else { + if (operator === ";") { + if (isDefined(value)) { + result.push(encodeUnreserved(key)); + } + } else if (value === "" && (operator === "&" || operator === "?")) { + result.push(encodeUnreserved(key) + "="); + } else if (value === "") { + result.push(""); + } + } + + return result; +} + +function parseUrl(template) { + return { + expand: expand.bind(null, template) + }; +} + +function expand(template, context) { + var operators = ["+", "#", ".", "/", ";", "?", "&"]; + return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { + if (expression) { + let operator = ""; + const values = []; + + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); + } + + expression.split(/,/g).forEach(function (variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); + }); + + if (operator && operator !== "+") { + var separator = ","; + + if (operator === "?") { + separator = "&"; + } else if (operator !== "#") { + separator = operator; + } + + return (values.length !== 0 ? operator : "") + values.join(separator); + } else { + return values.join(","); + } + } else { + return encodeReserved(literal); + } + }); +} + +function parse(options) { + // https://fetch.spec.whatwg.org/#methods + let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible + + let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); + let headers = Object.assign({}, options.headers); + let body; + let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later + + const urlVariableNames = extractUrlVariableNames(url); + url = parseUrl(url).expand(parameters); + + if (!/^http/.test(url)) { + url = options.baseUrl + url; + } + + const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); + const remainingParameters = omit(parameters, omittedParameters); + const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); + + if (!isBinaryRequest) { + if (options.mediaType.format) { + // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw + headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); + } + + if (options.mediaType.previews.length) { + const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; + headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { + const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; + return `application/vnd.github.${preview}-preview${format}`; + }).join(","); + } + } // for GET/HEAD requests, set URL query parameters from remaining parameters + // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters + + + if (["GET", "HEAD"].includes(method)) { + url = addQueryParameters(url, remainingParameters); + } else { + if ("data" in remainingParameters) { + body = remainingParameters.data; + } else { + if (Object.keys(remainingParameters).length) { + body = remainingParameters; + } else { + headers["content-length"] = 0; + } + } + } // default content-type for JSON if body is set + + + if (!headers["content-type"] && typeof body !== "undefined") { + headers["content-type"] = "application/json; charset=utf-8"; + } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. + // fetch does not allow to set `content-length` header, but we can set body to an empty string + + + if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { + body = ""; + } // Only return body/request keys if present + + + return Object.assign({ + method, + url, + headers + }, typeof body !== "undefined" ? { + body + } : null, options.request ? { + request: options.request + } : null); +} + +function endpointWithDefaults(defaults, route, options) { + return parse(merge(defaults, route, options)); +} + +function withDefaults(oldDefaults, newDefaults) { + const DEFAULTS = merge(oldDefaults, newDefaults); + const endpoint = endpointWithDefaults.bind(null, DEFAULTS); + return Object.assign(endpoint, { + DEFAULTS, + defaults: withDefaults.bind(null, DEFAULTS), + merge: merge.bind(null, DEFAULTS), + parse + }); +} + +const VERSION = "6.0.12"; + +const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. +// So we use RequestParameters and add method as additional required property. + +const DEFAULTS = { + method: "GET", + baseUrl: "https://api.github.com", + headers: { + accept: "application/vnd.github.v3+json", + "user-agent": userAgent + }, + mediaType: { + format: "", + previews: [] + } +}; + +const endpoint = withDefaults(null, DEFAULTS); + +exports.endpoint = endpoint; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 8467: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var request = __nccwpck_require__(6234); +var universalUserAgent = __nccwpck_require__(5030); + +const VERSION = "4.8.0"; + +function _buildMessageForResponseErrors(data) { + return `Request failed due to following response errors:\n` + data.errors.map(e => ` - ${e.message}`).join("\n"); +} + +class GraphqlResponseError extends Error { + constructor(request, headers, response) { + super(_buildMessageForResponseErrors(response)); + this.request = request; + this.headers = headers; + this.response = response; + this.name = "GraphqlResponseError"; // Expose the errors and response data in their shorthand properties. + + this.errors = response.errors; + this.data = response.data; // Maintains proper stack trace (only available on V8) + + /* istanbul ignore next */ + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + +} + +const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"]; +const FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; +const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; +function graphql(request, query, options) { + if (options) { + if (typeof query === "string" && "query" in options) { + return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); + } + + for (const key in options) { + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; + return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`)); + } + } + + const parsedOptions = typeof query === "string" ? Object.assign({ + query + }, options) : query; + const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { + if (NON_VARIABLE_OPTIONS.includes(key)) { + result[key] = parsedOptions[key]; + return result; + } + + if (!result.variables) { + result.variables = {}; + } + + result.variables[key] = parsedOptions[key]; + return result; + }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix + // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451 + + const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl; + + if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { + requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); + } + + return request(requestOptions).then(response => { + if (response.data.errors) { + const headers = {}; + + for (const key of Object.keys(response.headers)) { + headers[key] = response.headers[key]; + } + + throw new GraphqlResponseError(requestOptions, headers, response.data); + } + + return response.data.data; + }); +} + +function withDefaults(request$1, newDefaults) { + const newRequest = request$1.defaults(newDefaults); + + const newApi = (query, options) => { + return graphql(newRequest, query, options); + }; + + return Object.assign(newApi, { + defaults: withDefaults.bind(null, newRequest), + endpoint: request.request.endpoint + }); +} + +const graphql$1 = withDefaults(request.request, { + headers: { + "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` + }, + method: "POST", + url: "/graphql" +}); +function withCustomRequest(customRequest) { + return withDefaults(customRequest, { + method: "POST", + url: "/graphql" + }); +} + +exports.GraphqlResponseError = GraphqlResponseError; +exports.graphql = graphql$1; +exports.withCustomRequest = withCustomRequest; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 4193: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +const VERSION = "1.1.2"; + +/** + * Some “list” response that can be paginated have a different response structure + * + * They have a `total_count` key in the response (search also has `incomplete_results`, + * /installation/repositories also has `repository_selection`), as well as a key with + * the list of the items which name varies from endpoint to endpoint: + * + * - https://developer.github.com/v3/search/#example (key `items`) + * - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`) + * - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`) + * - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`) + * - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`) + * + * Octokit normalizes these responses so that paginated results are always returned following + * the same structure. One challenge is that if the list response has only one page, no Link + * header is provided, so this header alone is not sufficient to check wether a response is + * paginated or not. For the exceptions with the namespace, a fallback check for the route + * paths has to be added in order to normalize the response. We cannot check for the total_count + * property because it also exists in the response of Get the combined status for a specific ref. + */ +const REGEX = [/^\/search\//, /^\/repos\/[^/]+\/[^/]+\/commits\/[^/]+\/(check-runs|check-suites)([^/]|$)/, /^\/installation\/repositories([^/]|$)/, /^\/user\/installations([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/secrets([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/workflows(\/[^/]+\/runs)?([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/runs(\/[^/]+\/(artifacts|jobs))?([^/]|$)/]; +function normalizePaginatedListResponse(octokit, url, response) { + const path = url.replace(octokit.request.endpoint.DEFAULTS.baseUrl, ""); + const responseNeedsNormalization = REGEX.find(regex => regex.test(path)); + if (!responseNeedsNormalization) return; // keep the additional properties intact as there is currently no other way + // to retrieve the same information. + + const incompleteResults = response.data.incomplete_results; + const repositorySelection = response.data.repository_selection; + const totalCount = response.data.total_count; + delete response.data.incomplete_results; + delete response.data.repository_selection; + delete response.data.total_count; + const namespaceKey = Object.keys(response.data)[0]; + const data = response.data[namespaceKey]; + response.data = data; + + if (typeof incompleteResults !== "undefined") { + response.data.incomplete_results = incompleteResults; + } + + if (typeof repositorySelection !== "undefined") { + response.data.repository_selection = repositorySelection; + } + + response.data.total_count = totalCount; + Object.defineProperty(response.data, namespaceKey, { + get() { + octokit.log.warn(`[@octokit/paginate-rest] "response.data.${namespaceKey}" is deprecated for "GET ${path}". Get the results directly from "response.data"`); + return Array.from(data); + } + + }); +} + +function iterator(octokit, route, parameters) { + const options = octokit.request.endpoint(route, parameters); + const method = options.method; + const headers = options.headers; + let url = options.url; + return { + [Symbol.asyncIterator]: () => ({ + next() { + if (!url) { + return Promise.resolve({ + done: true + }); } - }, - url: "/repos/:owner/:repo/actions/jobs/:job_id/logs" - }, - listWorkflowRunArtifacts: { - method: "GET", + + return octokit.request({ + method, + url, + headers + }).then(response => { + normalizePaginatedListResponse(octokit, url, response); // `response.headers.link` format: + // '; rel="next", ; rel="last"' + // sets `url` to undefined if "next" URL is not present or `link` header is not set + + url = ((response.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; + return { + value: response + }; + }); + } + + }) + }; +} + +function paginate(octokit, route, parameters, mapFn) { + if (typeof parameters === "function") { + mapFn = parameters; + parameters = undefined; + } + + return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); +} + +function gather(octokit, results, iterator, mapFn) { + return iterator.next().then(result => { + if (result.done) { + return results; + } + + let earlyExit = false; + + function done() { + earlyExit = true; + } + + results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); + + if (earlyExit) { + return results; + } + + return gather(octokit, results, iterator, mapFn); + }); +} + +/** + * @param octokit Octokit instance + * @param options Options passed to Octokit constructor + */ + +function paginateRest(octokit) { + return { + paginate: Object.assign(paginate.bind(null, octokit), { + iterator: iterator.bind(null, octokit) + }) + }; +} +paginateRest.VERSION = VERSION; + +exports.paginateRest = paginateRest; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 8883: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +const VERSION = "1.0.4"; + +/** + * @param octokit Octokit instance + * @param options Options passed to Octokit constructor + */ + +function requestLog(octokit) { + octokit.hook.wrap("request", (request, options) => { + octokit.log.debug("request", options); + const start = Date.now(); + const requestOptions = octokit.request.endpoint.parse(options); + const path = requestOptions.url.replace(options.baseUrl, ""); + return request(options).then(response => { + octokit.log.info(`${requestOptions.method} ${path} - ${response.status} in ${Date.now() - start}ms`); + return response; + }).catch(error => { + octokit.log.info(`${requestOptions.method} ${path} - ${error.status} in ${Date.now() - start}ms`); + throw error; + }); + }); +} +requestLog.VERSION = VERSION; + +exports.requestLog = requestLog; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 3044: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var deprecation = __nccwpck_require__(8932); + +var endpointsByScope = { + actions: { + cancelWorkflowRun: { + method: "POST", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" @@ -2770,70 +3450,33 @@ var endpointsByScope = { type: "integer" } }, - url: "/repos/:owner/:repo/actions/runs/:run_id/artifacts" + url: "/repos/:owner/:repo/actions/runs/:run_id/cancel" }, - listWorkflowRunLogs: { - method: "GET", + createOrUpdateSecretForRepo: { + method: "PUT", params: { - owner: { - required: true, + encrypted_value: { type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - repo: { - required: true, + key_id: { type: "string" }, - run_id: { + name: { required: true, - type: "integer" - } - }, - url: "/repos/:owner/:repo/actions/runs/:run_id/logs" - }, - listWorkflowRuns: { - method: "GET", - params: { - actor: { - type: "string" - }, - branch: { - type: "string" - }, - event: { type: "string" }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" - }, - status: { - enum: ["completed", "status", "conclusion"], - type: "string" - }, - workflow_id: { - required: true, - type: "integer" } }, - url: "/repos/:owner/:repo/actions/workflows/:workflow_id/runs" + url: "/repos/:owner/:repo/actions/secrets/:name" }, - reRunWorkflow: { + createRegistrationToken: { method: "POST", params: { owner: { @@ -2843,16 +3486,12 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - run_id: { - required: true, - type: "integer" } }, - url: "/repos/:owner/:repo/actions/runs/:run_id/rerun" + url: "/repos/:owner/:repo/actions/runners/registration-token" }, - removeSelfHostedRunner: { - method: "DELETE", + createRemoveToken: { + method: "POST", params: { owner: { required: true, @@ -2861,19 +3500,17 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - runner_id: { - required: true, - type: "integer" } }, - url: "/repos/:owner/:repo/actions/runners/:runner_id" - } - }, - activity: { - checkStarringRepo: { - method: "GET", + url: "/repos/:owner/:repo/actions/runners/remove-token" + }, + deleteArtifact: { + method: "DELETE", params: { + artifact_id: { + required: true, + type: "integer" + }, owner: { required: true, type: "string" @@ -2883,11 +3520,15 @@ var endpointsByScope = { type: "string" } }, - url: "/user/starred/:owner/:repo" + url: "/repos/:owner/:repo/actions/artifacts/:artifact_id" }, - deleteRepoSubscription: { + deleteSecretFromRepo: { method: "DELETE", params: { + name: { + required: true, + type: "string" + }, owner: { required: true, type: "string" @@ -2897,21 +3538,19 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/subscription" + url: "/repos/:owner/:repo/actions/secrets/:name" }, - deleteThreadSubscription: { - method: "DELETE", + downloadArtifact: { + method: "GET", params: { - thread_id: { + archive_format: { + required: true, + type: "string" + }, + artifact_id: { required: true, type: "integer" - } - }, - url: "/notifications/threads/:thread_id/subscription" - }, - getRepoSubscription: { - method: "GET", - params: { + }, owner: { required: true, type: "string" @@ -2921,32 +3560,48 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/subscription" + url: "/repos/:owner/:repo/actions/artifacts/:artifact_id/:archive_format" }, - getThread: { + getArtifact: { method: "GET", params: { - thread_id: { + artifact_id: { required: true, type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" } }, - url: "/notifications/threads/:thread_id" + url: "/repos/:owner/:repo/actions/artifacts/:artifact_id" }, - getThreadSubscription: { + getPublicKey: { method: "GET", params: { - thread_id: { + owner: { required: true, - type: "integer" + type: "string" + }, + repo: { + required: true, + type: "string" } }, - url: "/notifications/threads/:thread_id/subscription" + url: "/repos/:owner/:repo/actions/secrets/public-key" }, - listEventsForOrg: { + getSecret: { method: "GET", params: { - org: { + name: { + required: true, + type: "string" + }, + owner: { required: true, type: "string" }, @@ -2956,119 +3611,100 @@ var endpointsByScope = { per_page: { type: "integer" }, - username: { + repo: { required: true, type: "string" } }, - url: "/users/:username/events/orgs/:org" + url: "/repos/:owner/:repo/actions/secrets/:name" }, - listEventsForUser: { + getSelfHostedRunner: { method: "GET", params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" }, - username: { + repo: { required: true, type: "string" + }, + runner_id: { + required: true, + type: "integer" } }, - url: "/users/:username/events" - }, - listFeeds: { - method: "GET", - params: {}, - url: "/feeds" + url: "/repos/:owner/:repo/actions/runners/:runner_id" }, - listNotifications: { + getWorkflow: { method: "GET", params: { - all: { - type: "boolean" - }, - before: { + owner: { + required: true, type: "string" }, - page: { - type: "integer" - }, - participating: { - type: "boolean" + repo: { + required: true, + type: "string" }, - per_page: { + workflow_id: { + required: true, type: "integer" - }, - since: { - type: "string" } }, - url: "/notifications" + url: "/repos/:owner/:repo/actions/workflows/:workflow_id" }, - listNotificationsForRepo: { + getWorkflowJob: { method: "GET", params: { - all: { - type: "boolean" - }, - before: { - type: "string" + job_id: { + required: true, + type: "integer" }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - participating: { - type: "boolean" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" - }, - since: { - type: "string" } }, - url: "/repos/:owner/:repo/notifications" + url: "/repos/:owner/:repo/actions/jobs/:job_id" }, - listPublicEvents: { + getWorkflowRun: { method: "GET", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { + repo: { + required: true, + type: "string" + }, + run_id: { + required: true, type: "integer" } }, - url: "/events" + url: "/repos/:owner/:repo/actions/runs/:run_id" }, - listPublicEventsForOrg: { + listDownloadsForSelfHostedRunnerApplication: { method: "GET", params: { - org: { + owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" } }, - url: "/orgs/:org/events" + url: "/repos/:owner/:repo/actions/runners/downloads" }, - listPublicEventsForRepoNetwork: { + listJobsForWorkflowRun: { method: "GET", params: { owner: { @@ -3084,59 +3720,68 @@ var endpointsByScope = { repo: { required: true, type: "string" + }, + run_id: { + required: true, + type: "integer" } }, - url: "/networks/:owner/:repo/events" + url: "/repos/:owner/:repo/actions/runs/:run_id/jobs" }, - listPublicEventsForUser: { + listRepoWorkflowRuns: { method: "GET", params: { - page: { - type: "integer" + actor: { + type: "string" }, - per_page: { - type: "integer" + branch: { + type: "string" }, - username: { + event: { + type: "string" + }, + owner: { required: true, type: "string" - } - }, - url: "/users/:username/events/public" - }, - listReceivedEventsForUser: { - method: "GET", - params: { + }, page: { type: "integer" }, per_page: { type: "integer" }, - username: { + repo: { required: true, type: "string" + }, + status: { + enum: ["completed", "status", "conclusion"], + type: "string" } }, - url: "/users/:username/received_events" + url: "/repos/:owner/:repo/actions/runs" }, - listReceivedPublicEventsForUser: { + listRepoWorkflows: { method: "GET", params: { + owner: { + required: true, + type: "string" + }, page: { type: "integer" }, per_page: { type: "integer" }, - username: { + repo: { required: true, type: "string" } }, - url: "/users/:username/received_events/public" + url: "/repos/:owner/:repo/actions/workflows" }, - listRepoEvents: { + listSecretsForRepo: { method: "GET", params: { owner: { @@ -3154,13 +3799,13 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/events" + url: "/repos/:owner/:repo/actions/secrets" }, - listReposStarredByAuthenticatedUser: { + listSelfHostedRunnersForRepo: { method: "GET", params: { - direction: { - enum: ["asc", "desc"], + owner: { + required: true, type: "string" }, page: { @@ -3169,18 +3814,22 @@ var endpointsByScope = { per_page: { type: "integer" }, - sort: { - enum: ["created", "updated"], + repo: { + required: true, type: "string" } }, - url: "/user/starred" + url: "/repos/:owner/:repo/actions/runners" }, - listReposStarredByUser: { + listWorkflowJobLogs: { method: "GET", params: { - direction: { - enum: ["asc", "desc"], + job_id: { + required: true, + type: "integer" + }, + owner: { + required: true, type: "string" }, page: { @@ -3189,34 +3838,38 @@ var endpointsByScope = { per_page: { type: "integer" }, - sort: { - enum: ["created", "updated"], - type: "string" - }, - username: { + repo: { required: true, type: "string" } }, - url: "/users/:username/starred" + url: "/repos/:owner/:repo/actions/jobs/:job_id/logs" }, - listReposWatchedByUser: { + listWorkflowRunArtifacts: { method: "GET", params: { + owner: { + required: true, + type: "string" + }, page: { type: "integer" }, per_page: { type: "integer" }, - username: { + repo: { + required: true, + type: "string" + }, + run_id: { required: true, - type: "string" + type: "integer" } }, - url: "/users/:username/subscriptions" + url: "/repos/:owner/:repo/actions/runs/:run_id/artifacts" }, - listStargazersForRepo: { + listWorkflowRunLogs: { method: "GET", params: { owner: { @@ -3232,25 +3885,26 @@ var endpointsByScope = { repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/stargazers" - }, - listWatchedReposForAuthenticatedUser: { - method: "GET", - params: { - page: { - type: "integer" }, - per_page: { + run_id: { + required: true, type: "integer" } }, - url: "/user/subscriptions" + url: "/repos/:owner/:repo/actions/runs/:run_id/logs" }, - listWatchersForRepo: { + listWorkflowRuns: { method: "GET", params: { + actor: { + type: "string" + }, + branch: { + type: "string" + }, + event: { + type: "string" + }, owner: { required: true, type: "string" @@ -3264,25 +3918,21 @@ var endpointsByScope = { repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/subscribers" - }, - markAsRead: { - method: "PUT", - params: { - last_read_at: { + }, + status: { + enum: ["completed", "status", "conclusion"], type: "string" + }, + workflow_id: { + required: true, + type: "integer" } }, - url: "/notifications" + url: "/repos/:owner/:repo/actions/workflows/:workflow_id/runs" }, - markNotificationsAsReadForRepo: { - method: "PUT", + reRunWorkflow: { + method: "POST", params: { - last_read_at: { - type: "string" - }, owner: { required: true, type: "string" @@ -3290,26 +3940,17 @@ var endpointsByScope = { repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/notifications" - }, - markThreadAsRead: { - method: "PATCH", - params: { - thread_id: { + }, + run_id: { required: true, type: "integer" } }, - url: "/notifications/threads/:thread_id" + url: "/repos/:owner/:repo/actions/runs/:run_id/rerun" }, - setRepoSubscription: { - method: "PUT", + removeSelfHostedRunner: { + method: "DELETE", params: { - ignored: { - type: "boolean" - }, owner: { required: true, type: "string" @@ -3318,27 +3959,17 @@ var endpointsByScope = { required: true, type: "string" }, - subscribed: { - type: "boolean" - } - }, - url: "/repos/:owner/:repo/subscription" - }, - setThreadSubscription: { - method: "PUT", - params: { - ignored: { - type: "boolean" - }, - thread_id: { + runner_id: { required: true, type: "integer" } }, - url: "/notifications/threads/:thread_id/subscription" - }, - starRepo: { - method: "PUT", + url: "/repos/:owner/:repo/actions/runners/:runner_id" + } + }, + activity: { + checkStarringRepo: { + method: "GET", params: { owner: { required: true, @@ -3351,7 +3982,7 @@ var endpointsByScope = { }, url: "/user/starred/:owner/:repo" }, - unstarRepo: { + deleteRepoSubscription: { method: "DELETE", params: { owner: { @@ -3363,300 +3994,266 @@ var endpointsByScope = { type: "string" } }, - url: "/user/starred/:owner/:repo" - } - }, - apps: { - addRepoToInstallation: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, - method: "PUT", + url: "/repos/:owner/:repo/subscription" + }, + deleteThreadSubscription: { + method: "DELETE", params: { - installation_id: { + thread_id: { required: true, type: "integer" + } + }, + url: "/notifications/threads/:thread_id/subscription" + }, + getRepoSubscription: { + method: "GET", + params: { + owner: { + required: true, + type: "string" }, - repository_id: { + repo: { required: true, - type: "integer" + type: "string" } }, - url: "/user/installations/:installation_id/repositories/:repository_id" + url: "/repos/:owner/:repo/subscription" }, - checkAccountIsAssociatedWithAny: { + getThread: { method: "GET", params: { - account_id: { + thread_id: { required: true, type: "integer" } }, - url: "/marketplace_listing/accounts/:account_id" + url: "/notifications/threads/:thread_id" }, - checkAccountIsAssociatedWithAnyStubbed: { + getThreadSubscription: { method: "GET", params: { - account_id: { + thread_id: { required: true, type: "integer" } }, - url: "/marketplace_listing/stubbed/accounts/:account_id" + url: "/notifications/threads/:thread_id/subscription" }, - checkAuthorization: { - deprecated: "octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization", + listEventsForOrg: { method: "GET", params: { - access_token: { + org: { required: true, type: "string" }, - client_id: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { required: true, type: "string" } }, - url: "/applications/:client_id/tokens/:access_token" + url: "/users/:username/events/orgs/:org" }, - checkToken: { - headers: { - accept: "application/vnd.github.doctor-strange-preview+json" - }, - method: "POST", + listEventsForUser: { + method: "GET", params: { - access_token: { - type: "string" + page: { + type: "integer" }, - client_id: { + per_page: { + type: "integer" + }, + username: { required: true, type: "string" } }, - url: "/applications/:client_id/token" + url: "/users/:username/events" }, - createContentAttachment: { - headers: { - accept: "application/vnd.github.corsair-preview+json" - }, - method: "POST", + listFeeds: { + method: "GET", + params: {}, + url: "/feeds" + }, + listNotifications: { + method: "GET", params: { - body: { - required: true, + all: { + type: "boolean" + }, + before: { type: "string" }, - content_reference_id: { - required: true, + page: { type: "integer" }, - title: { - required: true, + participating: { + type: "boolean" + }, + per_page: { + type: "integer" + }, + since: { type: "string" } }, - url: "/content_references/:content_reference_id/attachments" + url: "/notifications" }, - createFromManifest: { - headers: { - accept: "application/vnd.github.fury-preview+json" - }, - method: "POST", + listNotificationsForRepo: { + method: "GET", params: { - code: { - required: true, + all: { + type: "boolean" + }, + before: { type: "string" - } - }, - url: "/app-manifests/:code/conversions" - }, - createInstallationToken: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, - method: "POST", - params: { - installation_id: { + }, + owner: { required: true, + type: "string" + }, + page: { type: "integer" }, - permissions: { - type: "object" + participating: { + type: "boolean" }, - repository_ids: { - type: "integer[]" - } - }, - url: "/app/installations/:installation_id/access_tokens" - }, - deleteAuthorization: { - headers: { - accept: "application/vnd.github.doctor-strange-preview+json" - }, - method: "DELETE", - params: { - access_token: { - type: "string" + per_page: { + type: "integer" }, - client_id: { + repo: { required: true, type: "string" + }, + since: { + type: "string" } }, - url: "/applications/:client_id/grant" + url: "/repos/:owner/:repo/notifications" }, - deleteInstallation: { - headers: { - accept: "application/vnd.github.gambit-preview+json,application/vnd.github.machine-man-preview+json" - }, - method: "DELETE", + listPublicEvents: { + method: "GET", params: { - installation_id: { - required: true, + page: { type: "integer" - } - }, - url: "/app/installations/:installation_id" - }, - deleteToken: { - headers: { - accept: "application/vnd.github.doctor-strange-preview+json" - }, - method: "DELETE", - params: { - access_token: { - type: "string" }, - client_id: { - required: true, - type: "string" + per_page: { + type: "integer" } }, - url: "/applications/:client_id/token" + url: "/events" }, - findOrgInstallation: { - deprecated: "octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)", - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listPublicEventsForOrg: { method: "GET", params: { org: { required: true, type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" } }, - url: "/orgs/:org/installation" + url: "/orgs/:org/events" }, - findRepoInstallation: { - deprecated: "octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)", - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listPublicEventsForRepoNetwork: { method: "GET", params: { owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/installation" + url: "/networks/:owner/:repo/events" }, - findUserInstallation: { - deprecated: "octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)", - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listPublicEventsForUser: { method: "GET", params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, username: { required: true, type: "string" } }, - url: "/users/:username/installation" - }, - getAuthenticated: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, - method: "GET", - params: {}, - url: "/app" + url: "/users/:username/events/public" }, - getBySlug: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listReceivedEventsForUser: { method: "GET", params: { - app_slug: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { required: true, type: "string" } }, - url: "/apps/:app_slug" + url: "/users/:username/received_events" }, - getInstallation: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listReceivedPublicEventsForUser: { method: "GET", params: { - installation_id: { - required: true, + page: { type: "integer" - } - }, - url: "/app/installations/:installation_id" - }, - getOrgInstallation: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, - method: "GET", - params: { - org: { + }, + per_page: { + type: "integer" + }, + username: { required: true, type: "string" } }, - url: "/orgs/:org/installation" + url: "/users/:username/received_events/public" }, - getRepoInstallation: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listRepoEvents: { method: "GET", params: { owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/installation" - }, - getUserInstallation: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, - method: "GET", - params: { - username: { - required: true, - type: "string" - } - }, - url: "/users/:username/installation" + url: "/repos/:owner/:repo/events" }, - listAccountsUserOrOrgOnPlan: { + listReposStarredByAuthenticatedUser: { method: "GET", params: { direction: { @@ -3669,18 +4266,14 @@ var endpointsByScope = { per_page: { type: "integer" }, - plan_id: { - required: true, - type: "integer" - }, sort: { enum: ["created", "updated"], type: "string" } }, - url: "/marketplace_listing/plans/:plan_id/accounts" + url: "/user/starred" }, - listAccountsUserOrOrgOnPlanStubbed: { + listReposStarredByUser: { method: "GET", params: { direction: { @@ -3693,40 +4286,54 @@ var endpointsByScope = { per_page: { type: "integer" }, - plan_id: { - required: true, - type: "integer" - }, sort: { enum: ["created", "updated"], type: "string" + }, + username: { + required: true, + type: "string" } }, - url: "/marketplace_listing/stubbed/plans/:plan_id/accounts" + url: "/users/:username/starred" }, - listInstallationReposForAuthenticatedUser: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" + listReposWatchedByUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } }, + url: "/users/:username/subscriptions" + }, + listStargazersForRepo: { method: "GET", params: { - installation_id: { + owner: { required: true, - type: "integer" + type: "string" }, page: { type: "integer" }, per_page: { type: "integer" + }, + repo: { + required: true, + type: "string" } }, - url: "/user/installations/:installation_id/repositories" + url: "/repos/:owner/:repo/stargazers" }, - listInstallations: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listWatchedReposForAuthenticatedUser: { method: "GET", params: { page: { @@ -3736,91 +4343,132 @@ var endpointsByScope = { type: "integer" } }, - url: "/app/installations" + url: "/user/subscriptions" }, - listInstallationsForAuthenticatedUser: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, + listWatchersForRepo: { method: "GET", params: { + owner: { + required: true, + type: "string" + }, page: { type: "integer" }, per_page: { type: "integer" + }, + repo: { + required: true, + type: "string" } }, - url: "/user/installations" + url: "/repos/:owner/:repo/subscribers" }, - listMarketplacePurchasesForAuthenticatedUser: { - method: "GET", + markAsRead: { + method: "PUT", + params: { + last_read_at: { + type: "string" + } + }, + url: "/notifications" + }, + markNotificationsAsReadForRepo: { + method: "PUT", + params: { + last_read_at: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/notifications" + }, + markThreadAsRead: { + method: "PATCH", params: { - page: { - type: "integer" - }, - per_page: { + thread_id: { + required: true, type: "integer" } }, - url: "/user/marketplace_purchases" + url: "/notifications/threads/:thread_id" }, - listMarketplacePurchasesForAuthenticatedUserStubbed: { - method: "GET", + setRepoSubscription: { + method: "PUT", params: { - page: { - type: "integer" + ignored: { + type: "boolean" }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + subscribed: { + type: "boolean" } }, - url: "/user/marketplace_purchases/stubbed" + url: "/repos/:owner/:repo/subscription" }, - listPlans: { - method: "GET", + setThreadSubscription: { + method: "PUT", params: { - page: { - type: "integer" + ignored: { + type: "boolean" }, - per_page: { + thread_id: { + required: true, type: "integer" } }, - url: "/marketplace_listing/plans" + url: "/notifications/threads/:thread_id/subscription" }, - listPlansStubbed: { - method: "GET", + starRepo: { + method: "PUT", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" } }, - url: "/marketplace_listing/stubbed/plans" + url: "/user/starred/:owner/:repo" }, - listRepos: { - headers: { - accept: "application/vnd.github.machine-man-preview+json" - }, - method: "GET", + unstarRepo: { + method: "DELETE", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" } }, - url: "/installation/repositories" - }, - removeRepoFromInstallation: { + url: "/user/starred/:owner/:repo" + } + }, + apps: { + addRepoToInstallation: { headers: { accept: "application/vnd.github.machine-man-preview+json" }, - method: "DELETE", + method: "PUT", params: { installation_id: { required: true, @@ -3833,40 +4481,29 @@ var endpointsByScope = { }, url: "/user/installations/:installation_id/repositories/:repository_id" }, - resetAuthorization: { - deprecated: "octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization", - method: "POST", + checkAccountIsAssociatedWithAny: { + method: "GET", params: { - access_token: { - required: true, - type: "string" - }, - client_id: { + account_id: { required: true, - type: "string" + type: "integer" } }, - url: "/applications/:client_id/tokens/:access_token" + url: "/marketplace_listing/accounts/:account_id" }, - resetToken: { - headers: { - accept: "application/vnd.github.doctor-strange-preview+json" - }, - method: "PATCH", + checkAccountIsAssociatedWithAnyStubbed: { + method: "GET", params: { - access_token: { - type: "string" - }, - client_id: { + account_id: { required: true, - type: "string" + type: "integer" } }, - url: "/applications/:client_id/token" + url: "/marketplace_listing/stubbed/accounts/:account_id" }, - revokeAuthorizationForApplication: { - deprecated: "octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application", - method: "DELETE", + checkAuthorization: { + deprecated: "octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization", + method: "GET", params: { access_token: { required: true, @@ -3879,12 +4516,13 @@ var endpointsByScope = { }, url: "/applications/:client_id/tokens/:access_token" }, - revokeGrantForApplication: { - deprecated: "octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application", - method: "DELETE", + checkToken: { + headers: { + accept: "application/vnd.github.doctor-strange-preview+json" + }, + method: "POST", params: { access_token: { - required: true, type: "string" }, client_id: { @@ -3892,124 +4530,127 @@ var endpointsByScope = { type: "string" } }, - url: "/applications/:client_id/grants/:access_token" + url: "/applications/:client_id/token" }, - revokeInstallationToken: { - headers: { - accept: "application/vnd.github.gambit-preview+json" - }, - method: "DELETE", - params: {}, - url: "/installation/token" - } - }, - checks: { - create: { + createContentAttachment: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.corsair-preview+json" }, method: "POST", params: { - actions: { - type: "object[]" - }, - "actions[].description": { - required: true, - type: "string" - }, - "actions[].identifier": { - required: true, - type: "string" - }, - "actions[].label": { - required: true, - type: "string" - }, - completed_at: { - type: "string" - }, - conclusion: { - enum: ["success", "failure", "neutral", "cancelled", "timed_out", "action_required"], - type: "string" - }, - details_url: { - type: "string" - }, - external_id: { - type: "string" - }, - head_sha: { - required: true, - type: "string" - }, - name: { - required: true, - type: "string" - }, - output: { - type: "object" - }, - "output.annotations": { - type: "object[]" - }, - "output.annotations[].annotation_level": { - enum: ["notice", "warning", "failure"], + body: { required: true, type: "string" }, - "output.annotations[].end_column": { - type: "integer" - }, - "output.annotations[].end_line": { + content_reference_id: { required: true, type: "integer" }, - "output.annotations[].message": { + title: { required: true, type: "string" - }, - "output.annotations[].path": { + } + }, + url: "/content_references/:content_reference_id/attachments" + }, + createFromManifest: { + headers: { + accept: "application/vnd.github.fury-preview+json" + }, + method: "POST", + params: { + code: { required: true, type: "string" - }, - "output.annotations[].raw_details": { - type: "string" - }, - "output.annotations[].start_column": { - type: "integer" - }, - "output.annotations[].start_line": { + } + }, + url: "/app-manifests/:code/conversions" + }, + createInstallationToken: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "POST", + params: { + installation_id: { required: true, type: "integer" }, - "output.annotations[].title": { - type: "string" - }, - "output.images": { - type: "object[]" - }, - "output.images[].alt": { - required: true, - type: "string" + permissions: { + type: "object" }, - "output.images[].caption": { + repository_ids: { + type: "integer[]" + } + }, + url: "/app/installations/:installation_id/access_tokens" + }, + deleteAuthorization: { + headers: { + accept: "application/vnd.github.doctor-strange-preview+json" + }, + method: "DELETE", + params: { + access_token: { type: "string" }, - "output.images[].image_url": { + client_id: { required: true, type: "string" - }, - "output.summary": { + } + }, + url: "/applications/:client_id/grant" + }, + deleteInstallation: { + headers: { + accept: "application/vnd.github.gambit-preview+json,application/vnd.github.machine-man-preview+json" + }, + method: "DELETE", + params: { + installation_id: { required: true, + type: "integer" + } + }, + url: "/app/installations/:installation_id" + }, + deleteToken: { + headers: { + accept: "application/vnd.github.doctor-strange-preview+json" + }, + method: "DELETE", + params: { + access_token: { type: "string" }, - "output.text": { + client_id: { + required: true, type: "string" - }, - "output.title": { + } + }, + url: "/applications/:client_id/token" + }, + findOrgInstallation: { + deprecated: "octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)", + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + org: { required: true, type: "string" - }, + } + }, + url: "/orgs/:org/installation" + }, + findRepoInstallation: { + deprecated: "octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)", + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { owner: { required: true, type: "string" @@ -4017,48 +4658,77 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - started_at: { - type: "string" - }, - status: { - enum: ["queued", "in_progress", "completed"], - type: "string" } }, - url: "/repos/:owner/:repo/check-runs" + url: "/repos/:owner/:repo/installation" }, - createSuite: { + findUserInstallation: { + deprecated: "octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)", headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, - method: "POST", + method: "GET", params: { - head_sha: { - required: true, - type: "string" - }, - owner: { + username: { required: true, type: "string" - }, - repo: { + } + }, + url: "/users/:username/installation" + }, + getAuthenticated: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: {}, + url: "/app" + }, + getBySlug: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + app_slug: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/check-suites" + url: "/apps/:app_slug" }, - get: { + getInstallation: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, method: "GET", params: { - check_run_id: { + installation_id: { required: true, type: "integer" - }, + } + }, + url: "/app/installations/:installation_id" + }, + getOrgInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/installation" + }, + getRepoInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { owner: { required: true, type: "string" @@ -4068,219 +4738,274 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/check-runs/:check_run_id" + url: "/repos/:owner/:repo/installation" }, - getSuite: { + getUserInstallation: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, method: "GET", params: { - check_suite_id: { + username: { required: true, + type: "string" + } + }, + url: "/users/:username/installation" + }, + listAccountsUserOrOrgOnPlan: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { type: "integer" }, - owner: { + per_page: { + type: "integer" + }, + plan_id: { required: true, + type: "integer" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/marketplace_listing/plans/:plan_id/accounts" + }, + listAccountsUserOrOrgOnPlanStubbed: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], type: "string" }, - repo: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + plan_id: { required: true, + type: "integer" + }, + sort: { + enum: ["created", "updated"], type: "string" } }, - url: "/repos/:owner/:repo/check-suites/:check_suite_id" + url: "/marketplace_listing/stubbed/plans/:plan_id/accounts" }, - listAnnotations: { + listInstallationReposForAuthenticatedUser: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, method: "GET", params: { - check_run_id: { + installation_id: { required: true, type: "integer" }, - owner: { - required: true, - type: "string" - }, page: { type: "integer" }, per_page: { type: "integer" + } + }, + url: "/user/installations/:installation_id/repositories" + }, + listInstallations: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" }, - repo: { - required: true, - type: "string" + per_page: { + type: "integer" } }, - url: "/repos/:owner/:repo/check-runs/:check_run_id/annotations" + url: "/app/installations" }, - listForRef: { + listInstallationsForAuthenticatedUser: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, method: "GET", params: { - check_name: { - type: "string" + page: { + type: "integer" }, - filter: { - enum: ["latest", "all"], - type: "string" + per_page: { + type: "integer" + } + }, + url: "/user/installations" + }, + listMarketplacePurchasesForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" }, - owner: { - required: true, - type: "string" + per_page: { + type: "integer" + } + }, + url: "/user/marketplace_purchases" + }, + listMarketplacePurchasesForAuthenticatedUserStubbed: { + method: "GET", + params: { + page: { + type: "integer" }, + per_page: { + type: "integer" + } + }, + url: "/user/marketplace_purchases/stubbed" + }, + listPlans: { + method: "GET", + params: { page: { type: "integer" }, per_page: { type: "integer" - }, - ref: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - status: { - enum: ["queued", "in_progress", "completed"], - type: "string" } }, - url: "/repos/:owner/:repo/commits/:ref/check-runs" + url: "/marketplace_listing/plans" }, - listForSuite: { - headers: { - accept: "application/vnd.github.antiope-preview+json" - }, + listPlansStubbed: { method: "GET", params: { - check_name: { - type: "string" - }, - check_suite_id: { - required: true, - type: "integer" - }, - filter: { - enum: ["latest", "all"], - type: "string" - }, - owner: { - required: true, - type: "string" - }, page: { type: "integer" }, per_page: { type: "integer" - }, - repo: { - required: true, - type: "string" - }, - status: { - enum: ["queued", "in_progress", "completed"], - type: "string" } }, - url: "/repos/:owner/:repo/check-suites/:check_suite_id/check-runs" + url: "/marketplace_listing/stubbed/plans" }, - listSuitesForRef: { + listRepos: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, method: "GET", params: { - app_id: { - type: "integer" - }, - check_name: { - type: "string" - }, - owner: { - required: true, - type: "string" - }, page: { type: "integer" }, per_page: { type: "integer" - }, - ref: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" } }, - url: "/repos/:owner/:repo/commits/:ref/check-suites" + url: "/installation/repositories" }, - rerequestSuite: { + removeRepoFromInstallation: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, - method: "POST", + method: "DELETE", params: { - check_suite_id: { + installation_id: { required: true, type: "integer" }, - owner: { + repository_id: { + required: true, + type: "integer" + } + }, + url: "/user/installations/:installation_id/repositories/:repository_id" + }, + resetAuthorization: { + deprecated: "octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization", + method: "POST", + params: { + access_token: { required: true, type: "string" }, - repo: { + client_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/check-suites/:check_suite_id/rerequest" + url: "/applications/:client_id/tokens/:access_token" }, - setSuitesPreferences: { + resetToken: { headers: { - accept: "application/vnd.github.antiope-preview+json" + accept: "application/vnd.github.doctor-strange-preview+json" }, method: "PATCH", params: { - auto_trigger_checks: { - type: "object[]" + access_token: { + type: "string" }, - "auto_trigger_checks[].app_id": { + client_id: { required: true, - type: "integer" - }, - "auto_trigger_checks[].setting": { + type: "string" + } + }, + url: "/applications/:client_id/token" + }, + revokeAuthorizationForApplication: { + deprecated: "octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application", + method: "DELETE", + params: { + access_token: { required: true, - type: "boolean" + type: "string" }, - owner: { + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/tokens/:access_token" + }, + revokeGrantForApplication: { + deprecated: "octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application", + method: "DELETE", + params: { + access_token: { required: true, type: "string" }, - repo: { + client_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/check-suites/preferences" + url: "/applications/:client_id/grants/:access_token" }, - update: { + revokeInstallationToken: { + headers: { + accept: "application/vnd.github.gambit-preview+json" + }, + method: "DELETE", + params: {}, + url: "/installation/token" + } + }, + checks: { + create: { headers: { accept: "application/vnd.github.antiope-preview+json" }, - method: "PATCH", + method: "POST", params: { actions: { type: "object[]" @@ -4297,10 +5022,6 @@ var endpointsByScope = { required: true, type: "string" }, - check_run_id: { - required: true, - type: "integer" - }, completed_at: { type: "string" }, @@ -4314,7 +5035,12 @@ var endpointsByScope = { external_id: { type: "string" }, + head_sha: { + required: true, + type: "string" + }, name: { + required: true, type: "string" }, output: { @@ -4367,576 +5093,388 @@ var endpointsByScope = { type: "string" }, "output.images[].image_url": { - required: true, - type: "string" - }, - "output.summary": { - required: true, - type: "string" - }, - "output.text": { - type: "string" - }, - "output.title": { - type: "string" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - started_at: { - type: "string" - }, - status: { - enum: ["queued", "in_progress", "completed"], - type: "string" - } - }, - url: "/repos/:owner/:repo/check-runs/:check_run_id" - } - }, - codesOfConduct: { - getConductCode: { - headers: { - accept: "application/vnd.github.scarlet-witch-preview+json" - }, - method: "GET", - params: { - key: { - required: true, - type: "string" - } - }, - url: "/codes_of_conduct/:key" - }, - getForRepo: { - headers: { - accept: "application/vnd.github.scarlet-witch-preview+json" - }, - method: "GET", - params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/community/code_of_conduct" - }, - listConductCodes: { - headers: { - accept: "application/vnd.github.scarlet-witch-preview+json" - }, - method: "GET", - params: {}, - url: "/codes_of_conduct" - } - }, - emojis: { - get: { - method: "GET", - params: {}, - url: "/emojis" - } - }, - gists: { - checkIsStarred: { - method: "GET", - params: { - gist_id: { - required: true, - type: "string" - } - }, - url: "/gists/:gist_id/star" - }, - create: { - method: "POST", - params: { - description: { + required: true, type: "string" }, - files: { + "output.summary": { required: true, - type: "object" + type: "string" }, - "files.content": { + "output.text": { type: "string" }, - public: { - type: "boolean" - } - }, - url: "/gists" - }, - createComment: { - method: "POST", - params: { - body: { + "output.title": { required: true, type: "string" }, - gist_id: { + owner: { required: true, type: "string" - } - }, - url: "/gists/:gist_id/comments" - }, - delete: { - method: "DELETE", - params: { - gist_id: { + }, + repo: { required: true, type: "string" + }, + started_at: { + type: "string" + }, + status: { + enum: ["queued", "in_progress", "completed"], + type: "string" } }, - url: "/gists/:gist_id" + url: "/repos/:owner/:repo/check-runs" }, - deleteComment: { - method: "DELETE", + createSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "POST", params: { - comment_id: { + head_sha: { required: true, - type: "integer" + type: "string" }, - gist_id: { + owner: { required: true, type: "string" - } - }, - url: "/gists/:gist_id/comments/:comment_id" - }, - fork: { - method: "POST", - params: { - gist_id: { + }, + repo: { required: true, type: "string" } }, - url: "/gists/:gist_id/forks" + url: "/repos/:owner/:repo/check-suites" }, get: { - method: "GET", - params: { - gist_id: { - required: true, - type: "string" - } + headers: { + accept: "application/vnd.github.antiope-preview+json" }, - url: "/gists/:gist_id" - }, - getComment: { method: "GET", params: { - comment_id: { + check_run_id: { required: true, type: "integer" }, - gist_id: { - required: true, - type: "string" - } - }, - url: "/gists/:gist_id/comments/:comment_id" - }, - getRevision: { - method: "GET", - params: { - gist_id: { + owner: { required: true, type: "string" }, - sha: { + repo: { required: true, type: "string" } }, - url: "/gists/:gist_id/:sha" + url: "/repos/:owner/:repo/check-runs/:check_run_id" }, - list: { - method: "GET", - params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - since: { - type: "string" - } + getSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" }, - url: "/gists" - }, - listComments: { method: "GET", params: { - gist_id: { + check_suite_id: { required: true, - type: "string" - }, - page: { type: "integer" }, - per_page: { - type: "integer" - } - }, - url: "/gists/:gist_id/comments" - }, - listCommits: { - method: "GET", - params: { - gist_id: { + owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - } - }, - url: "/gists/:gist_id/commits" - }, - listForks: { - method: "GET", - params: { - gist_id: { + repo: { required: true, type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" } }, - url: "/gists/:gist_id/forks" + url: "/repos/:owner/:repo/check-suites/:check_suite_id" }, - listPublic: { - method: "GET", - params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - since: { - type: "string" - } + listAnnotations: { + headers: { + accept: "application/vnd.github.antiope-preview+json" }, - url: "/gists/public" - }, - listPublicForUser: { method: "GET", params: { - page: { - type: "integer" - }, - per_page: { + check_run_id: { + required: true, type: "integer" }, - since: { - type: "string" - }, - username: { + owner: { required: true, type: "string" - } - }, - url: "/users/:username/gists" - }, - listStarred: { - method: "GET", - params: { + }, page: { type: "integer" }, per_page: { type: "integer" }, - since: { - type: "string" - } - }, - url: "/gists/starred" - }, - star: { - method: "PUT", - params: { - gist_id: { + repo: { required: true, type: "string" } }, - url: "/gists/:gist_id/star" + url: "/repos/:owner/:repo/check-runs/:check_run_id/annotations" }, - unstar: { - method: "DELETE", - params: { - gist_id: { - required: true, - type: "string" - } + listForRef: { + headers: { + accept: "application/vnd.github.antiope-preview+json" }, - url: "/gists/:gist_id/star" - }, - update: { - method: "PATCH", + method: "GET", params: { - description: { - type: "string" - }, - files: { - type: "object" - }, - "files.content": { + check_name: { type: "string" }, - "files.filename": { + filter: { + enum: ["latest", "all"], type: "string" }, - gist_id: { - required: true, - type: "string" - } - }, - url: "/gists/:gist_id" - }, - updateComment: { - method: "PATCH", - params: { - body: { + owner: { required: true, type: "string" }, - comment_id: { - required: true, + page: { type: "integer" }, - gist_id: { - required: true, - type: "string" - } - }, - url: "/gists/:gist_id/comments/:comment_id" - } - }, - git: { - createBlob: { - method: "POST", - params: { - content: { - required: true, - type: "string" - }, - encoding: { - type: "string" + per_page: { + type: "integer" }, - owner: { + ref: { required: true, type: "string" }, repo: { required: true, type: "string" + }, + status: { + enum: ["queued", "in_progress", "completed"], + type: "string" } }, - url: "/repos/:owner/:repo/git/blobs" + url: "/repos/:owner/:repo/commits/:ref/check-runs" }, - createCommit: { - method: "POST", + listForSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", params: { - author: { - type: "object" - }, - "author.date": { + check_name: { type: "string" }, - "author.email": { + check_suite_id: { + required: true, + type: "integer" + }, + filter: { + enum: ["latest", "all"], type: "string" }, - "author.name": { + owner: { + required: true, type: "string" }, - committer: { - type: "object" + page: { + type: "integer" }, - "committer.date": { - type: "string" + per_page: { + type: "integer" }, - "committer.email": { + repo: { + required: true, type: "string" }, - "committer.name": { + status: { + enum: ["queued", "in_progress", "completed"], type: "string" + } + }, + url: "/repos/:owner/:repo/check-suites/:check_suite_id/check-runs" + }, + listSuitesForRef: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", + params: { + app_id: { + type: "integer" }, - message: { - required: true, + check_name: { type: "string" }, owner: { required: true, type: "string" }, - parents: { - required: true, - type: "string[]" + page: { + type: "integer" }, - repo: { - required: true, - type: "string" + per_page: { + type: "integer" }, - signature: { + ref: { + required: true, type: "string" }, - tree: { + repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/commits" + url: "/repos/:owner/:repo/commits/:ref/check-suites" }, - createRef: { + rerequestSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, method: "POST", params: { + check_suite_id: { + required: true, + type: "integer" + }, owner: { required: true, type: "string" }, - ref: { + repo: { required: true, type: "string" + } + }, + url: "/repos/:owner/:repo/check-suites/:check_suite_id/rerequest" + }, + setSuitesPreferences: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "PATCH", + params: { + auto_trigger_checks: { + type: "object[]" }, - repo: { + "auto_trigger_checks[].app_id": { + required: true, + type: "integer" + }, + "auto_trigger_checks[].setting": { + required: true, + type: "boolean" + }, + owner: { required: true, type: "string" }, - sha: { + repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/refs" + url: "/repos/:owner/:repo/check-suites/preferences" }, - createTag: { - method: "POST", + update: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "PATCH", params: { - message: { - required: true, - type: "string" + actions: { + type: "object[]" }, - object: { + "actions[].description": { required: true, type: "string" }, - owner: { + "actions[].identifier": { required: true, type: "string" }, - repo: { + "actions[].label": { required: true, type: "string" }, - tag: { + check_run_id: { required: true, + type: "integer" + }, + completed_at: { type: "string" }, - tagger: { - type: "object" + conclusion: { + enum: ["success", "failure", "neutral", "cancelled", "timed_out", "action_required"], + type: "string" }, - "tagger.date": { + details_url: { type: "string" }, - "tagger.email": { + external_id: { type: "string" }, - "tagger.name": { + name: { type: "string" }, - type: { - enum: ["commit", "tree", "blob"], + output: { + type: "object" + }, + "output.annotations": { + type: "object[]" + }, + "output.annotations[].annotation_level": { + enum: ["notice", "warning", "failure"], required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/git/tags" - }, - createTree: { - method: "POST", - params: { - base_tree: { - type: "string" }, - owner: { + "output.annotations[].end_column": { + type: "integer" + }, + "output.annotations[].end_line": { required: true, - type: "string" + type: "integer" }, - repo: { + "output.annotations[].message": { required: true, type: "string" }, - tree: { + "output.annotations[].path": { required: true, - type: "object[]" - }, - "tree[].content": { type: "string" }, - "tree[].mode": { - enum: ["100644", "100755", "040000", "160000", "120000"], + "output.annotations[].raw_details": { type: "string" }, - "tree[].path": { + "output.annotations[].start_column": { + type: "integer" + }, + "output.annotations[].start_line": { + required: true, + type: "integer" + }, + "output.annotations[].title": { type: "string" }, - "tree[].sha": { - allowNull: true, + "output.images": { + type: "object[]" + }, + "output.images[].alt": { + required: true, type: "string" }, - "tree[].type": { - enum: ["blob", "tree", "commit"], + "output.images[].caption": { type: "string" - } - }, - url: "/repos/:owner/:repo/git/trees" - }, - deleteRef: { - method: "DELETE", - params: { - owner: { + }, + "output.images[].image_url": { required: true, type: "string" }, - ref: { + "output.summary": { required: true, type: "string" }, - repo: { - required: true, + "output.text": { type: "string" - } - }, - url: "/repos/:owner/:repo/git/refs/:ref" - }, - getBlob: { - method: "GET", - params: { - file_sha: { - required: true, + }, + "output.title": { type: "string" }, owner: { @@ -4946,422 +5484,363 @@ var endpointsByScope = { repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/git/blobs/:file_sha" - }, - getCommit: { - method: "GET", - params: { - commit_sha: { - required: true, - type: "string" }, - owner: { - required: true, + started_at: { type: "string" }, - repo: { + status: { + enum: ["queued", "in_progress", "completed"], + type: "string" + } + }, + url: "/repos/:owner/:repo/check-runs/:check_run_id" + } + }, + codesOfConduct: { + getConductCode: { + headers: { + accept: "application/vnd.github.scarlet-witch-preview+json" + }, + method: "GET", + params: { + key: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/commits/:commit_sha" + url: "/codes_of_conduct/:key" }, - getRef: { + getForRepo: { + headers: { + accept: "application/vnd.github.scarlet-witch-preview+json" + }, method: "GET", params: { owner: { required: true, type: "string" }, - ref: { - required: true, - type: "string" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/ref/:ref" + url: "/repos/:owner/:repo/community/code_of_conduct" }, - getTag: { + listConductCodes: { + headers: { + accept: "application/vnd.github.scarlet-witch-preview+json" + }, + method: "GET", + params: {}, + url: "/codes_of_conduct" + } + }, + emojis: { + get: { + method: "GET", + params: {}, + url: "/emojis" + } + }, + gists: { + checkIsStarred: { method: "GET", params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - tag_sha: { + gist_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/tags/:tag_sha" + url: "/gists/:gist_id/star" }, - getTree: { - method: "GET", + create: { + method: "POST", params: { - owner: { - required: true, + description: { type: "string" }, - recursive: { - enum: ["1"], - type: "integer" - }, - repo: { + files: { required: true, - type: "string" + type: "object" }, - tree_sha: { - required: true, + "files.content": { type: "string" + }, + public: { + type: "boolean" } }, - url: "/repos/:owner/:repo/git/trees/:tree_sha" + url: "/gists" }, - listMatchingRefs: { - method: "GET", + createComment: { + method: "POST", params: { - owner: { + body: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - ref: { + gist_id: { required: true, type: "string" - }, - repo: { + } + }, + url: "/gists/:gist_id/comments" + }, + delete: { + method: "DELETE", + params: { + gist_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/matching-refs/:ref" + url: "/gists/:gist_id" }, - listRefs: { - method: "GET", + deleteComment: { + method: "DELETE", params: { - namespace: { - type: "string" - }, - owner: { + comment_id: { required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { type: "integer" }, - repo: { + gist_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/refs/:namespace" + url: "/gists/:gist_id/comments/:comment_id" }, - updateRef: { - method: "PATCH", + fork: { + method: "POST", params: { - force: { - type: "boolean" - }, - owner: { - required: true, - type: "string" - }, - ref: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, - sha: { + gist_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/git/refs/:ref" - } - }, - gitignore: { - getTemplate: { + url: "/gists/:gist_id/forks" + }, + get: { method: "GET", params: { - name: { + gist_id: { required: true, type: "string" } }, - url: "/gitignore/templates/:name" + url: "/gists/:gist_id" }, - listTemplates: { + getComment: { method: "GET", - params: {}, - url: "/gitignore/templates" - } - }, - interactions: { - addOrUpdateRestrictionsForOrg: { - headers: { - accept: "application/vnd.github.sombra-preview+json" - }, - method: "PUT", params: { - limit: { - enum: ["existing_users", "contributors_only", "collaborators_only"], + comment_id: { required: true, - type: "string" + type: "integer" }, - org: { + gist_id: { required: true, type: "string" } }, - url: "/orgs/:org/interaction-limits" + url: "/gists/:gist_id/comments/:comment_id" }, - addOrUpdateRestrictionsForRepo: { - headers: { - accept: "application/vnd.github.sombra-preview+json" - }, - method: "PUT", + getRevision: { + method: "GET", params: { - limit: { - enum: ["existing_users", "contributors_only", "collaborators_only"], + gist_id: { required: true, type: "string" }, - owner: { + sha: { required: true, type: "string" + } + }, + url: "/gists/:gist_id/:sha" + }, + list: { + method: "GET", + params: { + page: { + type: "integer" }, - repo: { - required: true, + per_page: { + type: "integer" + }, + since: { type: "string" } }, - url: "/repos/:owner/:repo/interaction-limits" + url: "/gists" }, - getRestrictionsForOrg: { - headers: { - accept: "application/vnd.github.sombra-preview+json" - }, + listComments: { method: "GET", params: { - org: { + gist_id: { required: true, type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" } }, - url: "/orgs/:org/interaction-limits" + url: "/gists/:gist_id/comments" }, - getRestrictionsForRepo: { - headers: { - accept: "application/vnd.github.sombra-preview+json" - }, + listCommits: { method: "GET", params: { - owner: { + gist_id: { required: true, type: "string" }, - repo: { - required: true, - type: "string" + page: { + type: "integer" + }, + per_page: { + type: "integer" } }, - url: "/repos/:owner/:repo/interaction-limits" + url: "/gists/:gist_id/commits" }, - removeRestrictionsForOrg: { - headers: { - accept: "application/vnd.github.sombra-preview+json" - }, - method: "DELETE", + listForks: { + method: "GET", params: { - org: { + gist_id: { required: true, type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" } }, - url: "/orgs/:org/interaction-limits" + url: "/gists/:gist_id/forks" }, - removeRestrictionsForRepo: { - headers: { - accept: "application/vnd.github.sombra-preview+json" - }, - method: "DELETE", + listPublic: { + method: "GET", params: { - owner: { - required: true, - type: "string" + page: { + type: "integer" }, - repo: { - required: true, + per_page: { + type: "integer" + }, + since: { type: "string" } }, - url: "/repos/:owner/:repo/interaction-limits" - } - }, - issues: { - addAssignees: { - method: "POST", + url: "/gists/public" + }, + listPublicForUser: { + method: "GET", params: { - assignees: { - type: "string[]" - }, - issue_number: { - required: true, + page: { type: "integer" }, - number: { - alias: "issue_number", - deprecated: true, + per_page: { type: "integer" }, - owner: { - required: true, + since: { type: "string" }, - repo: { + username: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/assignees" + url: "/users/:username/gists" }, - addLabels: { - method: "POST", + listStarred: { + method: "GET", params: { - issue_number: { - required: true, + page: { type: "integer" }, - labels: { - required: true, - type: "string[]" - }, - number: { - alias: "issue_number", - deprecated: true, + per_page: { type: "integer" }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, + since: { type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/labels" + url: "/gists/starred" }, - checkAssignee: { - method: "GET", + star: { + method: "PUT", params: { - assignee: { - required: true, - type: "string" - }, - owner: { + gist_id: { required: true, type: "string" - }, - repo: { + } + }, + url: "/gists/:gist_id/star" + }, + unstar: { + method: "DELETE", + params: { + gist_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/assignees/:assignee" + url: "/gists/:gist_id/star" }, - create: { - method: "POST", + update: { + method: "PATCH", params: { - assignee: { - type: "string" - }, - assignees: { - type: "string[]" - }, - body: { + description: { type: "string" }, - labels: { - type: "string[]" - }, - milestone: { - type: "integer" + files: { + type: "object" }, - owner: { - required: true, + "files.content": { type: "string" }, - repo: { - required: true, + "files.filename": { type: "string" }, - title: { + gist_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues" + url: "/gists/:gist_id" }, - createComment: { - method: "POST", + updateComment: { + method: "PATCH", params: { body: { required: true, type: "string" }, - issue_number: { + comment_id: { required: true, type: "integer" }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - repo: { + gist_id: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/comments" - }, - createLabel: { + url: "/gists/:gist_id/comments/:comment_id" + } + }, + git: { + createBlob: { method: "POST", params: { - color: { + content: { required: true, type: "string" }, - description: { - type: "string" - }, - name: { - required: true, + encoding: { type: "string" }, owner: { @@ -5373,158 +5852,91 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/labels" + url: "/repos/:owner/:repo/git/blobs" }, - createMilestone: { + createCommit: { method: "POST", params: { - description: { - type: "string" - }, - due_on: { - type: "string" + author: { + type: "object" }, - owner: { - required: true, + "author.date": { type: "string" }, - repo: { - required: true, + "author.email": { type: "string" }, - state: { - enum: ["open", "closed"], + "author.name": { type: "string" }, - title: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/milestones" - }, - deleteComment: { - method: "DELETE", - params: { - comment_id: { - required: true, - type: "integer" + committer: { + type: "object" }, - owner: { - required: true, + "committer.date": { type: "string" }, - repo: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/issues/comments/:comment_id" - }, - deleteLabel: { - method: "DELETE", - params: { - name: { - required: true, + "committer.email": { type: "string" }, - owner: { - required: true, + "committer.name": { type: "string" }, - repo: { + message: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/labels/:name" - }, - deleteMilestone: { - method: "DELETE", - params: { - milestone_number: { - required: true, - type: "integer" - }, - number: { - alias: "milestone_number", - deprecated: true, - type: "integer" }, owner: { required: true, type: "string" }, - repo: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/milestones/:milestone_number" - }, - get: { - method: "GET", - params: { - issue_number: { - required: true, - type: "integer" - }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" - }, - owner: { + parents: { required: true, - type: "string" + type: "string[]" }, repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/issues/:issue_number" - }, - getComment: { - method: "GET", - params: { - comment_id: { - required: true, - type: "integer" }, - owner: { - required: true, + signature: { type: "string" }, - repo: { + tree: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues/comments/:comment_id" + url: "/repos/:owner/:repo/git/commits" }, - getEvent: { - method: "GET", + createRef: { + method: "POST", params: { - event_id: { + owner: { required: true, - type: "integer" + type: "string" }, - owner: { + ref: { required: true, type: "string" }, repo: { required: true, type: "string" + }, + sha: { + required: true, + type: "string" } }, - url: "/repos/:owner/:repo/issues/events/:event_id" + url: "/repos/:owner/:repo/git/refs" }, - getLabel: { - method: "GET", + createTag: { + method: "POST", params: { - name: { + message: { + required: true, + type: "string" + }, + object: { required: true, type: "string" }, @@ -5535,124 +5947,111 @@ var endpointsByScope = { repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/labels/:name" - }, - getMilestone: { - method: "GET", - params: { - milestone_number: { + }, + tag: { required: true, - type: "integer" + type: "string" }, - number: { - alias: "milestone_number", - deprecated: true, - type: "integer" + tagger: { + type: "object" }, - owner: { - required: true, + "tagger.date": { type: "string" }, - repo: { + "tagger.email": { + type: "string" + }, + "tagger.name": { + type: "string" + }, + type: { + enum: ["commit", "tree", "blob"], required: true, type: "string" } }, - url: "/repos/:owner/:repo/milestones/:milestone_number" + url: "/repos/:owner/:repo/git/tags" }, - list: { - method: "GET", + createTree: { + method: "POST", params: { - direction: { - enum: ["asc", "desc"], + base_tree: { type: "string" }, - filter: { - enum: ["assigned", "created", "mentioned", "subscribed", "all"], + owner: { + required: true, type: "string" }, - labels: { + repo: { + required: true, type: "string" }, - page: { - type: "integer" + tree: { + required: true, + type: "object[]" }, - per_page: { - type: "integer" + "tree[].content": { + type: "string" }, - since: { + "tree[].mode": { + enum: ["100644", "100755", "040000", "160000", "120000"], type: "string" }, - sort: { - enum: ["created", "updated", "comments"], + "tree[].path": { type: "string" }, - state: { - enum: ["open", "closed", "all"], + "tree[].sha": { + allowNull: true, + type: "string" + }, + "tree[].type": { + enum: ["blob", "tree", "commit"], type: "string" } }, - url: "/issues" + url: "/repos/:owner/:repo/git/trees" }, - listAssignees: { - method: "GET", + deleteRef: { + method: "DELETE", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + ref: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/assignees" + url: "/repos/:owner/:repo/git/refs/:ref" }, - listComments: { + getBlob: { method: "GET", params: { - issue_number: { + file_sha: { required: true, - type: "integer" - }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" + type: "string" }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" - }, - since: { - type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/comments" + url: "/repos/:owner/:repo/git/blobs/:file_sha" }, - listCommentsForRepo: { + getCommit: { method: "GET", params: { - direction: { - enum: ["asc", "desc"], + commit_sha: { + required: true, type: "string" }, owner: { @@ -5662,147 +6061,72 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - since: { - type: "string" - }, - sort: { - enum: ["created", "updated"], - type: "string" } }, - url: "/repos/:owner/:repo/issues/comments" + url: "/repos/:owner/:repo/git/commits/:commit_sha" }, - listEvents: { + getRef: { method: "GET", params: { - issue_number: { - required: true, - type: "integer" - }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" - }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + ref: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/events" + url: "/repos/:owner/:repo/git/ref/:ref" }, - listEventsForRepo: { + getTag: { method: "GET", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" + }, + tag_sha: { + required: true, + type: "string" } }, - url: "/repos/:owner/:repo/issues/events" + url: "/repos/:owner/:repo/git/tags/:tag_sha" }, - listEventsForTimeline: { - headers: { - accept: "application/vnd.github.mockingbird-preview+json" - }, + getTree: { method: "GET", params: { - issue_number: { - required: true, - type: "integer" - }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" - }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { + recursive: { + enum: ["1"], type: "integer" }, repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/issues/:issue_number/timeline" - }, - listForAuthenticatedUser: { - method: "GET", - params: { - direction: { - enum: ["asc", "desc"], - type: "string" - }, - filter: { - enum: ["assigned", "created", "mentioned", "subscribed", "all"], - type: "string" - }, - labels: { - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - since: { - type: "string" - }, - sort: { - enum: ["created", "updated", "comments"], - type: "string" }, - state: { - enum: ["open", "closed", "all"], + tree_sha: { + required: true, type: "string" } }, - url: "/user/issues" + url: "/repos/:owner/:repo/git/trees/:tree_sha" }, - listForOrg: { + listMatchingRefs: { method: "GET", - params: { - direction: { - enum: ["asc", "desc"], - type: "string" - }, - filter: { - enum: ["assigned", "created", "mentioned", "subscribed", "all"], - type: "string" - }, - labels: { - type: "string" - }, - org: { + params: { + owner: { required: true, type: "string" }, @@ -5812,40 +6136,21 @@ var endpointsByScope = { per_page: { type: "integer" }, - since: { - type: "string" - }, - sort: { - enum: ["created", "updated", "comments"], + ref: { + required: true, type: "string" }, - state: { - enum: ["open", "closed", "all"], + repo: { + required: true, type: "string" } }, - url: "/orgs/:org/issues" + url: "/repos/:owner/:repo/git/matching-refs/:ref" }, - listForRepo: { + listRefs: { method: "GET", params: { - assignee: { - type: "string" - }, - creator: { - type: "string" - }, - direction: { - enum: ["asc", "desc"], - type: "string" - }, - labels: { - type: "string" - }, - mentioned: { - type: "string" - }, - milestone: { + namespace: { type: "string" }, owner: { @@ -5861,73 +6166,162 @@ var endpointsByScope = { repo: { required: true, type: "string" + } + }, + url: "/repos/:owner/:repo/git/refs/:namespace" + }, + updateRef: { + method: "PATCH", + params: { + force: { + type: "boolean" }, - since: { + owner: { + required: true, type: "string" }, - sort: { - enum: ["created", "updated", "comments"], + ref: { + required: true, type: "string" }, - state: { - enum: ["open", "closed", "all"], + repo: { + required: true, + type: "string" + }, + sha: { + required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues" + url: "/repos/:owner/:repo/git/refs/:ref" + } + }, + gitignore: { + getTemplate: { + method: "GET", + params: { + name: { + required: true, + type: "string" + } + }, + url: "/gitignore/templates/:name" }, - listLabelsForMilestone: { + listTemplates: { method: "GET", + params: {}, + url: "/gitignore/templates" + } + }, + interactions: { + addOrUpdateRestrictionsForOrg: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "PUT", params: { - milestone_number: { + limit: { + enum: ["existing_users", "contributors_only", "collaborators_only"], required: true, - type: "integer" + type: "string" }, - number: { - alias: "milestone_number", - deprecated: true, - type: "integer" + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/interaction-limits" + }, + addOrUpdateRestrictionsForRepo: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "PUT", + params: { + limit: { + enum: ["existing_users", "contributors_only", "collaborators_only"], + required: true, + type: "string" }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/milestones/:milestone_number/labels" + url: "/repos/:owner/:repo/interaction-limits" }, - listLabelsForRepo: { + getRestrictionsForOrg: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/interaction-limits" + }, + getRestrictionsForRepo: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, method: "GET", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/labels" + url: "/repos/:owner/:repo/interaction-limits" }, - listLabelsOnIssue: { - method: "GET", + removeRestrictionsForOrg: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "DELETE", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/interaction-limits" + }, + removeRestrictionsForRepo: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/interaction-limits" + } + }, + issues: { + addAssignees: { + method: "POST", params: { + assignees: { + type: "string[]" + }, issue_number: { required: true, type: "integer" @@ -5941,12 +6335,33 @@ var endpointsByScope = { required: true, type: "string" }, - page: { + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/assignees" + }, + addLabels: { + method: "POST", + params: { + issue_number: { + required: true, type: "integer" }, - per_page: { + labels: { + required: true, + type: "string[]" + }, + number: { + alias: "issue_number", + deprecated: true, type: "integer" }, + owner: { + required: true, + type: "string" + }, repo: { required: true, type: "string" @@ -5954,49 +6369,68 @@ var endpointsByScope = { }, url: "/repos/:owner/:repo/issues/:issue_number/labels" }, - listMilestonesForRepo: { + checkAssignee: { method: "GET", params: { - direction: { - enum: ["asc", "desc"], + assignee: { + required: true, type: "string" }, owner: { required: true, type: "string" }, - page: { - type: "integer" + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/assignees/:assignee" + }, + create: { + method: "POST", + params: { + assignee: { + type: "string" }, - per_page: { + assignees: { + type: "string[]" + }, + body: { + type: "string" + }, + labels: { + type: "string[]" + }, + milestone: { type: "integer" }, - repo: { + owner: { required: true, type: "string" }, - sort: { - enum: ["due_on", "completeness"], + repo: { + required: true, type: "string" }, - state: { - enum: ["open", "closed", "all"], + title: { + required: true, type: "string" } }, - url: "/repos/:owner/:repo/milestones" + url: "/repos/:owner/:repo/issues" }, - lock: { - method: "PUT", + createComment: { + method: "POST", params: { + body: { + required: true, + type: "string" + }, issue_number: { required: true, type: "integer" }, - lock_reason: { - enum: ["off-topic", "too heated", "resolved", "spam"], - type: "string" - }, number: { alias: "issue_number", deprecated: true, @@ -6011,22 +6445,21 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/lock" + url: "/repos/:owner/:repo/issues/:issue_number/comments" }, - removeAssignees: { - method: "DELETE", + createLabel: { + method: "POST", params: { - assignees: { - type: "string[]" - }, - issue_number: { + color: { required: true, - type: "integer" + type: "string" }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" + description: { + type: "string" + }, + name: { + required: true, + type: "string" }, owner: { required: true, @@ -6037,23 +6470,16 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/assignees" + url: "/repos/:owner/:repo/labels" }, - removeLabel: { - method: "DELETE", + createMilestone: { + method: "POST", params: { - issue_number: { - required: true, - type: "integer" - }, - name: { - required: true, + description: { type: "string" }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" + due_on: { + type: "string" }, owner: { required: true, @@ -6062,22 +6488,25 @@ var endpointsByScope = { repo: { required: true, type: "string" + }, + state: { + enum: ["open", "closed"], + type: "string" + }, + title: { + required: true, + type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/labels/:name" + url: "/repos/:owner/:repo/milestones" }, - removeLabels: { + deleteComment: { method: "DELETE", params: { - issue_number: { + comment_id: { required: true, type: "integer" }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" - }, owner: { required: true, type: "string" @@ -6087,22 +6516,14 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/labels" + url: "/repos/:owner/:repo/issues/comments/:comment_id" }, - replaceLabels: { - method: "PUT", + deleteLabel: { + method: "DELETE", params: { - issue_number: { + name: { required: true, - type: "integer" - }, - labels: { - type: "string[]" - }, - number: { - alias: "issue_number", - deprecated: true, - type: "integer" + type: "string" }, owner: { required: true, @@ -6113,17 +6534,17 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/labels" + url: "/repos/:owner/:repo/labels/:name" }, - unlock: { + deleteMilestone: { method: "DELETE", params: { - issue_number: { + milestone_number: { required: true, type: "integer" }, number: { - alias: "issue_number", + alias: "milestone_number", deprecated: true, type: "integer" }, @@ -6136,31 +6557,15 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/lock" + url: "/repos/:owner/:repo/milestones/:milestone_number" }, - update: { - method: "PATCH", + get: { + method: "GET", params: { - assignee: { - type: "string" - }, - assignees: { - type: "string[]" - }, - body: { - type: "string" - }, issue_number: { required: true, type: "integer" }, - labels: { - type: "string[]" - }, - milestone: { - allowNull: true, - type: "integer" - }, number: { alias: "issue_number", deprecated: true, @@ -6173,24 +6578,13 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - state: { - enum: ["open", "closed"], - type: "string" - }, - title: { - type: "string" } }, url: "/repos/:owner/:repo/issues/:issue_number" }, - updateComment: { - method: "PATCH", + getComment: { + method: "GET", params: { - body: { - required: true, - type: "string" - }, comment_id: { required: true, type: "integer" @@ -6206,20 +6600,29 @@ var endpointsByScope = { }, url: "/repos/:owner/:repo/issues/comments/:comment_id" }, - updateLabel: { - method: "PATCH", + getEvent: { + method: "GET", params: { - color: { - type: "string" + event_id: { + required: true, + type: "integer" }, - current_name: { + owner: { required: true, type: "string" }, - description: { + repo: { + required: true, type: "string" - }, + } + }, + url: "/repos/:owner/:repo/issues/events/:event_id" + }, + getLabel: { + method: "GET", + params: { name: { + required: true, type: "string" }, owner: { @@ -6231,17 +6634,11 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/labels/:current_name" + url: "/repos/:owner/:repo/labels/:name" }, - updateMilestone: { - method: "PATCH", + getMilestone: { + method: "GET", params: { - description: { - type: "string" - }, - due_on: { - type: "string" - }, milestone_number: { required: true, type: "integer" @@ -6258,99 +6655,103 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - state: { - enum: ["open", "closed"], - type: "string" - }, - title: { - type: "string" } }, url: "/repos/:owner/:repo/milestones/:milestone_number" - } - }, - licenses: { - get: { + }, + list: { method: "GET", params: { - license: { - required: true, + direction: { + enum: ["asc", "desc"], + type: "string" + }, + filter: { + enum: ["assigned", "created", "mentioned", "subscribed", "all"], + type: "string" + }, + labels: { + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], type: "string" } }, - url: "/licenses/:license" + url: "/issues" }, - getForRepo: { + listAssignees: { method: "GET", params: { owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/license" - }, - list: { - deprecated: "octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)", - method: "GET", - params: {}, - url: "/licenses" + url: "/repos/:owner/:repo/assignees" }, - listCommonlyUsed: { + listComments: { method: "GET", - params: {}, - url: "/licenses" - } - }, - markdown: { - render: { - method: "POST", params: { - context: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, type: "string" }, - mode: { - enum: ["markdown", "gfm"], + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, type: "string" }, - text: { - required: true, + since: { type: "string" } }, - url: "/markdown" + url: "/repos/:owner/:repo/issues/:issue_number/comments" }, - renderRaw: { - headers: { - "content-type": "text/plain; charset=utf-8" - }, - method: "POST", - params: { - data: { - mapTo: "data", - required: true, - type: "string" - } - }, - url: "/markdown/raw" - } - }, - meta: { - get: { + listCommentsForRepo: { method: "GET", - params: {}, - url: "/meta" - } - }, - migrations: { - cancelImport: { - method: "DELETE", params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, owner: { required: true, type: "string" @@ -6358,185 +6759,253 @@ var endpointsByScope = { repo: { required: true, type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated"], + type: "string" } }, - url: "/repos/:owner/:repo/import" + url: "/repos/:owner/:repo/issues/comments" }, - deleteArchiveForAuthenticatedUser: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, - method: "DELETE", + listEvents: { + method: "GET", params: { - migration_id: { + issue_number: { required: true, type: "integer" - } - }, - url: "/user/migrations/:migration_id/archive" - }, - deleteArchiveForOrg: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, - method: "DELETE", - params: { - migration_id: { + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, + type: "string" + }, + page: { type: "integer" }, - org: { + per_page: { + type: "integer" + }, + repo: { required: true, type: "string" } }, - url: "/orgs/:org/migrations/:migration_id/archive" + url: "/repos/:owner/:repo/issues/:issue_number/events" }, - downloadArchiveForOrg: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, + listEventsForRepo: { method: "GET", params: { - migration_id: { + owner: { required: true, + type: "string" + }, + page: { type: "integer" }, - org: { + per_page: { + type: "integer" + }, + repo: { required: true, type: "string" } }, - url: "/orgs/:org/migrations/:migration_id/archive" + url: "/repos/:owner/:repo/issues/events" }, - getArchiveForAuthenticatedUser: { + listEventsForTimeline: { headers: { - accept: "application/vnd.github.wyandotte-preview+json" + accept: "application/vnd.github.mockingbird-preview+json" }, method: "GET", params: { - migration_id: { + issue_number: { required: true, type: "integer" - } - }, - url: "/user/migrations/:migration_id/archive" - }, - getArchiveForOrg: { - deprecated: "octokit.migrations.getArchiveForOrg() has been renamed to octokit.migrations.downloadArchiveForOrg() (2020-01-27)", - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, - method: "GET", - params: { - migration_id: { + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, + type: "string" + }, + page: { type: "integer" }, - org: { + per_page: { + type: "integer" + }, + repo: { required: true, type: "string" } }, - url: "/orgs/:org/migrations/:migration_id/archive" + url: "/repos/:owner/:repo/issues/:issue_number/timeline" }, - getCommitAuthors: { + listForAuthenticatedUser: { method: "GET", params: { - owner: { - required: true, + direction: { + enum: ["asc", "desc"], type: "string" }, - repo: { - required: true, + filter: { + enum: ["assigned", "created", "mentioned", "subscribed", "all"], + type: "string" + }, + labels: { type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, since: { type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" } }, - url: "/repos/:owner/:repo/import/authors" + url: "/user/issues" }, - getImportProgress: { + listForOrg: { method: "GET", params: { - owner: { - required: true, + direction: { + enum: ["asc", "desc"], type: "string" }, - repo: { + filter: { + enum: ["assigned", "created", "mentioned", "subscribed", "all"], + type: "string" + }, + labels: { + type: "string" + }, + org: { required: true, type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" } }, - url: "/repos/:owner/:repo/import" + url: "/orgs/:org/issues" }, - getLargeFiles: { + listForRepo: { method: "GET", params: { + assignee: { + type: "string" + }, + creator: { + type: "string" + }, + direction: { + enum: ["asc", "desc"], + type: "string" + }, + labels: { + type: "string" + }, + mentioned: { + type: "string" + }, + milestone: { + type: "string" + }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" } }, - url: "/repos/:owner/:repo/import/large_files" + url: "/repos/:owner/:repo/issues" }, - getStatusForAuthenticatedUser: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, + listLabelsForMilestone: { method: "GET", params: { - migration_id: { + milestone_number: { required: true, type: "integer" - } - }, - url: "/user/migrations/:migration_id" - }, - getStatusForOrg: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, - method: "GET", - params: { - migration_id: { - required: true, + }, + number: { + alias: "milestone_number", + deprecated: true, type: "integer" }, - org: { + owner: { required: true, type: "string" - } - }, - url: "/orgs/:org/migrations/:migration_id" - }, - listForAuthenticatedUser: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, - method: "GET", - params: { + }, page: { type: "integer" }, per_page: { type: "integer" + }, + repo: { + required: true, + type: "string" } }, - url: "/user/migrations" + url: "/repos/:owner/:repo/milestones/:milestone_number/labels" }, - listForOrg: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, + listLabelsForRepo: { method: "GET", params: { - org: { + owner: { required: true, type: "string" }, @@ -6545,21 +7014,27 @@ var endpointsByScope = { }, per_page: { type: "integer" + }, + repo: { + required: true, + type: "string" } }, - url: "/orgs/:org/migrations" + url: "/repos/:owner/:repo/labels" }, - listReposForOrg: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, + listLabelsOnIssue: { method: "GET", params: { - migration_id: { + issue_number: { required: true, type: "integer" }, - org: { + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, type: "string" }, @@ -6568,180 +7043,164 @@ var endpointsByScope = { }, per_page: { type: "integer" + }, + repo: { + required: true, + type: "string" } }, - url: "/orgs/:org/migrations/:migration_id/repositories" + url: "/repos/:owner/:repo/issues/:issue_number/labels" }, - listReposForUser: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, + listMilestonesForRepo: { method: "GET", params: { - migration_id: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + owner: { required: true, - type: "integer" + type: "string" }, page: { type: "integer" }, per_page: { type: "integer" - } - }, - url: "/user/:migration_id/repositories" - }, - mapCommitAuthor: { - method: "PATCH", - params: { - author_id: { - required: true, - type: "integer" - }, - email: { - type: "string" }, - name: { + repo: { + required: true, type: "string" }, - owner: { - required: true, + sort: { + enum: ["due_on", "completeness"], type: "string" }, - repo: { - required: true, + state: { + enum: ["open", "closed", "all"], type: "string" } }, - url: "/repos/:owner/:repo/import/authors/:author_id" + url: "/repos/:owner/:repo/milestones" }, - setLfsPreference: { - method: "PATCH", + lock: { + method: "PUT", params: { - owner: { + issue_number: { required: true, + type: "integer" + }, + lock_reason: { + enum: ["off-topic", "too heated", "resolved", "spam"], type: "string" }, - repo: { + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, type: "string" }, - use_lfs: { - enum: ["opt_in", "opt_out"], + repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/import/lfs" + url: "/repos/:owner/:repo/issues/:issue_number/lock" }, - startForAuthenticatedUser: { - method: "POST", + removeAssignees: { + method: "DELETE", params: { - exclude_attachments: { - type: "boolean" - }, - lock_repositories: { - type: "boolean" + assignees: { + type: "string[]" }, - repositories: { + issue_number: { required: true, - type: "string[]" - } - }, - url: "/user/migrations" - }, - startForOrg: { - method: "POST", - params: { - exclude_attachments: { - type: "boolean" + type: "integer" }, - lock_repositories: { - type: "boolean" + number: { + alias: "issue_number", + deprecated: true, + type: "integer" }, - org: { + owner: { required: true, type: "string" }, - repositories: { + repo: { required: true, - type: "string[]" + type: "string" } }, - url: "/orgs/:org/migrations" + url: "/repos/:owner/:repo/issues/:issue_number/assignees" }, - startImport: { - method: "PUT", + removeLabel: { + method: "DELETE", params: { - owner: { + issue_number: { required: true, - type: "string" + type: "integer" }, - repo: { + name: { required: true, type: "string" }, - tfvc_project: { - type: "string" - }, - vcs: { - enum: ["subversion", "git", "mercurial", "tfvc"], - type: "string" - }, - vcs_password: { - type: "string" + number: { + alias: "issue_number", + deprecated: true, + type: "integer" }, - vcs_url: { + owner: { required: true, type: "string" }, - vcs_username: { + repo: { + required: true, type: "string" } }, - url: "/repos/:owner/:repo/import" + url: "/repos/:owner/:repo/issues/:issue_number/labels/:name" }, - unlockRepoForAuthenticatedUser: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, + removeLabels: { method: "DELETE", params: { - migration_id: { + issue_number: { required: true, type: "integer" }, - repo_name: { - required: true, - type: "string" - } - }, - url: "/user/migrations/:migration_id/repos/:repo_name/lock" - }, - unlockRepoForOrg: { - headers: { - accept: "application/vnd.github.wyandotte-preview+json" - }, - method: "DELETE", - params: { - migration_id: { - required: true, + number: { + alias: "issue_number", + deprecated: true, type: "integer" }, - org: { + owner: { required: true, type: "string" }, - repo_name: { + repo: { required: true, type: "string" } }, - url: "/orgs/:org/migrations/:migration_id/repos/:repo_name/lock" + url: "/repos/:owner/:repo/issues/:issue_number/labels" }, - updateImport: { - method: "PATCH", + replaceLabels: { + method: "PUT", params: { + issue_number: { + required: true, + type: "integer" + }, + labels: { + type: "string[]" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, owner: { required: true, type: "string" @@ -6749,604 +7208,620 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - vcs_password: { - type: "string" - }, - vcs_username: { - type: "string" } }, - url: "/repos/:owner/:repo/import" - } - }, - oauthAuthorizations: { - checkAuthorization: { - deprecated: "octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)", - method: "GET", + url: "/repos/:owner/:repo/issues/:issue_number/labels" + }, + unlock: { + method: "DELETE", params: { - access_token: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, type: "string" }, - client_id: { + repo: { required: true, type: "string" } }, - url: "/applications/:client_id/tokens/:access_token" + url: "/repos/:owner/:repo/issues/:issue_number/lock" }, - createAuthorization: { - deprecated: "octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization", - method: "POST", + update: { + method: "PATCH", params: { - client_id: { + assignee: { type: "string" }, - client_secret: { + assignees: { + type: "string[]" + }, + body: { type: "string" }, - fingerprint: { + issue_number: { + required: true, + type: "integer" + }, + labels: { + type: "string[]" + }, + milestone: { + allowNull: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, type: "string" }, - note: { + repo: { required: true, type: "string" }, - note_url: { + state: { + enum: ["open", "closed"], type: "string" }, - scopes: { - type: "string[]" + title: { + type: "string" } }, - url: "/authorizations" + url: "/repos/:owner/:repo/issues/:issue_number" }, - deleteAuthorization: { - deprecated: "octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization", - method: "DELETE", + updateComment: { + method: "PATCH", params: { - authorization_id: { + body: { required: true, - type: "integer" - } - }, - url: "/authorizations/:authorization_id" - }, - deleteGrant: { - deprecated: "octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant", - method: "DELETE", - params: { - grant_id: { + type: "string" + }, + comment_id: { required: true, type: "integer" - } - }, - url: "/applications/grants/:grant_id" - }, - getAuthorization: { - deprecated: "octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization", - method: "GET", - params: { - authorization_id: { + }, + owner: { required: true, - type: "integer" - } - }, - url: "/authorizations/:authorization_id" - }, - getGrant: { - deprecated: "octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant", - method: "GET", - params: { - grant_id: { + type: "string" + }, + repo: { required: true, - type: "integer" + type: "string" } }, - url: "/applications/grants/:grant_id" + url: "/repos/:owner/:repo/issues/comments/:comment_id" }, - getOrCreateAuthorizationForApp: { - deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app", - method: "PUT", + updateLabel: { + method: "PATCH", params: { - client_id: { - required: true, + color: { type: "string" }, - client_secret: { + current_name: { required: true, type: "string" }, - fingerprint: { + description: { type: "string" }, - note: { + name: { type: "string" }, - note_url: { + owner: { + required: true, type: "string" }, - scopes: { - type: "string[]" + repo: { + required: true, + type: "string" } }, - url: "/authorizations/clients/:client_id" + url: "/repos/:owner/:repo/labels/:current_name" }, - getOrCreateAuthorizationForAppAndFingerprint: { - deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint", - method: "PUT", + updateMilestone: { + method: "PATCH", params: { - client_id: { - required: true, + description: { type: "string" }, - client_secret: { - required: true, + due_on: { type: "string" }, - fingerprint: { + milestone_number: { required: true, - type: "string" - }, - note: { - type: "string" - }, - note_url: { - type: "string" + type: "integer" }, - scopes: { - type: "string[]" - } - }, - url: "/authorizations/clients/:client_id/:fingerprint" - }, - getOrCreateAuthorizationForAppFingerprint: { - deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() has been renamed to octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() (2018-12-27)", - method: "PUT", - params: { - client_id: { - required: true, - type: "string" + number: { + alias: "milestone_number", + deprecated: true, + type: "integer" }, - client_secret: { + owner: { required: true, type: "string" }, - fingerprint: { + repo: { required: true, type: "string" }, - note: { + state: { + enum: ["open", "closed"], type: "string" }, - note_url: { + title: { type: "string" - }, - scopes: { - type: "string[]" } }, - url: "/authorizations/clients/:client_id/:fingerprint" - }, - listAuthorizations: { - deprecated: "octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations", + url: "/repos/:owner/:repo/milestones/:milestone_number" + } + }, + licenses: { + get: { method: "GET", params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" + license: { + required: true, + type: "string" } }, - url: "/authorizations" + url: "/licenses/:license" }, - listGrants: { - deprecated: "octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants", + getForRepo: { method: "GET", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" } }, - url: "/applications/grants" + url: "/repos/:owner/:repo/license" }, - resetAuthorization: { - deprecated: "octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)", + list: { + deprecated: "octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)", + method: "GET", + params: {}, + url: "/licenses" + }, + listCommonlyUsed: { + method: "GET", + params: {}, + url: "/licenses" + } + }, + markdown: { + render: { method: "POST", params: { - access_token: { - required: true, + context: { type: "string" }, - client_id: { + mode: { + enum: ["markdown", "gfm"], + type: "string" + }, + text: { required: true, type: "string" } }, - url: "/applications/:client_id/tokens/:access_token" + url: "/markdown" }, - revokeAuthorizationForApplication: { - deprecated: "octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)", + renderRaw: { + headers: { + "content-type": "text/plain; charset=utf-8" + }, + method: "POST", + params: { + data: { + mapTo: "data", + required: true, + type: "string" + } + }, + url: "/markdown/raw" + } + }, + meta: { + get: { + method: "GET", + params: {}, + url: "/meta" + } + }, + migrations: { + cancelImport: { method: "DELETE", params: { - access_token: { + owner: { required: true, type: "string" }, - client_id: { + repo: { required: true, type: "string" } }, - url: "/applications/:client_id/tokens/:access_token" + url: "/repos/:owner/:repo/import" }, - revokeGrantForApplication: { - deprecated: "octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)", + deleteArchiveForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, method: "DELETE", params: { - access_token: { - required: true, - type: "string" - }, - client_id: { + migration_id: { required: true, - type: "string" + type: "integer" } }, - url: "/applications/:client_id/grants/:access_token" + url: "/user/migrations/:migration_id/archive" }, - updateAuthorization: { - deprecated: "octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization", - method: "PATCH", + deleteArchiveForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "DELETE", params: { - add_scopes: { - type: "string[]" - }, - authorization_id: { + migration_id: { required: true, type: "integer" }, - fingerprint: { - type: "string" - }, - note: { - type: "string" - }, - note_url: { + org: { + required: true, type: "string" - }, - remove_scopes: { - type: "string[]" - }, - scopes: { - type: "string[]" } }, - url: "/authorizations/:authorization_id" - } - }, - orgs: { - addOrUpdateMembership: { - method: "PUT", + url: "/orgs/:org/migrations/:migration_id/archive" + }, + downloadArchiveForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", params: { - org: { + migration_id: { required: true, - type: "string" - }, - role: { - enum: ["admin", "member"], - type: "string" + type: "integer" }, - username: { + org: { required: true, type: "string" } }, - url: "/orgs/:org/memberships/:username" + url: "/orgs/:org/migrations/:migration_id/archive" }, - blockUser: { - method: "PUT", + getArchiveForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", params: { - org: { - required: true, - type: "string" - }, - username: { + migration_id: { required: true, - type: "string" + type: "integer" } }, - url: "/orgs/:org/blocks/:username" + url: "/user/migrations/:migration_id/archive" }, - checkBlockedUser: { + getArchiveForOrg: { + deprecated: "octokit.migrations.getArchiveForOrg() has been renamed to octokit.migrations.downloadArchiveForOrg() (2020-01-27)", + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, method: "GET", params: { - org: { + migration_id: { required: true, - type: "string" + type: "integer" }, - username: { + org: { required: true, type: "string" } }, - url: "/orgs/:org/blocks/:username" + url: "/orgs/:org/migrations/:migration_id/archive" }, - checkMembership: { + getCommitAuthors: { method: "GET", params: { - org: { + owner: { required: true, type: "string" }, - username: { + repo: { required: true, type: "string" + }, + since: { + type: "string" } }, - url: "/orgs/:org/members/:username" + url: "/repos/:owner/:repo/import/authors" }, - checkPublicMembership: { + getImportProgress: { method: "GET", params: { - org: { + owner: { required: true, type: "string" }, - username: { + repo: { required: true, type: "string" } }, - url: "/orgs/:org/public_members/:username" + url: "/repos/:owner/:repo/import" }, - concealMembership: { - method: "DELETE", + getLargeFiles: { + method: "GET", params: { - org: { + owner: { required: true, type: "string" }, - username: { + repo: { required: true, type: "string" } }, - url: "/orgs/:org/public_members/:username" + url: "/repos/:owner/:repo/import/large_files" }, - convertMemberToOutsideCollaborator: { - method: "PUT", + getStatusForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", params: { - org: { - required: true, - type: "string" - }, - username: { + migration_id: { required: true, - type: "string" + type: "integer" } }, - url: "/orgs/:org/outside_collaborators/:username" + url: "/user/migrations/:migration_id" }, - createHook: { - method: "POST", + getStatusForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", params: { - active: { - type: "boolean" - }, - config: { - required: true, - type: "object" - }, - "config.content_type": { - type: "string" - }, - "config.insecure_ssl": { - type: "string" - }, - "config.secret": { - type: "string" - }, - "config.url": { - required: true, - type: "string" - }, - events: { - type: "string[]" - }, - name: { + migration_id: { required: true, - type: "string" + type: "integer" }, org: { required: true, type: "string" } }, - url: "/orgs/:org/hooks" + url: "/orgs/:org/migrations/:migration_id" }, - createInvitation: { - method: "POST", + listForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", params: { - email: { - type: "string" - }, - invitee_id: { + page: { type: "integer" }, - org: { - required: true, - type: "string" - }, - role: { - enum: ["admin", "direct_member", "billing_manager"], - type: "string" - }, - team_ids: { - type: "integer[]" + per_page: { + type: "integer" } }, - url: "/orgs/:org/invitations" + url: "/user/migrations" }, - deleteHook: { - method: "DELETE", + listForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", params: { - hook_id: { - required: true, - type: "integer" - }, org: { required: true, type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" } }, - url: "/orgs/:org/hooks/:hook_id" + url: "/orgs/:org/migrations" }, - get: { + listReposForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, method: "GET", params: { + migration_id: { + required: true, + type: "integer" + }, org: { required: true, type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" } }, - url: "/orgs/:org" + url: "/orgs/:org/migrations/:migration_id/repositories" }, - getHook: { + listReposForUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, method: "GET", params: { - hook_id: { + migration_id: { required: true, type: "integer" }, - org: { - required: true, - type: "string" + page: { + type: "integer" + }, + per_page: { + type: "integer" } }, - url: "/orgs/:org/hooks/:hook_id" + url: "/user/:migration_id/repositories" }, - getMembership: { - method: "GET", + mapCommitAuthor: { + method: "PATCH", params: { - org: { + author_id: { required: true, + type: "integer" + }, + email: { type: "string" }, - username: { + name: { + type: "string" + }, + owner: { required: true, type: "string" - } - }, - url: "/orgs/:org/memberships/:username" - }, - getMembershipForAuthenticatedUser: { - method: "GET", - params: { - org: { + }, + repo: { required: true, type: "string" } }, - url: "/user/memberships/orgs/:org" + url: "/repos/:owner/:repo/import/authors/:author_id" }, - list: { - method: "GET", + setLfsPreference: { + method: "PATCH", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" }, - since: { - type: "integer" - } - }, - url: "/organizations" - }, - listBlockedUsers: { - method: "GET", - params: { - org: { + use_lfs: { + enum: ["opt_in", "opt_out"], required: true, type: "string" } }, - url: "/orgs/:org/blocks" + url: "/repos/:owner/:repo/import/lfs" }, - listForAuthenticatedUser: { - method: "GET", + startForAuthenticatedUser: { + method: "POST", params: { - page: { - type: "integer" + exclude_attachments: { + type: "boolean" }, - per_page: { - type: "integer" + lock_repositories: { + type: "boolean" + }, + repositories: { + required: true, + type: "string[]" } }, - url: "/user/orgs" + url: "/user/migrations" }, - listForUser: { - method: "GET", + startForOrg: { + method: "POST", params: { - page: { - type: "integer" + exclude_attachments: { + type: "boolean" }, - per_page: { - type: "integer" + lock_repositories: { + type: "boolean" }, - username: { + org: { required: true, type: "string" + }, + repositories: { + required: true, + type: "string[]" } }, - url: "/users/:username/orgs" + url: "/orgs/:org/migrations" }, - listHooks: { - method: "GET", + startImport: { + method: "PUT", params: { - org: { + owner: { required: true, type: "string" }, - page: { - type: "integer" + repo: { + required: true, + type: "string" }, - per_page: { - type: "integer" + tfvc_project: { + type: "string" + }, + vcs: { + enum: ["subversion", "git", "mercurial", "tfvc"], + type: "string" + }, + vcs_password: { + type: "string" + }, + vcs_url: { + required: true, + type: "string" + }, + vcs_username: { + type: "string" } }, - url: "/orgs/:org/hooks" + url: "/repos/:owner/:repo/import" }, - listInstallations: { + unlockRepoForAuthenticatedUser: { headers: { - accept: "application/vnd.github.machine-man-preview+json" + accept: "application/vnd.github.wyandotte-preview+json" }, - method: "GET", + method: "DELETE", params: { - org: { + migration_id: { required: true, - type: "string" - }, - page: { type: "integer" }, - per_page: { - type: "integer" + repo_name: { + required: true, + type: "string" } }, - url: "/orgs/:org/installations" + url: "/user/migrations/:migration_id/repos/:repo_name/lock" }, - listInvitationTeams: { - method: "GET", + unlockRepoForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "DELETE", params: { - invitation_id: { + migration_id: { required: true, type: "integer" }, @@ -7354,383 +7829,433 @@ var endpointsByScope = { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + repo_name: { + required: true, + type: "string" } }, - url: "/orgs/:org/invitations/:invitation_id/teams" + url: "/orgs/:org/migrations/:migration_id/repos/:repo_name/lock" }, - listMembers: { - method: "GET", + updateImport: { + method: "PATCH", params: { - filter: { - enum: ["2fa_disabled", "all"], + owner: { + required: true, type: "string" }, - org: { + repo: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + vcs_password: { + type: "string" }, - role: { - enum: ["all", "admin", "member"], + vcs_username: { type: "string" } }, - url: "/orgs/:org/members" - }, - listMemberships: { + url: "/repos/:owner/:repo/import" + } + }, + oauthAuthorizations: { + checkAuthorization: { + deprecated: "octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)", method: "GET", params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" + access_token: { + required: true, + type: "string" }, - state: { - enum: ["active", "pending"], + client_id: { + required: true, type: "string" } }, - url: "/user/memberships/orgs" + url: "/applications/:client_id/tokens/:access_token" }, - listOutsideCollaborators: { - method: "GET", + createAuthorization: { + deprecated: "octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization", + method: "POST", params: { - filter: { - enum: ["2fa_disabled", "all"], + client_id: { type: "string" }, - org: { + client_secret: { + type: "string" + }, + fingerprint: { + type: "string" + }, + note: { required: true, type: "string" }, - page: { - type: "integer" + note_url: { + type: "string" }, - per_page: { + scopes: { + type: "string[]" + } + }, + url: "/authorizations" + }, + deleteAuthorization: { + deprecated: "octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization", + method: "DELETE", + params: { + authorization_id: { + required: true, + type: "integer" + } + }, + url: "/authorizations/:authorization_id" + }, + deleteGrant: { + deprecated: "octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant", + method: "DELETE", + params: { + grant_id: { + required: true, type: "integer" } }, - url: "/orgs/:org/outside_collaborators" + url: "/applications/grants/:grant_id" }, - listPendingInvitations: { + getAuthorization: { + deprecated: "octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization", method: "GET", params: { - org: { + authorization_id: { required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { type: "integer" } }, - url: "/orgs/:org/invitations" + url: "/authorizations/:authorization_id" }, - listPublicMembers: { + getGrant: { + deprecated: "octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant", method: "GET", params: { - org: { + grant_id: { required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { type: "integer" } }, - url: "/orgs/:org/public_members" + url: "/applications/grants/:grant_id" }, - pingHook: { - method: "POST", + getOrCreateAuthorizationForApp: { + deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app", + method: "PUT", params: { - hook_id: { + client_id: { required: true, - type: "integer" + type: "string" }, - org: { + client_secret: { required: true, type: "string" + }, + fingerprint: { + type: "string" + }, + note: { + type: "string" + }, + note_url: { + type: "string" + }, + scopes: { + type: "string[]" } }, - url: "/orgs/:org/hooks/:hook_id/pings" + url: "/authorizations/clients/:client_id" }, - publicizeMembership: { + getOrCreateAuthorizationForAppAndFingerprint: { + deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint", method: "PUT", params: { - org: { + client_id: { required: true, type: "string" }, - username: { + client_secret: { required: true, type: "string" + }, + fingerprint: { + required: true, + type: "string" + }, + note: { + type: "string" + }, + note_url: { + type: "string" + }, + scopes: { + type: "string[]" } }, - url: "/orgs/:org/public_members/:username" + url: "/authorizations/clients/:client_id/:fingerprint" }, - removeMember: { - method: "DELETE", + getOrCreateAuthorizationForAppFingerprint: { + deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() has been renamed to octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() (2018-12-27)", + method: "PUT", params: { - org: { + client_id: { required: true, type: "string" }, - username: { + client_secret: { required: true, type: "string" + }, + fingerprint: { + required: true, + type: "string" + }, + note: { + type: "string" + }, + note_url: { + type: "string" + }, + scopes: { + type: "string[]" } }, - url: "/orgs/:org/members/:username" + url: "/authorizations/clients/:client_id/:fingerprint" }, - removeMembership: { - method: "DELETE", + listAuthorizations: { + deprecated: "octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations", + method: "GET", params: { - org: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/authorizations" + }, + listGrants: { + deprecated: "octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/applications/grants" + }, + resetAuthorization: { + deprecated: "octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)", + method: "POST", + params: { + access_token: { required: true, type: "string" }, - username: { + client_id: { required: true, type: "string" } }, - url: "/orgs/:org/memberships/:username" + url: "/applications/:client_id/tokens/:access_token" }, - removeOutsideCollaborator: { + revokeAuthorizationForApplication: { + deprecated: "octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)", method: "DELETE", params: { - org: { + access_token: { required: true, type: "string" }, - username: { + client_id: { required: true, type: "string" } }, - url: "/orgs/:org/outside_collaborators/:username" + url: "/applications/:client_id/tokens/:access_token" }, - unblockUser: { + revokeGrantForApplication: { + deprecated: "octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)", method: "DELETE", params: { - org: { + access_token: { required: true, type: "string" }, - username: { + client_id: { required: true, type: "string" } }, - url: "/orgs/:org/blocks/:username" + url: "/applications/:client_id/grants/:access_token" }, - update: { + updateAuthorization: { + deprecated: "octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization", method: "PATCH", params: { - billing_email: { - type: "string" + add_scopes: { + type: "string[]" }, - company: { - type: "string" + authorization_id: { + required: true, + type: "integer" }, - default_repository_permission: { - enum: ["read", "write", "admin", "none"], + fingerprint: { type: "string" }, - description: { + note: { type: "string" }, - email: { + note_url: { type: "string" }, - has_organization_projects: { - type: "boolean" - }, - has_repository_projects: { - type: "boolean" - }, - location: { - type: "string" + remove_scopes: { + type: "string[]" }, - members_allowed_repository_creation_type: { - enum: ["all", "private", "none"], + scopes: { + type: "string[]" + } + }, + url: "/authorizations/:authorization_id" + } + }, + orgs: { + addOrUpdateMembership: { + method: "PUT", + params: { + org: { + required: true, type: "string" }, - members_can_create_internal_repositories: { - type: "boolean" - }, - members_can_create_private_repositories: { - type: "boolean" - }, - members_can_create_public_repositories: { - type: "boolean" - }, - members_can_create_repositories: { - type: "boolean" - }, - name: { + role: { + enum: ["admin", "member"], type: "string" }, - org: { + username: { required: true, type: "string" } }, - url: "/orgs/:org" + url: "/orgs/:org/memberships/:username" }, - updateHook: { - method: "PATCH", + blockUser: { + method: "PUT", params: { - active: { - type: "boolean" - }, - config: { - type: "object" - }, - "config.content_type": { - type: "string" - }, - "config.insecure_ssl": { - type: "string" - }, - "config.secret": { - type: "string" - }, - "config.url": { + org: { required: true, type: "string" }, - events: { - type: "string[]" - }, - hook_id: { - required: true, - type: "integer" - }, - org: { + username: { required: true, type: "string" } }, - url: "/orgs/:org/hooks/:hook_id" - }, - updateMembership: { - method: "PATCH", + url: "/orgs/:org/blocks/:username" + }, + checkBlockedUser: { + method: "GET", params: { org: { required: true, type: "string" }, - state: { - enum: ["active"], + username: { required: true, type: "string" } }, - url: "/user/memberships/orgs/:org" - } - }, - projects: { - addCollaborator: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "PUT", + url: "/orgs/:org/blocks/:username" + }, + checkMembership: { + method: "GET", params: { - permission: { - enum: ["read", "write", "admin"], - type: "string" - }, - project_id: { + org: { required: true, - type: "integer" + type: "string" }, username: { required: true, type: "string" } }, - url: "/projects/:project_id/collaborators/:username" + url: "/orgs/:org/members/:username" }, - createCard: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "POST", + checkPublicMembership: { + method: "GET", params: { - column_id: { + org: { required: true, - type: "integer" - }, - content_id: { - type: "integer" - }, - content_type: { type: "string" }, - note: { + username: { + required: true, type: "string" } }, - url: "/projects/columns/:column_id/cards" + url: "/orgs/:org/public_members/:username" }, - createColumn: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "POST", + concealMembership: { + method: "DELETE", params: { - name: { + org: { required: true, type: "string" }, - project_id: { + username: { required: true, - type: "integer" + type: "string" } }, - url: "/projects/:project_id/columns" + url: "/orgs/:org/public_members/:username" }, - createForAuthenticatedUser: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "POST", + convertMemberToOutsideCollaborator: { + method: "PUT", params: { - body: { + org: { + required: true, type: "string" }, - name: { + username: { required: true, type: "string" } }, - url: "/user/projects" + url: "/orgs/:org/outside_collaborators/:username" }, - createForOrg: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + createHook: { method: "POST", params: { - body: { + active: { + type: "boolean" + }, + config: { + required: true, + type: "object" + }, + "config.content_type": { + type: "string" + }, + "config.insecure_ssl": { + type: "string" + }, + "config.secret": { + type: "string" + }, + "config.url": { + required: true, type: "string" }, + events: { + type: "string[]" + }, name: { required: true, type: "string" @@ -7740,141 +8265,151 @@ var endpointsByScope = { type: "string" } }, - url: "/orgs/:org/projects" + url: "/orgs/:org/hooks" }, - createForRepo: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + createInvitation: { method: "POST", params: { - body: { + email: { type: "string" }, - name: { - required: true, - type: "string" + invitee_id: { + type: "integer" }, - owner: { + org: { required: true, type: "string" }, - repo: { - required: true, + role: { + enum: ["admin", "direct_member", "billing_manager"], type: "string" + }, + team_ids: { + type: "integer[]" } }, - url: "/repos/:owner/:repo/projects" + url: "/orgs/:org/invitations" }, - delete: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + deleteHook: { method: "DELETE", params: { - project_id: { + hook_id: { required: true, type: "integer" + }, + org: { + required: true, + type: "string" } }, - url: "/projects/:project_id" + url: "/orgs/:org/hooks/:hook_id" }, - deleteCard: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "DELETE", + get: { + method: "GET", params: { - card_id: { + org: { required: true, - type: "integer" + type: "string" } }, - url: "/projects/columns/cards/:card_id" + url: "/orgs/:org" }, - deleteColumn: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "DELETE", + getHook: { + method: "GET", params: { - column_id: { + hook_id: { required: true, type: "integer" + }, + org: { + required: true, + type: "string" } }, - url: "/projects/columns/:column_id" + url: "/orgs/:org/hooks/:hook_id" }, - get: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + getMembership: { method: "GET", params: { - project_id: { + org: { required: true, - type: "integer" + type: "string" + }, + username: { + required: true, + type: "string" } }, - url: "/projects/:project_id" + url: "/orgs/:org/memberships/:username" }, - getCard: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + getMembershipForAuthenticatedUser: { method: "GET", params: { - card_id: { + org: { required: true, - type: "integer" + type: "string" } }, - url: "/projects/columns/cards/:card_id" + url: "/user/memberships/orgs/:org" }, - getColumn: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + list: { method: "GET", params: { - column_id: { - required: true, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { type: "integer" } }, - url: "/projects/columns/:column_id" + url: "/organizations" }, - listCards: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listBlockedUsers: { method: "GET", params: { - archived_state: { - enum: ["all", "archived", "not_archived"], - type: "string" - }, - column_id: { + org: { required: true, + type: "string" + } + }, + url: "/orgs/:org/blocks" + }, + listForAuthenticatedUser: { + method: "GET", + params: { + page: { type: "integer" }, + per_page: { + type: "integer" + } + }, + url: "/user/orgs" + }, + listForUser: { + method: "GET", + params: { page: { type: "integer" }, per_page: { type: "integer" + }, + username: { + required: true, + type: "string" } }, - url: "/projects/columns/:column_id/cards" + url: "/users/:username/orgs" }, - listCollaborators: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listHooks: { method: "GET", params: { - affiliation: { - enum: ["outside", "direct", "all"], + org: { + required: true, type: "string" }, page: { @@ -7882,39 +8417,36 @@ var endpointsByScope = { }, per_page: { type: "integer" - }, - project_id: { - required: true, - type: "integer" } }, - url: "/projects/:project_id/collaborators" + url: "/orgs/:org/hooks" }, - listColumns: { + listInstallations: { headers: { - accept: "application/vnd.github.inertia-preview+json" + accept: "application/vnd.github.machine-man-preview+json" }, method: "GET", params: { + org: { + required: true, + type: "string" + }, page: { type: "integer" }, per_page: { type: "integer" - }, - project_id: { - required: true, - type: "integer" } }, - url: "/projects/:project_id/columns" + url: "/orgs/:org/installations" }, - listForOrg: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listInvitationTeams: { method: "GET", params: { + invitation_id: { + required: true, + type: "integer" + }, org: { required: true, type: "string" @@ -7924,21 +8456,18 @@ var endpointsByScope = { }, per_page: { type: "integer" - }, - state: { - enum: ["open", "closed", "all"], - type: "string" } }, - url: "/orgs/:org/projects" + url: "/orgs/:org/invitations/:invitation_id/teams" }, - listForRepo: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listMembers: { method: "GET", params: { - owner: { + filter: { + enum: ["2fa_disabled", "all"], + type: "string" + }, + org: { required: true, type: "string" }, @@ -7948,21 +8477,14 @@ var endpointsByScope = { per_page: { type: "integer" }, - repo: { - required: true, - type: "string" - }, - state: { - enum: ["open", "closed", "all"], + role: { + enum: ["all", "admin", "member"], type: "string" } }, - url: "/repos/:owner/:repo/projects" + url: "/orgs/:org/members" }, - listForUser: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listMemberships: { method: "GET", params: { page: { @@ -7972,685 +8494,525 @@ var endpointsByScope = { type: "integer" }, state: { - enum: ["open", "closed", "all"], - type: "string" - }, - username: { - required: true, + enum: ["active", "pending"], type: "string" } }, - url: "/users/:username/projects" + url: "/user/memberships/orgs" }, - moveCard: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "POST", + listOutsideCollaborators: { + method: "GET", params: { - card_id: { + filter: { + enum: ["2fa_disabled", "all"], + type: "string" + }, + org: { required: true, - type: "integer" + type: "string" }, - column_id: { + page: { type: "integer" }, - position: { - required: true, - type: "string", - validation: "^(top|bottom|after:\\d+)$" + per_page: { + type: "integer" } }, - url: "/projects/columns/cards/:card_id/moves" + url: "/orgs/:org/outside_collaborators" }, - moveColumn: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "POST", + listPendingInvitations: { + method: "GET", params: { - column_id: { + org: { required: true, + type: "string" + }, + page: { type: "integer" }, - position: { - required: true, - type: "string", - validation: "^(first|last|after:\\d+)$" + per_page: { + type: "integer" } }, - url: "/projects/columns/:column_id/moves" + url: "/orgs/:org/invitations" }, - removeCollaborator: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "DELETE", + listPublicMembers: { + method: "GET", params: { - project_id: { + org: { required: true, + type: "string" + }, + page: { type: "integer" }, - username: { - required: true, - type: "string" + per_page: { + type: "integer" } }, - url: "/projects/:project_id/collaborators/:username" + url: "/orgs/:org/public_members" }, - reviewUserPermissionLevel: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "GET", + pingHook: { + method: "POST", params: { - project_id: { + hook_id: { required: true, type: "integer" }, - username: { + org: { required: true, type: "string" } }, - url: "/projects/:project_id/collaborators/:username/permission" + url: "/orgs/:org/hooks/:hook_id/pings" }, - update: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "PATCH", + publicizeMembership: { + method: "PUT", params: { - body: { - type: "string" - }, - name: { - type: "string" - }, - organization_permission: { - type: "string" - }, - private: { - type: "boolean" - }, - project_id: { + org: { required: true, - type: "integer" - }, - state: { - enum: ["open", "closed"], type: "string" - } - }, - url: "/projects/:project_id" - }, - updateCard: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "PATCH", - params: { - archived: { - type: "boolean" }, - card_id: { + username: { required: true, - type: "integer" - }, - note: { type: "string" } }, - url: "/projects/columns/cards/:card_id" + url: "/orgs/:org/public_members/:username" }, - updateColumn: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "PATCH", + removeMember: { + method: "DELETE", params: { - column_id: { + org: { required: true, - type: "integer" + type: "string" }, - name: { + username: { required: true, type: "string" } }, - url: "/projects/columns/:column_id" - } - }, - pulls: { - checkIfMerged: { - method: "GET", + url: "/orgs/:org/members/:username" + }, + removeMembership: { + method: "DELETE", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, - owner: { + org: { required: true, type: "string" }, - pull_number: { - required: true, - type: "integer" - }, - repo: { + username: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/merge" + url: "/orgs/:org/memberships/:username" }, - create: { - method: "POST", + removeOutsideCollaborator: { + method: "DELETE", params: { - base: { - required: true, - type: "string" - }, - body: { - type: "string" - }, - draft: { - type: "boolean" - }, - head: { - required: true, - type: "string" - }, - maintainer_can_modify: { - type: "boolean" - }, - owner: { - required: true, - type: "string" - }, - repo: { + org: { required: true, type: "string" }, - title: { + username: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls" + url: "/orgs/:org/outside_collaborators/:username" }, - createComment: { - method: "POST", + unblockUser: { + method: "DELETE", params: { - body: { + org: { required: true, type: "string" }, - commit_id: { + username: { required: true, type: "string" + } + }, + url: "/orgs/:org/blocks/:username" + }, + update: { + method: "PATCH", + params: { + billing_email: { + type: "string" }, - in_reply_to: { - deprecated: true, - description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.", - type: "integer" - }, - line: { - type: "integer" + company: { + type: "string" }, - number: { - alias: "pull_number", - deprecated: true, - type: "integer" + default_repository_permission: { + enum: ["read", "write", "admin", "none"], + type: "string" }, - owner: { - required: true, + description: { type: "string" }, - path: { - required: true, + email: { type: "string" }, - position: { - type: "integer" + has_organization_projects: { + type: "boolean" }, - pull_number: { - required: true, - type: "integer" + has_repository_projects: { + type: "boolean" }, - repo: { - required: true, + location: { type: "string" }, - side: { - enum: ["LEFT", "RIGHT"], + members_allowed_repository_creation_type: { + enum: ["all", "private", "none"], type: "string" }, - start_line: { - type: "integer" + members_can_create_internal_repositories: { + type: "boolean" }, - start_side: { - enum: ["LEFT", "RIGHT", "side"], + members_can_create_private_repositories: { + type: "boolean" + }, + members_can_create_public_repositories: { + type: "boolean" + }, + members_can_create_repositories: { + type: "boolean" + }, + name: { + type: "string" + }, + org: { + required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/comments" + url: "/orgs/:org" }, - createCommentReply: { - deprecated: "octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)", - method: "POST", + updateHook: { + method: "PATCH", params: { - body: { - required: true, - type: "string" - }, - commit_id: { - required: true, - type: "string" + active: { + type: "boolean" }, - in_reply_to: { - deprecated: true, - description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.", - type: "integer" + config: { + type: "object" }, - line: { - type: "integer" + "config.content_type": { + type: "string" }, - number: { - alias: "pull_number", - deprecated: true, - type: "integer" + "config.insecure_ssl": { + type: "string" }, - owner: { - required: true, + "config.secret": { type: "string" }, - path: { + "config.url": { required: true, type: "string" }, - position: { - type: "integer" + events: { + type: "string[]" }, - pull_number: { + hook_id: { required: true, type: "integer" }, - repo: { + org: { required: true, type: "string" - }, - side: { - enum: ["LEFT", "RIGHT"], - type: "string" - }, - start_line: { - type: "integer" - }, - start_side: { - enum: ["LEFT", "RIGHT", "side"], - type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/comments" + url: "/orgs/:org/hooks/:hook_id" }, - createFromIssue: { - deprecated: "octokit.pulls.createFromIssue() is deprecated, see https://developer.github.com/v3/pulls/#create-a-pull-request", - method: "POST", + updateMembership: { + method: "PATCH", params: { - base: { + org: { required: true, type: "string" }, - draft: { - type: "boolean" - }, - head: { + state: { + enum: ["active"], required: true, type: "string" + } + }, + url: "/user/memberships/orgs/:org" + } + }, + projects: { + addCollaborator: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PUT", + params: { + permission: { + enum: ["read", "write", "admin"], + type: "string" }, - issue: { + project_id: { required: true, type: "integer" }, - maintainer_can_modify: { - type: "boolean" - }, - owner: { - required: true, - type: "string" - }, - repo: { + username: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls" + url: "/projects/:project_id/collaborators/:username" }, - createReview: { + createCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "POST", params: { - body: { - type: "string" - }, - comments: { - type: "object[]" - }, - "comments[].body": { - required: true, - type: "string" - }, - "comments[].path": { + column_id: { required: true, - type: "string" + type: "integer" }, - "comments[].position": { - required: true, + content_id: { type: "integer" }, - commit_id: { + content_type: { type: "string" }, - event: { - enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"], + note: { type: "string" - }, - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, - owner: { + } + }, + url: "/projects/columns/:column_id/cards" + }, + createColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + name: { required: true, type: "string" }, - pull_number: { + project_id: { required: true, type: "integer" - }, - repo: { - required: true, - type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews" + url: "/projects/:project_id/columns" }, - createReviewCommentReply: { + createForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "POST", params: { body: { - required: true, type: "string" }, - comment_id: { - required: true, - type: "integer" - }, - owner: { + name: { required: true, type: "string" + } + }, + url: "/user/projects" + }, + createForOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + body: { + type: "string" }, - pull_number: { + name: { required: true, - type: "integer" + type: "string" }, - repo: { + org: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies" + url: "/orgs/:org/projects" }, - createReviewRequest: { + createForRepo: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "POST", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" + body: { + type: "string" }, - owner: { + name: { required: true, type: "string" }, - pull_number: { + owner: { required: true, - type: "integer" + type: "string" }, repo: { required: true, type: "string" - }, - reviewers: { - type: "string[]" - }, - team_reviewers: { - type: "string[]" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" + url: "/repos/:owner/:repo/projects" }, - deleteComment: { + delete: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "DELETE", params: { - comment_id: { + project_id: { required: true, type: "integer" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" } }, - url: "/repos/:owner/:repo/pulls/comments/:comment_id" + url: "/projects/:project_id" }, - deletePendingReview: { + deleteCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "DELETE", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - pull_number: { - required: true, - type: "integer" - }, - repo: { - required: true, - type: "string" - }, - review_id: { + card_id: { required: true, type: "integer" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" + url: "/projects/columns/cards/:card_id" }, - deleteReviewRequest: { + deleteColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "DELETE", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - pull_number: { + column_id: { required: true, type: "integer" - }, - repo: { - required: true, - type: "string" - }, - reviewers: { - type: "string[]" - }, - team_reviewers: { - type: "string[]" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" + url: "/projects/columns/:column_id" }, - dismissReview: { - method: "PUT", + get: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", params: { - message: { - required: true, - type: "string" - }, - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - pull_number: { - required: true, - type: "integer" - }, - repo: { - required: true, - type: "string" - }, - review_id: { + project_id: { required: true, type: "integer" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals" + url: "/projects/:project_id" }, - get: { + getCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, - owner: { - required: true, - type: "string" - }, - pull_number: { + card_id: { required: true, type: "integer" - }, - repo: { - required: true, - type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number" + url: "/projects/columns/cards/:card_id" }, - getComment: { + getColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - comment_id: { + column_id: { required: true, type: "integer" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" } }, - url: "/repos/:owner/:repo/pulls/comments/:comment_id" + url: "/projects/columns/:column_id" }, - getCommentsForReview: { + listCards: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" + archived_state: { + enum: ["all", "archived", "not_archived"], + type: "string" }, - owner: { + column_id: { required: true, - type: "string" + type: "integer" }, page: { type: "integer" }, per_page: { type: "integer" + } + }, + url: "/projects/columns/:column_id/cards" + }, + listCollaborators: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + affiliation: { + enum: ["outside", "direct", "all"], + type: "string" }, - pull_number: { - required: true, + page: { type: "integer" }, - repo: { - required: true, - type: "string" + per_page: { + type: "integer" }, - review_id: { + project_id: { required: true, type: "integer" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments" + url: "/projects/:project_id/collaborators" }, - getReview: { + listColumns: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - number: { - alias: "pull_number", - deprecated: true, + page: { type: "integer" }, - owner: { - required: true, - type: "string" - }, - pull_number: { - required: true, + per_page: { type: "integer" }, - repo: { - required: true, - type: "string" - }, - review_id: { + project_id: { required: true, type: "integer" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" + url: "/projects/:project_id/columns" }, - list: { - method: "GET", - params: { - base: { - type: "string" - }, - direction: { - enum: ["asc", "desc"], - type: "string" - }, - head: { - type: "string" - }, - owner: { + listForOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + org: { required: true, type: "string" }, @@ -8660,33 +9022,19 @@ var endpointsByScope = { per_page: { type: "integer" }, - repo: { - required: true, - type: "string" - }, - sort: { - enum: ["created", "updated", "popularity", "long-running"], - type: "string" - }, state: { enum: ["open", "closed", "all"], type: "string" } }, - url: "/repos/:owner/:repo/pulls" + url: "/orgs/:org/projects" }, - listComments: { + listForRepo: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - direction: { - enum: ["asc", "desc"], - type: "string" - }, - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, owner: { required: true, type: "string" @@ -8697,184 +9045,183 @@ var endpointsByScope = { per_page: { type: "integer" }, - pull_number: { - required: true, - type: "integer" - }, repo: { required: true, type: "string" }, - since: { - type: "string" - }, - sort: { - enum: ["created", "updated"], + state: { + enum: ["open", "closed", "all"], type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/comments" + url: "/repos/:owner/:repo/projects" }, - listCommentsForRepo: { + listForUser: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - direction: { - enum: ["asc", "desc"], - type: "string" - }, - owner: { - required: true, - type: "string" - }, page: { type: "integer" }, per_page: { type: "integer" }, - repo: { - required: true, - type: "string" - }, - since: { + state: { + enum: ["open", "closed", "all"], type: "string" }, - sort: { - enum: ["created", "updated"], + username: { + required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls/comments" + url: "/users/:username/projects" }, - listCommits: { - method: "GET", + moveCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" - }, - owner: { + card_id: { required: true, - type: "string" - }, - page: { type: "integer" }, - per_page: { + column_id: { type: "integer" }, - pull_number: { + position: { + required: true, + type: "string", + validation: "^(top|bottom|after:\\d+)$" + } + }, + url: "/projects/columns/cards/:card_id/moves" + }, + moveColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + column_id: { required: true, type: "integer" }, - repo: { + position: { required: true, - type: "string" + type: "string", + validation: "^(first|last|after:\\d+)$" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/commits" + url: "/projects/columns/:column_id/moves" }, - listFiles: { - method: "GET", + removeCollaborator: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "DELETE", params: { - number: { - alias: "pull_number", - deprecated: true, + project_id: { + required: true, type: "integer" }, - owner: { + username: { required: true, type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - pull_number: { + } + }, + url: "/projects/:project_id/collaborators/:username" + }, + reviewUserPermissionLevel: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + project_id: { required: true, type: "integer" }, - repo: { + username: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/files" + url: "/projects/:project_id/collaborators/:username/permission" }, - listReviewRequests: { - method: "GET", + update: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PATCH", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" + body: { + type: "string" }, - owner: { - required: true, + name: { type: "string" }, - page: { - type: "integer" + organization_permission: { + type: "string" }, - per_page: { - type: "integer" + private: { + type: "boolean" }, - pull_number: { + project_id: { required: true, type: "integer" }, - repo: { - required: true, + state: { + enum: ["open", "closed"], type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" + url: "/projects/:project_id" }, - listReviews: { - method: "GET", + updateCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PATCH", params: { - number: { - alias: "pull_number", - deprecated: true, - type: "integer" + archived: { + type: "boolean" }, - owner: { + card_id: { required: true, - type: "string" - }, - page: { type: "integer" }, - per_page: { - type: "integer" - }, - pull_number: { + note: { + type: "string" + } + }, + url: "/projects/columns/cards/:card_id" + }, + updateColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PATCH", + params: { + column_id: { required: true, type: "integer" }, - repo: { + name: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews" - }, - merge: { - method: "PUT", + url: "/projects/columns/:column_id" + } + }, + pulls: { + checkIfMerged: { + method: "GET", params: { - commit_message: { - type: "string" - }, - commit_title: { - type: "string" - }, - merge_method: { - enum: ["merge", "squash", "rebase"], - type: "string" - }, number: { alias: "pull_number", deprecated: true, @@ -8891,59 +9238,63 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - sha: { - type: "string" } }, url: "/repos/:owner/:repo/pulls/:pull_number/merge" }, - submitReview: { + create: { method: "POST", params: { + base: { + required: true, + type: "string" + }, body: { type: "string" }, - event: { - enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"], + draft: { + type: "boolean" + }, + head: { required: true, type: "string" }, - number: { - alias: "pull_number", - deprecated: true, - type: "integer" + maintainer_can_modify: { + type: "boolean" }, owner: { required: true, type: "string" }, - pull_number: { - required: true, - type: "integer" - }, repo: { required: true, type: "string" }, - review_id: { + title: { required: true, - type: "integer" + type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events" + url: "/repos/:owner/:repo/pulls" }, - update: { - method: "PATCH", + createComment: { + method: "POST", params: { - base: { + body: { + required: true, type: "string" }, - body: { + commit_id: { + required: true, type: "string" }, - maintainer_can_modify: { - type: "boolean" + in_reply_to: { + deprecated: true, + description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.", + type: "integer" + }, + line: { + type: "integer" }, number: { alias: "pull_number", @@ -8954,6 +9305,13 @@ var endpointsByScope = { required: true, type: "string" }, + path: { + required: true, + type: "string" + }, + position: { + type: "integer" + }, pull_number: { required: true, type: "integer" @@ -8962,68 +9320,39 @@ var endpointsByScope = { required: true, type: "string" }, - state: { - enum: ["open", "closed"], - type: "string" - }, - title: { - type: "string" - } - }, - url: "/repos/:owner/:repo/pulls/:pull_number" - }, - updateBranch: { - headers: { - accept: "application/vnd.github.lydian-preview+json" - }, - method: "PUT", - params: { - expected_head_sha: { - type: "string" - }, - owner: { - required: true, + side: { + enum: ["LEFT", "RIGHT"], type: "string" }, - pull_number: { - required: true, + start_line: { type: "integer" }, - repo: { - required: true, + start_side: { + enum: ["LEFT", "RIGHT", "side"], type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/update-branch" + url: "/repos/:owner/:repo/pulls/:pull_number/comments" }, - updateComment: { - method: "PATCH", + createCommentReply: { + deprecated: "octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)", + method: "POST", params: { body: { required: true, type: "string" }, - comment_id: { - required: true, - type: "integer" - }, - owner: { + commit_id: { required: true, type: "string" }, - repo: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/pulls/comments/:comment_id" - }, - updateReview: { - method: "PUT", - params: { - body: { - required: true, - type: "string" + in_reply_to: { + deprecated: true, + description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.", + type: "integer" + }, + line: { + type: "integer" }, number: { alias: "pull_number", @@ -9034,6 +9363,13 @@ var endpointsByScope = { required: true, type: "string" }, + path: { + required: true, + type: "string" + }, + position: { + type: "integer" + }, pull_number: { required: true, type: "integer" @@ -9042,37 +9378,42 @@ var endpointsByScope = { required: true, type: "string" }, - review_id: { - required: true, + side: { + enum: ["LEFT", "RIGHT"], + type: "string" + }, + start_line: { type: "integer" + }, + start_side: { + enum: ["LEFT", "RIGHT", "side"], + type: "string" } }, - url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" - } - }, - rateLimit: { - get: { - method: "GET", - params: {}, - url: "/rate_limit" - } - }, - reactions: { - createForCommitComment: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + url: "/repos/:owner/:repo/pulls/:pull_number/comments" + }, + createFromIssue: { + deprecated: "octokit.pulls.createFromIssue() is deprecated, see https://developer.github.com/v3/pulls/#create-a-pull-request", method: "POST", params: { - comment_id: { + base: { required: true, - type: "integer" + type: "string" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + draft: { + type: "boolean" + }, + head: { required: true, type: "string" }, + issue: { + required: true, + type: "integer" + }, + maintainer_can_modify: { + type: "boolean" + }, owner: { required: true, type: "string" @@ -9082,25 +9423,38 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/comments/:comment_id/reactions" + url: "/repos/:owner/:repo/pulls" }, - createForIssue: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + createReview: { method: "POST", params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + body: { + type: "string" + }, + comments: { + type: "object[]" + }, + "comments[].body": { required: true, type: "string" }, - issue_number: { + "comments[].path": { + required: true, + type: "string" + }, + "comments[].position": { required: true, type: "integer" }, + commit_id: { + type: "string" + }, + event: { + enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"], + type: "string" + }, number: { - alias: "issue_number", + alias: "pull_number", deprecated: true, type: "integer" }, @@ -9108,281 +9462,223 @@ var endpointsByScope = { required: true, type: "string" }, + pull_number: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues/:issue_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/reviews" }, - createForIssueComment: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + createReviewCommentReply: { method: "POST", params: { + body: { + required: true, + type: "string" + }, comment_id: { required: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + owner: { required: true, type: "string" }, - owner: { + pull_number: { required: true, - type: "string" + type: "integer" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies" }, - createForPullRequestReviewComment: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + createReviewRequest: { method: "POST", params: { - comment_id: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + owner: { required: true, type: "string" }, - owner: { + pull_number: { required: true, - type: "string" + type: "integer" }, repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions" - }, - createForTeamDiscussion: { - deprecated: "octokit.reactions.createForTeamDiscussion() has been renamed to octokit.reactions.createForTeamDiscussionLegacy() (2020-01-16)", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, - method: "POST", - params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - required: true, - type: "string" }, - discussion_number: { - required: true, - type: "integer" + reviewers: { + type: "string[]" }, - team_id: { - required: true, - type: "integer" - } - }, - url: "/teams/:team_id/discussions/:discussion_number/reactions" - }, - createForTeamDiscussionComment: { - deprecated: "octokit.reactions.createForTeamDiscussionComment() has been renamed to octokit.reactions.createForTeamDiscussionCommentLegacy() (2020-01-16)", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" + team_reviewers: { + type: "string[]" + } }, - method: "POST", + url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" + }, + deleteComment: { + method: "DELETE", params: { - comment_number: { + comment_id: { required: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + owner: { required: true, type: "string" }, - discussion_number: { - required: true, - type: "integer" - }, - team_id: { + repo: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + url: "/repos/:owner/:repo/pulls/comments/:comment_id" }, - createForTeamDiscussionCommentInOrg: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, - method: "POST", + deletePendingReview: { + method: "DELETE", params: { - comment_number: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + owner: { required: true, type: "string" }, - discussion_number: { + pull_number: { required: true, type: "integer" }, - org: { + repo: { required: true, type: "string" }, - team_slug: { + review_id: { required: true, - type: "string" + type: "integer" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" }, - createForTeamDiscussionCommentLegacy: { - deprecated: "octokit.reactions.createForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-comment-legacy", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, - method: "POST", + deleteReviewRequest: { + method: "DELETE", params: { - comment_number: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + owner: { required: true, type: "string" }, - discussion_number: { + pull_number: { required: true, type: "integer" }, - team_id: { + repo: { required: true, - type: "integer" + type: "string" + }, + reviewers: { + type: "string[]" + }, + team_reviewers: { + type: "string[]" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" }, - createForTeamDiscussionInOrg: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, - method: "POST", + dismissReview: { + method: "PUT", params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + message: { required: true, type: "string" }, - discussion_number: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - org: { + owner: { required: true, type: "string" }, - team_slug: { + pull_number: { + required: true, + type: "integer" + }, + repo: { required: true, type: "string" + }, + review_id: { + required: true, + type: "integer" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals" }, - createForTeamDiscussionLegacy: { - deprecated: "octokit.reactions.createForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-legacy", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, - method: "POST", + get: { + method: "GET", params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, type: "string" }, - discussion_number: { + pull_number: { required: true, type: "integer" }, - team_id: { - required: true, - type: "integer" - } - }, - url: "/teams/:team_id/discussions/:discussion_number/reactions" - }, - delete: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, - method: "DELETE", - params: { - reaction_id: { + repo: { required: true, - type: "integer" + type: "string" } }, - url: "/reactions/:reaction_id" + url: "/repos/:owner/:repo/pulls/:pull_number" }, - listForCommitComment: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + getComment: { method: "GET", params: { comment_id: { required: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - type: "string" - }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/comments/:comment_id/reactions" + url: "/repos/:owner/:repo/pulls/comments/:comment_id" }, - listForIssue: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + getCommentsForReview: { method: "GET", params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - type: "string" - }, - issue_number: { - required: true, - type: "integer" - }, number: { - alias: "issue_number", + alias: "pull_number", deprecated: true, type: "integer" }, @@ -9396,56 +9692,59 @@ var endpointsByScope = { per_page: { type: "integer" }, + pull_number: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" + }, + review_id: { + required: true, + type: "integer" } }, - url: "/repos/:owner/:repo/issues/:issue_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments" }, - listForIssueComment: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + getReview: { method: "GET", params: { - comment_id: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - type: "string" - }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { + pull_number: { + required: true, type: "integer" }, repo: { required: true, type: "string" + }, + review_id: { + required: true, + type: "integer" } }, - url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" }, - listForPullRequestReviewComment: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + list: { method: "GET", params: { - comment_id: { - required: true, - type: "integer" + base: { + type: "string" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + direction: { + enum: ["asc", "desc"], + type: "string" + }, + head: { type: "string" }, owner: { @@ -9461,24 +9760,33 @@ var endpointsByScope = { repo: { required: true, type: "string" + }, + sort: { + enum: ["created", "updated", "popularity", "long-running"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" } }, - url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions" + url: "/repos/:owner/:repo/pulls" }, - listForTeamDiscussion: { - deprecated: "octokit.reactions.listForTeamDiscussion() has been renamed to octokit.reactions.listForTeamDiscussionLegacy() (2020-01-16)", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + listComments: { method: "GET", params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + direction: { + enum: ["asc", "desc"], type: "string" }, - discussion_number: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, - type: "integer" + type: "string" }, page: { type: "integer" @@ -9486,31 +9794,34 @@ var endpointsByScope = { per_page: { type: "integer" }, - team_id: { + pull_number: { required: true, type: "integer" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated"], + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/comments" }, - listForTeamDiscussionComment: { - deprecated: "octokit.reactions.listForTeamDiscussionComment() has been renamed to octokit.reactions.listForTeamDiscussionCommentLegacy() (2020-01-16)", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + listCommentsForRepo: { method: "GET", params: { - comment_number: { - required: true, - type: "integer" - }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + direction: { + enum: ["asc", "desc"], type: "string" }, - discussion_number: { + owner: { required: true, - type: "integer" + type: "string" }, page: { type: "integer" @@ -9518,32 +9829,29 @@ var endpointsByScope = { per_page: { type: "integer" }, - team_id: { + repo: { required: true, - type: "integer" + type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated"], + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + url: "/repos/:owner/:repo/pulls/comments" }, - listForTeamDiscussionCommentInOrg: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + listCommits: { method: "GET", params: { - comment_number: { - required: true, - type: "integer" - }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - type: "string" - }, - discussion_number: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - org: { + owner: { required: true, type: "string" }, @@ -9553,31 +9861,28 @@ var endpointsByScope = { per_page: { type: "integer" }, - team_slug: { + pull_number: { + required: true, + type: "integer" + }, + repo: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/commits" }, - listForTeamDiscussionCommentLegacy: { - deprecated: "octokit.reactions.listForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-comment-legacy", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + listFiles: { method: "GET", params: { - comment_number: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - type: "string" - }, - discussion_number: { + owner: { required: true, - type: "integer" + type: "string" }, page: { type: "integer" @@ -9585,28 +9890,26 @@ var endpointsByScope = { per_page: { type: "integer" }, - team_id: { + pull_number: { required: true, type: "integer" + }, + repo: { + required: true, + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/files" }, - listForTeamDiscussionInOrg: { - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + listReviewRequests: { method: "GET", params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - type: "string" - }, - discussion_number: { - required: true, + number: { + alias: "pull_number", + deprecated: true, type: "integer" }, - org: { + owner: { required: true, type: "string" }, @@ -9616,27 +9919,28 @@ var endpointsByScope = { per_page: { type: "integer" }, - team_slug: { + pull_number: { + required: true, + type: "integer" + }, + repo: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions" + url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" }, - listForTeamDiscussionLegacy: { - deprecated: "octokit.reactions.listForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-legacy", - headers: { - accept: "application/vnd.github.squirrel-girl-preview+json" - }, + listReviews: { method: "GET", params: { - content: { - enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], - type: "string" + number: { + alias: "pull_number", + deprecated: true, + type: "integer" }, - discussion_number: { + owner: { required: true, - type: "integer" + type: "string" }, page: { type: "integer" @@ -9644,144 +9948,161 @@ var endpointsByScope = { per_page: { type: "integer" }, - team_id: { + pull_number: { required: true, type: "integer" - } - }, - url: "/teams/:team_id/discussions/:discussion_number/reactions" - } - }, - repos: { - acceptInvitation: { - method: "PATCH", - params: { - invitation_id: { + }, + repo: { required: true, - type: "integer" + type: "string" } }, - url: "/user/repository_invitations/:invitation_id" + url: "/repos/:owner/:repo/pulls/:pull_number/reviews" }, - addCollaborator: { + merge: { method: "PUT", params: { - owner: { - required: true, + commit_message: { type: "string" }, - permission: { - enum: ["pull", "push", "admin"], + commit_title: { type: "string" }, - repo: { - required: true, + merge_method: { + enum: ["merge", "squash", "rebase"], type: "string" }, - username: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/collaborators/:username" - }, - addDeployKey: { - method: "POST", - params: { - key: { - required: true, - type: "string" + number: { + alias: "pull_number", + deprecated: true, + type: "integer" }, owner: { required: true, type: "string" }, - read_only: { - type: "boolean" + pull_number: { + required: true, + type: "integer" }, repo: { required: true, type: "string" }, - title: { + sha: { type: "string" } }, - url: "/repos/:owner/:repo/keys" + url: "/repos/:owner/:repo/pulls/:pull_number/merge" }, - addProtectedBranchAdminEnforcement: { + submitReview: { method: "POST", params: { - branch: { + body: { + type: "string" + }, + event: { + enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"], required: true, type: "string" }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, owner: { required: true, type: "string" }, + pull_number: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" + }, + review_id: { + required: true, + type: "integer" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events" }, - addProtectedBranchAppRestrictions: { - method: "POST", + update: { + method: "PATCH", params: { - apps: { - mapTo: "data", - required: true, - type: "string[]" + base: { + type: "string" }, - branch: { - required: true, + body: { type: "string" }, + maintainer_can_modify: { + type: "boolean" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, owner: { required: true, type: "string" }, + pull_number: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" + }, + state: { + enum: ["open", "closed"], + type: "string" + }, + title: { + type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + url: "/repos/:owner/:repo/pulls/:pull_number" }, - addProtectedBranchRequiredSignatures: { + updateBranch: { headers: { - accept: "application/vnd.github.zzzax-preview+json" + accept: "application/vnd.github.lydian-preview+json" }, - method: "POST", + method: "PUT", params: { - branch: { - required: true, + expected_head_sha: { type: "string" }, owner: { required: true, type: "string" }, + pull_number: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" + url: "/repos/:owner/:repo/pulls/:pull_number/update-branch" }, - addProtectedBranchRequiredStatusChecksContexts: { - method: "POST", + updateComment: { + method: "PATCH", params: { - branch: { + body: { required: true, type: "string" }, - contexts: { - mapTo: "data", + comment_id: { required: true, - type: "string[]" + type: "integer" }, owner: { required: true, @@ -9792,35 +10113,60 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + url: "/repos/:owner/:repo/pulls/comments/:comment_id" }, - addProtectedBranchTeamRestrictions: { - method: "POST", + updateReview: { + method: "PUT", params: { - branch: { + body: { required: true, type: "string" }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, owner: { required: true, type: "string" }, + pull_number: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" }, - teams: { - mapTo: "data", + review_id: { required: true, - type: "string[]" + type: "integer" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" - }, - addProtectedBranchUserRestrictions: { + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" + } + }, + rateLimit: { + get: { + method: "GET", + params: {}, + url: "/rate_limit" + } + }, + reactions: { + createForCommitComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, method: "POST", params: { - branch: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], required: true, type: "string" }, @@ -9831,39 +10177,56 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - users: { - mapTo: "data", - required: true, - type: "string[]" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + url: "/repos/:owner/:repo/comments/:comment_id/reactions" }, - checkCollaborator: { - method: "GET", + createForIssue: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", params: { - owner: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], required: true, type: "string" }, - repo: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { required: true, type: "string" }, - username: { + repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/collaborators/:username" + url: "/repos/:owner/:repo/issues/:issue_number/reactions" }, - checkVulnerabilityAlerts: { + createForIssueComment: { headers: { - accept: "application/vnd.github.dorian-preview+json" + accept: "application/vnd.github.squirrel-girl-preview+json" }, - method: "GET", + method: "POST", params: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, owner: { required: true, type: "string" @@ -9873,16 +10236,20 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/vulnerability-alerts" + url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions" }, - compareCommits: { - method: "GET", + createForPullRequestReviewComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", params: { - base: { + comment_id: { required: true, - type: "string" + type: "integer" }, - head: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], required: true, type: "string" }, @@ -9895,544 +10262,580 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/compare/:base...:head" + url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions" }, - createCommitComment: { + createForTeamDiscussion: { + deprecated: "octokit.reactions.createForTeamDiscussion() has been renamed to octokit.reactions.createForTeamDiscussionLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, method: "POST", params: { - body: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], required: true, type: "string" }, - commit_sha: { + discussion_number: { required: true, - type: "string" - }, - line: { type: "integer" }, - owner: { + team_id: { required: true, - type: "string" - }, - path: { - type: "string" - }, - position: { type: "integer" - }, - repo: { - required: true, - type: "string" - }, - sha: { - alias: "commit_sha", - deprecated: true, - type: "string" } }, - url: "/repos/:owner/:repo/commits/:commit_sha/comments" + url: "/teams/:team_id/discussions/:discussion_number/reactions" }, - createDeployment: { + createForTeamDiscussionComment: { + deprecated: "octokit.reactions.createForTeamDiscussionComment() has been renamed to octokit.reactions.createForTeamDiscussionCommentLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, method: "POST", params: { - auto_merge: { - type: "boolean" - }, - description: { - type: "string" - }, - environment: { - type: "string" - }, - owner: { + comment_number: { required: true, - type: "string" - }, - payload: { - type: "string" - }, - production_environment: { - type: "boolean" + type: "integer" }, - ref: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], required: true, type: "string" }, - repo: { + discussion_number: { required: true, - type: "string" - }, - required_contexts: { - type: "string[]" - }, - task: { - type: "string" + type: "integer" }, - transient_environment: { - type: "boolean" + team_id: { + required: true, + type: "integer" } }, - url: "/repos/:owner/:repo/deployments" + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" }, - createDeploymentStatus: { + createForTeamDiscussionCommentInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, method: "POST", params: { - auto_inactive: { - type: "boolean" - }, - deployment_id: { + comment_number: { required: true, type: "integer" }, - description: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, type: "string" }, - environment: { - enum: ["production", "staging", "qa"], - type: "string" + discussion_number: { + required: true, + type: "integer" }, - environment_url: { + org: { + required: true, type: "string" }, - log_url: { + team_slug: { + required: true, type: "string" - }, - owner: { + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions" + }, + createForTeamDiscussionCommentLegacy: { + deprecated: "octokit.reactions.createForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-comment-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + comment_number: { required: true, - type: "string" + type: "integer" }, - repo: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], required: true, type: "string" }, - state: { - enum: ["error", "failure", "inactive", "in_progress", "queued", "pending", "success"], + discussion_number: { required: true, - type: "string" + type: "integer" }, - target_url: { - type: "string" + team_id: { + required: true, + type: "integer" } }, - url: "/repos/:owner/:repo/deployments/:deployment_id/statuses" + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" }, - createDispatchEvent: { + createForTeamDiscussionInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, method: "POST", params: { - client_payload: { - type: "object" - }, - event_type: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, type: "string" }, - owner: { + discussion_number: { + required: true, + type: "integer" + }, + org: { required: true, type: "string" }, - repo: { + team_slug: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/dispatches" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions" }, - createFile: { - deprecated: "octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)", - method: "PUT", + createForTeamDiscussionLegacy: { + deprecated: "octokit.reactions.createForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", params: { - author: { - type: "object" - }, - "author.email": { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], required: true, type: "string" }, - "author.name": { + discussion_number: { required: true, - type: "string" - }, - branch: { - type: "string" - }, - committer: { - type: "object" + type: "integer" }, - "committer.email": { + team_id: { required: true, - type: "string" - }, - "committer.name": { + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/reactions" + }, + delete: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "DELETE", + params: { + reaction_id: { required: true, - type: "string" - }, - content: { + type: "integer" + } + }, + url: "/reactions/:reaction_id" + }, + listForCommitComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_id: { required: true, - type: "string" + type: "integer" }, - message: { - required: true, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, owner: { required: true, type: "string" }, - path: { - required: true, - type: "string" + page: { + type: "integer" + }, + per_page: { + type: "integer" }, repo: { required: true, type: "string" - }, - sha: { - type: "string" } }, - url: "/repos/:owner/:repo/contents/:path" + url: "/repos/:owner/:repo/comments/:comment_id/reactions" }, - createForAuthenticatedUser: { - method: "POST", + listForIssue: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", params: { - allow_merge_commit: { - type: "boolean" - }, - allow_rebase_merge: { - type: "boolean" - }, - allow_squash_merge: { - type: "boolean" - }, - auto_init: { - type: "boolean" - }, - delete_branch_on_merge: { - type: "boolean" - }, - description: { - type: "string" - }, - gitignore_template: { - type: "string" - }, - has_issues: { - type: "boolean" - }, - has_projects: { - type: "boolean" - }, - has_wiki: { - type: "boolean" - }, - homepage: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - is_template: { - type: "boolean" + issue_number: { + required: true, + type: "integer" }, - license_template: { - type: "string" + number: { + alias: "issue_number", + deprecated: true, + type: "integer" }, - name: { + owner: { required: true, type: "string" }, - private: { - type: "boolean" + page: { + type: "integer" }, - team_id: { + per_page: { type: "integer" }, - visibility: { - enum: ["public", "private", "visibility", "internal"], + repo: { + required: true, type: "string" } }, - url: "/user/repos" + url: "/repos/:owner/:repo/issues/:issue_number/reactions" }, - createFork: { - method: "POST", + listForIssueComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", params: { - organization: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/forks" + url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions" }, - createHook: { - method: "POST", + listForPullRequestReviewComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", params: { - active: { - type: "boolean" - }, - config: { + comment_id: { required: true, - type: "object" + type: "integer" }, - "config.content_type": { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - "config.insecure_ssl": { + owner: { + required: true, type: "string" }, - "config.secret": { - type: "string" + page: { + type: "integer" }, - "config.url": { + per_page: { + type: "integer" + }, + repo: { required: true, type: "string" - }, - events: { - type: "string[]" - }, - name: { + } + }, + url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions" + }, + listForTeamDiscussion: { + deprecated: "octokit.reactions.listForTeamDiscussion() has been renamed to octokit.reactions.listForTeamDiscussionLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - owner: { + discussion_number: { required: true, - type: "string" + type: "integer" + }, + page: { + type: "integer" }, - repo: { + per_page: { + type: "integer" + }, + team_id: { required: true, - type: "string" + type: "integer" } }, - url: "/repos/:owner/:repo/hooks" + url: "/teams/:team_id/discussions/:discussion_number/reactions" }, - createInOrg: { - method: "POST", + listForTeamDiscussionComment: { + deprecated: "octokit.reactions.listForTeamDiscussionComment() has been renamed to octokit.reactions.listForTeamDiscussionCommentLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", params: { - allow_merge_commit: { - type: "boolean" - }, - allow_rebase_merge: { - type: "boolean" - }, - allow_squash_merge: { - type: "boolean" - }, - auto_init: { - type: "boolean" - }, - delete_branch_on_merge: { - type: "boolean" - }, - description: { - type: "string" + comment_number: { + required: true, + type: "integer" }, - gitignore_template: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - has_issues: { - type: "boolean" - }, - has_projects: { - type: "boolean" + discussion_number: { + required: true, + type: "integer" }, - has_wiki: { - type: "boolean" + page: { + type: "integer" }, - homepage: { - type: "string" + per_page: { + type: "integer" }, - is_template: { - type: "boolean" + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + }, + listForTeamDiscussionCommentInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_number: { + required: true, + type: "integer" }, - license_template: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - name: { + discussion_number: { required: true, - type: "string" + type: "integer" }, org: { required: true, type: "string" }, - private: { - type: "boolean" + page: { + type: "integer" }, - team_id: { + per_page: { type: "integer" }, - visibility: { - enum: ["public", "private", "visibility", "internal"], + team_slug: { + required: true, type: "string" } }, - url: "/orgs/:org/repos" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions" }, - createOrUpdateFile: { - method: "PUT", + listForTeamDiscussionCommentLegacy: { + deprecated: "octokit.reactions.listForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-comment-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", params: { - author: { - type: "object" - }, - "author.email": { + comment_number: { required: true, - type: "string" + type: "integer" }, - "author.name": { - required: true, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - branch: { - type: "string" + discussion_number: { + required: true, + type: "integer" }, - committer: { - type: "object" + page: { + type: "integer" }, - "committer.email": { - required: true, - type: "string" + per_page: { + type: "integer" }, - "committer.name": { + team_id: { required: true, - type: "string" - }, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + }, + listForTeamDiscussionInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { content: { - required: true, + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - message: { + discussion_number: { required: true, - type: "string" + type: "integer" }, - owner: { + org: { required: true, type: "string" }, - path: { - required: true, - type: "string" + page: { + type: "integer" }, - repo: { - required: true, - type: "string" + per_page: { + type: "integer" }, - sha: { + team_slug: { + required: true, type: "string" } }, - url: "/repos/:owner/:repo/contents/:path" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions" }, - createRelease: { - method: "POST", + listForTeamDiscussionLegacy: { + deprecated: "octokit.reactions.listForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", params: { - body: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], type: "string" }, - draft: { - type: "boolean" + discussion_number: { + required: true, + type: "integer" }, - name: { - type: "string" + page: { + type: "integer" + }, + per_page: { + type: "integer" }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/reactions" + } + }, + repos: { + acceptInvitation: { + method: "PATCH", + params: { + invitation_id: { + required: true, + type: "integer" + } + }, + url: "/user/repository_invitations/:invitation_id" + }, + addCollaborator: { + method: "PUT", + params: { owner: { required: true, type: "string" }, - prerelease: { - type: "boolean" + permission: { + enum: ["pull", "push", "admin"], + type: "string" }, repo: { required: true, type: "string" }, - tag_name: { + username: { required: true, type: "string" - }, - target_commitish: { - type: "string" } }, - url: "/repos/:owner/:repo/releases" + url: "/repos/:owner/:repo/collaborators/:username" }, - createStatus: { + addDeployKey: { method: "POST", params: { - context: { - type: "string" - }, - description: { - type: "string" - }, - owner: { + key: { required: true, type: "string" }, - repo: { + owner: { required: true, type: "string" }, - sha: { - required: true, - type: "string" + read_only: { + type: "boolean" }, - state: { - enum: ["error", "failure", "pending", "success"], + repo: { required: true, type: "string" }, - target_url: { + title: { type: "string" } }, - url: "/repos/:owner/:repo/statuses/:sha" + url: "/repos/:owner/:repo/keys" }, - createUsingTemplate: { - headers: { - accept: "application/vnd.github.baptiste-preview+json" - }, + addProtectedBranchAdminEnforcement: { method: "POST", - params: { - description: { - type: "string" - }, - name: { + params: { + branch: { required: true, type: "string" }, owner: { - type: "string" - }, - private: { - type: "boolean" - }, - template_owner: { required: true, type: "string" }, - template_repo: { + repo: { required: true, type: "string" } }, - url: "/repos/:template_owner/:template_repo/generate" + url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" }, - declineInvitation: { - method: "DELETE", + addProtectedBranchAppRestrictions: { + method: "POST", params: { - invitation_id: { + apps: { + mapTo: "data", required: true, - type: "integer" - } - }, - url: "/user/repository_invitations/:invitation_id" - }, - delete: { - method: "DELETE", - params: { + type: "string[]" + }, + branch: { + required: true, + type: "string" + }, owner: { required: true, type: "string" @@ -10442,14 +10845,17 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" }, - deleteCommitComment: { - method: "DELETE", + addProtectedBranchRequiredSignatures: { + headers: { + accept: "application/vnd.github.zzzax-preview+json" + }, + method: "POST", params: { - comment_id: { + branch: { required: true, - type: "integer" + type: "string" }, owner: { required: true, @@ -10460,14 +10866,19 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/comments/:comment_id" + url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" }, - deleteDownload: { - method: "DELETE", + addProtectedBranchRequiredStatusChecksContexts: { + method: "POST", params: { - download_id: { + branch: { required: true, - type: "integer" + type: "string" + }, + contexts: { + mapTo: "data", + required: true, + type: "string[]" }, owner: { required: true, @@ -10478,41 +10889,39 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/downloads/:download_id" + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" }, - deleteFile: { - method: "DELETE", + addProtectedBranchTeamRestrictions: { + method: "POST", params: { - author: { - type: "object" - }, - "author.email": { - type: "string" - }, - "author.name": { - type: "string" - }, branch: { + required: true, type: "string" }, - committer: { - type: "object" - }, - "committer.email": { - type: "string" - }, - "committer.name": { + owner: { + required: true, type: "string" }, - message: { + repo: { required: true, type: "string" }, - owner: { + teams: { + mapTo: "data", + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + }, + addProtectedBranchUserRestrictions: { + method: "POST", + params: { + branch: { required: true, type: "string" }, - path: { + owner: { required: true, type: "string" }, @@ -10520,20 +10929,17 @@ var endpointsByScope = { required: true, type: "string" }, - sha: { + users: { + mapTo: "data", required: true, - type: "string" + type: "string[]" } }, - url: "/repos/:owner/:repo/contents/:path" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" }, - deleteHook: { - method: "DELETE", + checkCollaborator: { + method: "GET", params: { - hook_id: { - required: true, - type: "integer" - }, owner: { required: true, type: "string" @@ -10541,17 +10947,20 @@ var endpointsByScope = { repo: { required: true, type: "string" + }, + username: { + required: true, + type: "string" } }, - url: "/repos/:owner/:repo/hooks/:hook_id" + url: "/repos/:owner/:repo/collaborators/:username" }, - deleteInvitation: { - method: "DELETE", + checkVulnerabilityAlerts: { + headers: { + accept: "application/vnd.github.dorian-preview+json" + }, + method: "GET", params: { - invitation_id: { - required: true, - type: "integer" - }, owner: { required: true, type: "string" @@ -10561,67 +10970,131 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/invitations/:invitation_id" + url: "/repos/:owner/:repo/vulnerability-alerts" }, - deleteRelease: { - method: "DELETE", + compareCommits: { + method: "GET", params: { - owner: { + base: { required: true, type: "string" }, - release_id: { + head: { required: true, - type: "integer" + type: "string" + }, + owner: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/releases/:release_id" + url: "/repos/:owner/:repo/compare/:base...:head" }, - deleteReleaseAsset: { - method: "DELETE", + createCommitComment: { + method: "POST", params: { - asset_id: { + body: { + required: true, + type: "string" + }, + commit_sha: { required: true, + type: "string" + }, + line: { type: "integer" }, owner: { required: true, type: "string" }, + path: { + type: "string" + }, + position: { + type: "integer" + }, repo: { required: true, type: "string" + }, + sha: { + alias: "commit_sha", + deprecated: true, + type: "string" } }, - url: "/repos/:owner/:repo/releases/assets/:asset_id" + url: "/repos/:owner/:repo/commits/:commit_sha/comments" }, - disableAutomatedSecurityFixes: { - headers: { - accept: "application/vnd.github.london-preview+json" - }, - method: "DELETE", + createDeployment: { + method: "POST", params: { + auto_merge: { + type: "boolean" + }, + description: { + type: "string" + }, + environment: { + type: "string" + }, owner: { required: true, type: "string" }, + payload: { + type: "string" + }, + production_environment: { + type: "boolean" + }, + ref: { + required: true, + type: "string" + }, repo: { required: true, type: "string" + }, + required_contexts: { + type: "string[]" + }, + task: { + type: "string" + }, + transient_environment: { + type: "boolean" } }, - url: "/repos/:owner/:repo/automated-security-fixes" + url: "/repos/:owner/:repo/deployments" }, - disablePagesSite: { - headers: { - accept: "application/vnd.github.switcheroo-preview+json" - }, - method: "DELETE", + createDeploymentStatus: { + method: "POST", params: { + auto_inactive: { + type: "boolean" + }, + deployment_id: { + required: true, + type: "integer" + }, + description: { + type: "string" + }, + environment: { + enum: ["production", "staging", "qa"], + type: "string" + }, + environment_url: { + type: "string" + }, + log_url: { + type: "string" + }, owner: { required: true, type: "string" @@ -10629,33 +11102,27 @@ var endpointsByScope = { repo: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/pages" - }, - disableVulnerabilityAlerts: { - headers: { - accept: "application/vnd.github.dorian-preview+json" - }, - method: "DELETE", - params: { - owner: { + }, + state: { + enum: ["error", "failure", "inactive", "in_progress", "queued", "pending", "success"], required: true, type: "string" }, - repo: { - required: true, + target_url: { type: "string" } }, - url: "/repos/:owner/:repo/vulnerability-alerts" + url: "/repos/:owner/:repo/deployments/:deployment_id/statuses" }, - enableAutomatedSecurityFixes: { - headers: { - accept: "application/vnd.github.london-preview+json" - }, - method: "PUT", + createDispatchEvent: { + method: "POST", params: { + client_payload: { + type: "object" + }, + event_type: { + type: "string" + }, owner: { required: true, type: "string" @@ -10665,71 +11132,126 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/automated-security-fixes" + url: "/repos/:owner/:repo/dispatches" }, - enablePagesSite: { - headers: { - accept: "application/vnd.github.switcheroo-preview+json" - }, - method: "POST", + createFile: { + deprecated: "octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)", + method: "PUT", params: { - owner: { + author: { + type: "object" + }, + "author.email": { required: true, type: "string" }, - repo: { + "author.name": { required: true, type: "string" }, - source: { + branch: { + type: "string" + }, + committer: { type: "object" }, - "source.branch": { - enum: ["master", "gh-pages"], + "committer.email": { + required: true, type: "string" }, - "source.path": { + "committer.name": { + required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/pages" - }, - enableVulnerabilityAlerts: { - headers: { - accept: "application/vnd.github.dorian-preview+json" - }, - method: "PUT", - params: { + }, + content: { + required: true, + type: "string" + }, + message: { + required: true, + type: "string" + }, owner: { required: true, type: "string" }, + path: { + required: true, + type: "string" + }, repo: { required: true, type: "string" + }, + sha: { + type: "string" } }, - url: "/repos/:owner/:repo/vulnerability-alerts" + url: "/repos/:owner/:repo/contents/:path" }, - get: { - method: "GET", + createForAuthenticatedUser: { + method: "POST", params: { - owner: { - required: true, + allow_merge_commit: { + type: "boolean" + }, + allow_rebase_merge: { + type: "boolean" + }, + allow_squash_merge: { + type: "boolean" + }, + auto_init: { + type: "boolean" + }, + delete_branch_on_merge: { + type: "boolean" + }, + description: { type: "string" }, - repo: { + gitignore_template: { + type: "string" + }, + has_issues: { + type: "boolean" + }, + has_projects: { + type: "boolean" + }, + has_wiki: { + type: "boolean" + }, + homepage: { + type: "string" + }, + is_template: { + type: "boolean" + }, + license_template: { + type: "string" + }, + name: { required: true, type: "string" + }, + private: { + type: "boolean" + }, + team_id: { + type: "integer" + }, + visibility: { + enum: ["public", "private", "visibility", "internal"], + type: "string" } }, - url: "/repos/:owner/:repo" + url: "/user/repos" }, - getAppsWithAccessToProtectedBranch: { - method: "GET", + createFork: { + method: "POST", params: { - branch: { - required: true, + organization: { type: "string" }, owner: { @@ -10741,20 +11263,38 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + url: "/repos/:owner/:repo/forks" }, - getArchiveLink: { - method: "GET", + createHook: { + method: "POST", params: { - archive_format: { + active: { + type: "boolean" + }, + config: { required: true, + type: "object" + }, + "config.content_type": { type: "string" }, - owner: { + "config.insecure_ssl": { + type: "string" + }, + "config.secret": { + type: "string" + }, + "config.url": { required: true, type: "string" }, - ref: { + events: { + type: "string[]" + }, + name: { + type: "string" + }, + owner: { required: true, type: "string" }, @@ -10763,142 +11303,232 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/:archive_format/:ref" + url: "/repos/:owner/:repo/hooks" }, - getBranch: { - method: "GET", + createInOrg: { + method: "POST", params: { - branch: { - required: true, + allow_merge_commit: { + type: "boolean" + }, + allow_rebase_merge: { + type: "boolean" + }, + allow_squash_merge: { + type: "boolean" + }, + auto_init: { + type: "boolean" + }, + delete_branch_on_merge: { + type: "boolean" + }, + description: { type: "string" }, - owner: { + gitignore_template: { + type: "string" + }, + has_issues: { + type: "boolean" + }, + has_projects: { + type: "boolean" + }, + has_wiki: { + type: "boolean" + }, + homepage: { + type: "string" + }, + is_template: { + type: "boolean" + }, + license_template: { + type: "string" + }, + name: { required: true, type: "string" }, - repo: { + org: { required: true, type: "string" + }, + private: { + type: "boolean" + }, + team_id: { + type: "integer" + }, + visibility: { + enum: ["public", "private", "visibility", "internal"], + type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch" + url: "/orgs/:org/repos" }, - getBranchProtection: { - method: "GET", + createOrUpdateFile: { + method: "PUT", params: { + author: { + type: "object" + }, + "author.email": { + required: true, + type: "string" + }, + "author.name": { + required: true, + type: "string" + }, branch: { + type: "string" + }, + committer: { + type: "object" + }, + "committer.email": { + required: true, + type: "string" + }, + "committer.name": { required: true, type: "string" }, - owner: { + content: { required: true, type: "string" }, - repo: { + message: { required: true, type: "string" - } - }, - url: "/repos/:owner/:repo/branches/:branch/protection" - }, - getClones: { - method: "GET", - params: { + }, owner: { required: true, type: "string" }, - per: { - enum: ["day", "week"], + path: { + required: true, type: "string" }, repo: { required: true, type: "string" + }, + sha: { + type: "string" } }, - url: "/repos/:owner/:repo/traffic/clones" + url: "/repos/:owner/:repo/contents/:path" }, - getCodeFrequencyStats: { - method: "GET", + createRelease: { + method: "POST", params: { - owner: { - required: true, + body: { type: "string" }, - repo: { - required: true, + draft: { + type: "boolean" + }, + name: { type: "string" - } - }, - url: "/repos/:owner/:repo/stats/code_frequency" - }, - getCollaboratorPermissionLevel: { - method: "GET", - params: { + }, owner: { required: true, type: "string" }, + prerelease: { + type: "boolean" + }, repo: { required: true, type: "string" }, - username: { + tag_name: { required: true, type: "string" + }, + target_commitish: { + type: "string" } }, - url: "/repos/:owner/:repo/collaborators/:username/permission" + url: "/repos/:owner/:repo/releases" }, - getCombinedStatusForRef: { - method: "GET", + createStatus: { + method: "POST", params: { + context: { + type: "string" + }, + description: { + type: "string" + }, owner: { required: true, type: "string" }, - ref: { + repo: { required: true, type: "string" }, - repo: { + sha: { + required: true, + type: "string" + }, + state: { + enum: ["error", "failure", "pending", "success"], required: true, type: "string" + }, + target_url: { + type: "string" } }, - url: "/repos/:owner/:repo/commits/:ref/status" + url: "/repos/:owner/:repo/statuses/:sha" }, - getCommit: { - method: "GET", + createUsingTemplate: { + headers: { + accept: "application/vnd.github.baptiste-preview+json" + }, + method: "POST", params: { - commit_sha: { - alias: "ref", - deprecated: true, + description: { type: "string" }, - owner: { + name: { required: true, type: "string" }, - ref: { - required: true, + owner: { type: "string" }, - repo: { + private: { + type: "boolean" + }, + template_owner: { required: true, type: "string" }, - sha: { - alias: "ref", - deprecated: true, + template_repo: { + required: true, type: "string" } }, - url: "/repos/:owner/:repo/commits/:ref" + url: "/repos/:template_owner/:template_repo/generate" }, - getCommitActivityStats: { - method: "GET", + declineInvitation: { + method: "DELETE", + params: { + invitation_id: { + required: true, + type: "integer" + } + }, + url: "/user/repository_invitations/:invitation_id" + }, + delete: { + method: "DELETE", params: { owner: { required: true, @@ -10909,10 +11539,10 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/stats/commit_activity" + url: "/repos/:owner/:repo" }, - getCommitComment: { - method: "GET", + deleteCommitComment: { + method: "DELETE", params: { comment_id: { required: true, @@ -10929,18 +11559,14 @@ var endpointsByScope = { }, url: "/repos/:owner/:repo/comments/:comment_id" }, - getCommitRefSha: { - deprecated: "octokit.repos.getCommitRefSha() is deprecated, see https://developer.github.com/v3/repos/commits/#get-a-single-commit", - headers: { - accept: "application/vnd.github.v3.sha" - }, - method: "GET", + deleteDownload: { + method: "DELETE", params: { - owner: { + download_id: { required: true, - type: "string" + type: "integer" }, - ref: { + owner: { required: true, type: "string" }, @@ -10949,11 +11575,36 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/commits/:ref" + url: "/repos/:owner/:repo/downloads/:download_id" }, - getContents: { - method: "GET", + deleteFile: { + method: "DELETE", params: { + author: { + type: "object" + }, + "author.email": { + type: "string" + }, + "author.name": { + type: "string" + }, + branch: { + type: "string" + }, + committer: { + type: "object" + }, + "committer.email": { + type: "string" + }, + "committer.name": { + type: "string" + }, + message: { + required: true, + type: "string" + }, owner: { required: true, type: "string" @@ -10962,19 +11613,24 @@ var endpointsByScope = { required: true, type: "string" }, - ref: { + repo: { + required: true, type: "string" }, - repo: { + sha: { required: true, type: "string" } }, url: "/repos/:owner/:repo/contents/:path" }, - getContributorsStats: { - method: "GET", + deleteHook: { + method: "DELETE", params: { + hook_id: { + required: true, + type: "integer" + }, owner: { required: true, type: "string" @@ -10984,12 +11640,12 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/stats/contributors" + url: "/repos/:owner/:repo/hooks/:hook_id" }, - getDeployKey: { - method: "GET", + deleteInvitation: { + method: "DELETE", params: { - key_id: { + invitation_id: { required: true, type: "integer" }, @@ -11002,30 +11658,30 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/keys/:key_id" + url: "/repos/:owner/:repo/invitations/:invitation_id" }, - getDeployment: { - method: "GET", + deleteRelease: { + method: "DELETE", params: { - deployment_id: { - required: true, - type: "integer" - }, owner: { required: true, type: "string" }, + release_id: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/deployments/:deployment_id" + url: "/repos/:owner/:repo/releases/:release_id" }, - getDeploymentStatus: { - method: "GET", + deleteReleaseAsset: { + method: "DELETE", params: { - deployment_id: { + asset_id: { required: true, type: "integer" }, @@ -11036,21 +11692,16 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - status_id: { - required: true, - type: "integer" } }, - url: "/repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id" + url: "/repos/:owner/:repo/releases/assets/:asset_id" }, - getDownload: { - method: "GET", + disableAutomatedSecurityFixes: { + headers: { + accept: "application/vnd.github.london-preview+json" + }, + method: "DELETE", params: { - download_id: { - required: true, - type: "integer" - }, owner: { required: true, type: "string" @@ -11060,15 +11711,14 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/downloads/:download_id" + url: "/repos/:owner/:repo/automated-security-fixes" }, - getHook: { - method: "GET", + disablePagesSite: { + headers: { + accept: "application/vnd.github.switcheroo-preview+json" + }, + method: "DELETE", params: { - hook_id: { - required: true, - type: "integer" - }, owner: { required: true, type: "string" @@ -11078,10 +11728,13 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/hooks/:hook_id" + url: "/repos/:owner/:repo/pages" }, - getLatestPagesBuild: { - method: "GET", + disableVulnerabilityAlerts: { + headers: { + accept: "application/vnd.github.dorian-preview+json" + }, + method: "DELETE", params: { owner: { required: true, @@ -11092,10 +11745,13 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/pages/builds/latest" - }, - getLatestRelease: { - method: "GET", + url: "/repos/:owner/:repo/vulnerability-alerts" + }, + enableAutomatedSecurityFixes: { + headers: { + accept: "application/vnd.github.london-preview+json" + }, + method: "PUT", params: { owner: { required: true, @@ -11106,10 +11762,13 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/releases/latest" + url: "/repos/:owner/:repo/automated-security-fixes" }, - getPages: { - method: "GET", + enablePagesSite: { + headers: { + accept: "application/vnd.github.switcheroo-preview+json" + }, + method: "POST", params: { owner: { required: true, @@ -11118,17 +11777,26 @@ var endpointsByScope = { repo: { required: true, type: "string" + }, + source: { + type: "object" + }, + "source.branch": { + enum: ["master", "gh-pages"], + type: "string" + }, + "source.path": { + type: "string" } }, url: "/repos/:owner/:repo/pages" }, - getPagesBuild: { - method: "GET", + enableVulnerabilityAlerts: { + headers: { + accept: "application/vnd.github.dorian-preview+json" + }, + method: "PUT", params: { - build_id: { - required: true, - type: "integer" - }, owner: { required: true, type: "string" @@ -11138,9 +11806,9 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/pages/builds/:build_id" + url: "/repos/:owner/:repo/vulnerability-alerts" }, - getParticipationStats: { + get: { method: "GET", params: { owner: { @@ -11152,9 +11820,9 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/stats/participation" + url: "/repos/:owner/:repo" }, - getProtectedBranchAdminEnforcement: { + getAppsWithAccessToProtectedBranch: { method: "GET", params: { branch: { @@ -11170,12 +11838,12 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" }, - getProtectedBranchPullRequestReviewEnforcement: { + getArchiveLink: { method: "GET", params: { - branch: { + archive_format: { required: true, type: "string" }, @@ -11183,17 +11851,18 @@ var endpointsByScope = { required: true, type: "string" }, + ref: { + required: true, + type: "string" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" + url: "/repos/:owner/:repo/:archive_format/:ref" }, - getProtectedBranchRequiredSignatures: { - headers: { - accept: "application/vnd.github.zzzax-preview+json" - }, + getBranch: { method: "GET", params: { branch: { @@ -11209,9 +11878,9 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" + url: "/repos/:owner/:repo/branches/:branch" }, - getProtectedBranchRequiredStatusChecks: { + getBranchProtection: { method: "GET", params: { branch: { @@ -11227,17 +11896,17 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" + url: "/repos/:owner/:repo/branches/:branch/protection" }, - getProtectedBranchRestrictions: { + getClones: { method: "GET", params: { - branch: { + owner: { required: true, type: "string" }, - owner: { - required: true, + per: { + enum: ["day", "week"], type: "string" }, repo: { @@ -11245,9 +11914,9 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions" + url: "/repos/:owner/:repo/traffic/clones" }, - getPunchCardStats: { + getCodeFrequencyStats: { method: "GET", params: { owner: { @@ -11259,65 +11928,57 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/stats/punch_card" + url: "/repos/:owner/:repo/stats/code_frequency" }, - getReadme: { + getCollaboratorPermissionLevel: { method: "GET", params: { owner: { required: true, type: "string" }, - ref: { + repo: { + required: true, type: "string" }, - repo: { + username: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/readme" + url: "/repos/:owner/:repo/collaborators/:username/permission" }, - getRelease: { + getCombinedStatusForRef: { method: "GET", params: { owner: { required: true, type: "string" }, - release_id: { + ref: { required: true, - type: "integer" + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/releases/:release_id" + url: "/repos/:owner/:repo/commits/:ref/status" }, - getReleaseAsset: { + getCommit: { method: "GET", params: { - asset_id: { - required: true, - type: "integer" + commit_sha: { + alias: "ref", + deprecated: true, + type: "string" }, owner: { required: true, type: "string" }, - repo: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/releases/assets/:asset_id" - }, - getReleaseByTag: { - method: "GET", - params: { - owner: { + ref: { required: true, type: "string" }, @@ -11325,20 +11986,17 @@ var endpointsByScope = { required: true, type: "string" }, - tag: { - required: true, + sha: { + alias: "ref", + deprecated: true, type: "string" } }, - url: "/repos/:owner/:repo/releases/tags/:tag" + url: "/repos/:owner/:repo/commits/:ref" }, - getTeamsWithAccessToProtectedBranch: { + getCommitActivityStats: { method: "GET", params: { - branch: { - required: true, - type: "string" - }, owner: { required: true, type: "string" @@ -11348,11 +12006,15 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + url: "/repos/:owner/:repo/stats/commit_activity" }, - getTopPaths: { + getCommitComment: { method: "GET", params: { + comment_id: { + required: true, + type: "integer" + }, owner: { required: true, type: "string" @@ -11362,96 +12024,89 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/traffic/popular/paths" + url: "/repos/:owner/:repo/comments/:comment_id" }, - getTopReferrers: { + getCommitRefSha: { + deprecated: "octokit.repos.getCommitRefSha() is deprecated, see https://developer.github.com/v3/repos/commits/#get-a-single-commit", + headers: { + accept: "application/vnd.github.v3.sha" + }, method: "GET", params: { owner: { required: true, type: "string" }, + ref: { + required: true, + type: "string" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/traffic/popular/referrers" + url: "/repos/:owner/:repo/commits/:ref" }, - getUsersWithAccessToProtectedBranch: { + getContents: { method: "GET", params: { - branch: { + owner: { required: true, type: "string" }, - owner: { + path: { required: true, type: "string" }, + ref: { + type: "string" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + url: "/repos/:owner/:repo/contents/:path" }, - getViews: { + getContributorsStats: { method: "GET", params: { owner: { required: true, type: "string" }, - per: { - enum: ["day", "week"], - type: "string" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/traffic/views" + url: "/repos/:owner/:repo/stats/contributors" }, - list: { + getDeployKey: { method: "GET", params: { - affiliation: { - type: "string" - }, - direction: { - enum: ["asc", "desc"], - type: "string" - }, - page: { - type: "integer" - }, - per_page: { + key_id: { + required: true, type: "integer" }, - sort: { - enum: ["created", "updated", "pushed", "full_name"], - type: "string" - }, - type: { - enum: ["all", "owner", "public", "private", "member"], + owner: { + required: true, type: "string" }, - visibility: { - enum: ["all", "public", "private"], + repo: { + required: true, type: "string" } }, - url: "/user/repos" + url: "/repos/:owner/:repo/keys/:key_id" }, - listAppsWithAccessToProtectedBranch: { - deprecated: "octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)", + getDeployment: { method: "GET", params: { - branch: { + deployment_id: { required: true, - type: "string" + type: "integer" }, owner: { required: true, @@ -11462,64 +12117,54 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + url: "/repos/:owner/:repo/deployments/:deployment_id" }, - listAssetsForRelease: { + getDeploymentStatus: { method: "GET", params: { - owner: { + deployment_id: { required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { type: "integer" }, - release_id: { + owner: { required: true, - type: "integer" + type: "string" }, repo: { required: true, type: "string" + }, + status_id: { + required: true, + type: "integer" } }, - url: "/repos/:owner/:repo/releases/:release_id/assets" + url: "/repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id" }, - listBranches: { + getDownload: { method: "GET", params: { - owner: { + download_id: { required: true, - type: "string" - }, - page: { - type: "integer" - }, - per_page: { type: "integer" }, - protected: { - type: "boolean" + owner: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches" + url: "/repos/:owner/:repo/downloads/:download_id" }, - listBranchesForHeadCommit: { - headers: { - accept: "application/vnd.github.groot-preview+json" - }, + getHook: { method: "GET", params: { - commit_sha: { + hook_id: { required: true, - type: "string" + type: "integer" }, owner: { required: true, @@ -11530,326 +12175,215 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/commits/:commit_sha/branches-where-head" + url: "/repos/:owner/:repo/hooks/:hook_id" }, - listCollaborators: { + getLatestPagesBuild: { method: "GET", params: { - affiliation: { - enum: ["outside", "direct", "all"], - type: "string" - }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/collaborators" + url: "/repos/:owner/:repo/pages/builds/latest" }, - listCommentsForCommit: { + getLatestRelease: { method: "GET", params: { - commit_sha: { - required: true, - type: "string" - }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - ref: { - alias: "commit_sha", - deprecated: true, - type: "string" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/commits/:commit_sha/comments" + url: "/repos/:owner/:repo/releases/latest" }, - listCommitComments: { + getPages: { method: "GET", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/comments" + url: "/repos/:owner/:repo/pages" }, - listCommits: { + getPagesBuild: { method: "GET", params: { - author: { - type: "string" - }, - owner: { + build_id: { required: true, - type: "string" - }, - page: { type: "integer" }, - path: { + owner: { + required: true, type: "string" }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" - }, - sha: { - type: "string" - }, - since: { - type: "string" - }, - until: { - type: "string" } }, - url: "/repos/:owner/:repo/commits" + url: "/repos/:owner/:repo/pages/builds/:build_id" }, - listContributors: { + getParticipationStats: { method: "GET", params: { - anon: { - type: "string" - }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/contributors" + url: "/repos/:owner/:repo/stats/participation" }, - listDeployKeys: { + getProtectedBranchAdminEnforcement: { method: "GET", params: { - owner: { + branch: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/keys" + url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" }, - listDeploymentStatuses: { + getProtectedBranchPullRequestReviewEnforcement: { method: "GET", params: { - deployment_id: { + branch: { required: true, - type: "integer" + type: "string" }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/deployments/:deployment_id/statuses" + url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" }, - listDeployments: { + getProtectedBranchRequiredSignatures: { + headers: { + accept: "application/vnd.github.zzzax-preview+json" + }, method: "GET", params: { - environment: { + branch: { + required: true, type: "string" }, owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - ref: { - type: "string" - }, repo: { required: true, type: "string" - }, - sha: { - type: "string" - }, - task: { - type: "string" } }, - url: "/repos/:owner/:repo/deployments" + url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" }, - listDownloads: { + getProtectedBranchRequiredStatusChecks: { method: "GET", params: { - owner: { + branch: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/downloads" + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" }, - listForOrg: { + getProtectedBranchRestrictions: { method: "GET", params: { - direction: { - enum: ["asc", "desc"], - type: "string" - }, - org: { + branch: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - sort: { - enum: ["created", "updated", "pushed", "full_name"], + owner: { + required: true, type: "string" }, - type: { - enum: ["all", "public", "private", "forks", "sources", "member", "internal"], + repo: { + required: true, type: "string" } }, - url: "/orgs/:org/repos" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions" }, - listForUser: { + getPunchCardStats: { method: "GET", params: { - direction: { - enum: ["asc", "desc"], - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - sort: { - enum: ["created", "updated", "pushed", "full_name"], - type: "string" - }, - type: { - enum: ["all", "owner", "member"], + owner: { + required: true, type: "string" }, - username: { + repo: { required: true, type: "string" } }, - url: "/users/:username/repos" + url: "/repos/:owner/:repo/stats/punch_card" }, - listForks: { + getReadme: { method: "GET", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + ref: { + type: "string" }, repo: { required: true, type: "string" - }, - sort: { - enum: ["newest", "oldest", "stargazers"], - type: "string" } }, - url: "/repos/:owner/:repo/forks" + url: "/repos/:owner/:repo/readme" }, - listHooks: { + getRelease: { method: "GET", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { + release_id: { + required: true, type: "integer" }, repo: { @@ -11857,43 +12391,51 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/hooks" + url: "/repos/:owner/:repo/releases/:release_id" }, - listInvitations: { + getReleaseAsset: { method: "GET", params: { - owner: { + asset_id: { required: true, - type: "string" - }, - page: { type: "integer" }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/invitations" + url: "/repos/:owner/:repo/releases/assets/:asset_id" }, - listInvitationsForAuthenticatedUser: { + getReleaseByTag: { method: "GET", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" + }, + tag: { + required: true, + type: "string" } }, - url: "/user/repository_invitations" + url: "/repos/:owner/:repo/releases/tags/:tag" }, - listLanguages: { + getTeamsWithAccessToProtectedBranch: { method: "GET", params: { + branch: { + required: true, + type: "string" + }, owner: { required: true, type: "string" @@ -11903,35 +12445,25 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/languages" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" }, - listPagesBuilds: { + getTopPaths: { method: "GET", params: { owner: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pages/builds" + url: "/repos/:owner/:repo/traffic/popular/paths" }, - listProtectedBranchRequiredStatusChecksContexts: { + getTopReferrers: { method: "GET", params: { - branch: { - required: true, - type: "string" - }, owner: { required: true, type: "string" @@ -11941,10 +12473,9 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + url: "/repos/:owner/:repo/traffic/popular/referrers" }, - listProtectedBranchTeamRestrictions: { - deprecated: "octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)", + getUsersWithAccessToProtectedBranch: { method: "GET", params: { branch: { @@ -11960,18 +12491,17 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" }, - listProtectedBranchUserRestrictions: { - deprecated: "octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)", + getViews: { method: "GET", params: { - branch: { + owner: { required: true, type: "string" }, - owner: { - required: true, + per: { + enum: ["day", "week"], type: "string" }, repo: { @@ -11979,30 +12509,44 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + url: "/repos/:owner/:repo/traffic/views" }, - listPublic: { + list: { method: "GET", params: { + affiliation: { + type: "string" + }, + direction: { + enum: ["asc", "desc"], + type: "string" + }, page: { type: "integer" }, per_page: { type: "integer" }, - since: { - type: "integer" + sort: { + enum: ["created", "updated", "pushed", "full_name"], + type: "string" + }, + type: { + enum: ["all", "owner", "public", "private", "member"], + type: "string" + }, + visibility: { + enum: ["all", "public", "private"], + type: "string" } }, - url: "/repositories" + url: "/user/repos" }, - listPullRequestsAssociatedWithCommit: { - headers: { - accept: "application/vnd.github.groot-preview+json" - }, + listAppsWithAccessToProtectedBranch: { + deprecated: "octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)", method: "GET", params: { - commit_sha: { + branch: { required: true, type: "string" }, @@ -12010,20 +12554,14 @@ var endpointsByScope = { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/commits/:commit_sha/pulls" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" }, - listReleases: { + listAssetsForRelease: { method: "GET", params: { owner: { @@ -12036,14 +12574,18 @@ var endpointsByScope = { per_page: { type: "integer" }, + release_id: { + required: true, + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/releases" + url: "/repos/:owner/:repo/releases/:release_id/assets" }, - listStatusesForRef: { + listBranches: { method: "GET", params: { owner: { @@ -12056,40 +12598,44 @@ var endpointsByScope = { per_page: { type: "integer" }, - ref: { - required: true, - type: "string" + protected: { + type: "boolean" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/commits/:ref/statuses" + url: "/repos/:owner/:repo/branches" }, - listTags: { + listBranchesForHeadCommit: { + headers: { + accept: "application/vnd.github.groot-preview+json" + }, method: "GET", params: { - owner: { + commit_sha: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/tags" + url: "/repos/:owner/:repo/commits/:commit_sha/branches-where-head" }, - listTeams: { + listCollaborators: { method: "GET", params: { + affiliation: { + enum: ["outside", "direct", "all"], + type: "string" + }, owner: { required: true, type: "string" @@ -12105,13 +12651,12 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/teams" + url: "/repos/:owner/:repo/collaborators" }, - listTeamsWithAccessToProtectedBranch: { - deprecated: "octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)", + listCommentsForCommit: { method: "GET", params: { - branch: { + commit_sha: { required: true, type: "string" }, @@ -12119,274 +12664,333 @@ var endpointsByScope = { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + alias: "commit_sha", + deprecated: true, + type: "string" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + url: "/repos/:owner/:repo/commits/:commit_sha/comments" }, - listTopics: { - headers: { - accept: "application/vnd.github.mercy-preview+json" - }, + listCommitComments: { method: "GET", params: { owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/topics" + url: "/repos/:owner/:repo/comments" }, - listUsersWithAccessToProtectedBranch: { - deprecated: "octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)", + listCommits: { method: "GET", params: { - branch: { - required: true, + author: { type: "string" }, owner: { required: true, type: "string" }, - repo: { - required: true, - type: "string" - } - }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" - }, - merge: { - method: "POST", - params: { - base: { - required: true, - type: "string" + page: { + type: "integer" }, - commit_message: { + path: { type: "string" }, - head: { + per_page: { + type: "integer" + }, + repo: { required: true, type: "string" }, - owner: { - required: true, + sha: { type: "string" }, - repo: { - required: true, + since: { + type: "string" + }, + until: { type: "string" } }, - url: "/repos/:owner/:repo/merges" + url: "/repos/:owner/:repo/commits" }, - pingHook: { - method: "POST", + listContributors: { + method: "GET", params: { - hook_id: { - required: true, - type: "integer" + anon: { + type: "string" }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/hooks/:hook_id/pings" + url: "/repos/:owner/:repo/contributors" }, - removeBranchProtection: { - method: "DELETE", + listDeployKeys: { + method: "GET", params: { - branch: { - required: true, - type: "string" - }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection" + url: "/repos/:owner/:repo/keys" }, - removeCollaborator: { - method: "DELETE", + listDeploymentStatuses: { + method: "GET", params: { - owner: { + deployment_id: { required: true, - type: "string" + type: "integer" }, - repo: { + owner: { required: true, type: "string" }, - username: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/collaborators/:username" + url: "/repos/:owner/:repo/deployments/:deployment_id/statuses" }, - removeDeployKey: { - method: "DELETE", + listDeployments: { + method: "GET", params: { - key_id: { - required: true, - type: "integer" + environment: { + type: "string" }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + type: "string" + }, repo: { required: true, type: "string" + }, + sha: { + type: "string" + }, + task: { + type: "string" } }, - url: "/repos/:owner/:repo/keys/:key_id" + url: "/repos/:owner/:repo/deployments" }, - removeProtectedBranchAdminEnforcement: { - method: "DELETE", + listDownloads: { + method: "GET", params: { - branch: { - required: true, - type: "string" - }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" + url: "/repos/:owner/:repo/downloads" }, - removeProtectedBranchAppRestrictions: { - method: "DELETE", + listForOrg: { + method: "GET", params: { - apps: { - mapTo: "data", - required: true, - type: "string[]" + direction: { + enum: ["asc", "desc"], + type: "string" }, - branch: { + org: { required: true, type: "string" }, - owner: { - required: true, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + sort: { + enum: ["created", "updated", "pushed", "full_name"], type: "string" }, - repo: { - required: true, + type: { + enum: ["all", "public", "private", "forks", "sources", "member", "internal"], type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + url: "/orgs/:org/repos" }, - removeProtectedBranchPullRequestReviewEnforcement: { - method: "DELETE", + listForUser: { + method: "GET", params: { - branch: { - required: true, + direction: { + enum: ["asc", "desc"], type: "string" }, - owner: { - required: true, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + sort: { + enum: ["created", "updated", "pushed", "full_name"], type: "string" }, - repo: { + type: { + enum: ["all", "owner", "member"], + type: "string" + }, + username: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" + url: "/users/:username/repos" }, - removeProtectedBranchRequiredSignatures: { - headers: { - accept: "application/vnd.github.zzzax-preview+json" - }, - method: "DELETE", + listForks: { + method: "GET", params: { - branch: { - required: true, - type: "string" - }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" + }, + sort: { + enum: ["newest", "oldest", "stargazers"], + type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" + url: "/repos/:owner/:repo/forks" }, - removeProtectedBranchRequiredStatusChecks: { - method: "DELETE", + listHooks: { + method: "GET", params: { - branch: { - required: true, - type: "string" - }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" + url: "/repos/:owner/:repo/hooks" }, - removeProtectedBranchRequiredStatusChecksContexts: { - method: "DELETE", + listInvitations: { + method: "GET", params: { - branch: { + owner: { required: true, type: "string" }, - contexts: { - mapTo: "data", - required: true, - type: "string[]" + page: { + type: "integer" }, - owner: { - required: true, - type: "string" + per_page: { + type: "integer" }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + url: "/repos/:owner/:repo/invitations" }, - removeProtectedBranchRestrictions: { - method: "DELETE", + listInvitationsForAuthenticatedUser: { + method: "GET", params: { - branch: { - required: true, - type: "string" + page: { + type: "integer" }, + per_page: { + type: "integer" + } + }, + url: "/user/repository_invitations" + }, + listLanguages: { + method: "GET", + params: { owner: { required: true, type: "string" @@ -12396,33 +13000,30 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions" + url: "/repos/:owner/:repo/languages" }, - removeProtectedBranchTeamRestrictions: { - method: "DELETE", + listPagesBuilds: { + method: "GET", params: { - branch: { - required: true, - type: "string" - }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" - }, - teams: { - mapTo: "data", - required: true, - type: "string[]" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + url: "/repos/:owner/:repo/pages/builds" }, - removeProtectedBranchUserRestrictions: { - method: "DELETE", + listProtectedBranchRequiredStatusChecksContexts: { + method: "GET", params: { branch: { required: true, @@ -12435,23 +13036,14 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - users: { - mapTo: "data", - required: true, - type: "string[]" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" }, - replaceProtectedBranchAppRestrictions: { - method: "PUT", + listProtectedBranchTeamRestrictions: { + deprecated: "octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)", + method: "GET", params: { - apps: { - mapTo: "data", - required: true, - type: "string[]" - }, branch: { required: true, type: "string" @@ -12465,20 +13057,16 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" }, - replaceProtectedBranchRequiredStatusChecksContexts: { - method: "PUT", + listProtectedBranchUserRestrictions: { + deprecated: "octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)", + method: "GET", params: { branch: { required: true, type: "string" }, - contexts: { - mapTo: "data", - required: true, - type: "string[]" - }, owner: { required: true, type: "string" @@ -12488,35 +13076,30 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" }, - replaceProtectedBranchTeamRestrictions: { - method: "PUT", + listPublic: { + method: "GET", params: { - branch: { - required: true, - type: "string" - }, - owner: { - required: true, - type: "string" + page: { + type: "integer" }, - repo: { - required: true, - type: "string" + per_page: { + type: "integer" }, - teams: { - mapTo: "data", - required: true, - type: "string[]" + since: { + type: "integer" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + url: "/repositories" }, - replaceProtectedBranchUserRestrictions: { - method: "PUT", + listPullRequestsAssociatedWithCommit: { + headers: { + accept: "application/vnd.github.groot-preview+json" + }, + method: "GET", params: { - branch: { + commit_sha: { required: true, type: "string" }, @@ -12524,89 +13107,109 @@ var endpointsByScope = { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" - }, - users: { - mapTo: "data", - required: true, - type: "string[]" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + url: "/repos/:owner/:repo/commits/:commit_sha/pulls" }, - replaceTopics: { - headers: { - accept: "application/vnd.github.mercy-preview+json" - }, - method: "PUT", + listReleases: { + method: "GET", params: { - names: { - required: true, - type: "string[]" - }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/topics" + url: "/repos/:owner/:repo/releases" }, - requestPageBuild: { - method: "POST", + listStatusesForRef: { + method: "GET", params: { owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + required: true, + type: "string" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/pages/builds" + url: "/repos/:owner/:repo/commits/:ref/statuses" }, - retrieveCommunityProfileMetrics: { + listTags: { method: "GET", params: { owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/community/profile" + url: "/repos/:owner/:repo/tags" }, - testPushHook: { - method: "POST", + listTeams: { + method: "GET", params: { - hook_id: { - required: true, - type: "integer" - }, owner: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/hooks/:hook_id/tests" + url: "/repos/:owner/:repo/teams" }, - transfer: { - method: "POST", + listTeamsWithAccessToProtectedBranch: { + deprecated: "octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)", + method: "GET", params: { - new_owner: { + branch: { + required: true, type: "string" }, owner: { @@ -12616,92 +13219,35 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - team_ids: { - type: "integer[]" } }, - url: "/repos/:owner/:repo/transfer" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" }, - update: { - method: "PATCH", + listTopics: { + headers: { + accept: "application/vnd.github.mercy-preview+json" + }, + method: "GET", params: { - allow_merge_commit: { - type: "boolean" - }, - allow_rebase_merge: { - type: "boolean" - }, - allow_squash_merge: { - type: "boolean" - }, - archived: { - type: "boolean" - }, - default_branch: { - type: "string" - }, - delete_branch_on_merge: { - type: "boolean" - }, - description: { - type: "string" - }, - has_issues: { - type: "boolean" - }, - has_projects: { - type: "boolean" - }, - has_wiki: { - type: "boolean" - }, - homepage: { - type: "string" - }, - is_template: { - type: "boolean" - }, - name: { - type: "string" - }, owner: { required: true, type: "string" }, - private: { - type: "boolean" - }, repo: { required: true, type: "string" - }, - visibility: { - enum: ["public", "private", "visibility", "internal"], - type: "string" } }, - url: "/repos/:owner/:repo" + url: "/repos/:owner/:repo/topics" }, - updateBranchProtection: { - method: "PUT", + listUsersWithAccessToProtectedBranch: { + deprecated: "octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)", + method: "GET", params: { - allow_deletions: { - type: "boolean" - }, - allow_force_pushes: { - allowNull: true, - type: "boolean" - }, branch: { required: true, type: "string" }, - enforce_admins: { - allowNull: true, - required: true, - type: "boolean" - }, owner: { required: true, type: "string" @@ -12709,75 +13255,23 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - required_linear_history: { - type: "boolean" - }, - required_pull_request_reviews: { - allowNull: true, - required: true, - type: "object" - }, - "required_pull_request_reviews.dismiss_stale_reviews": { - type: "boolean" - }, - "required_pull_request_reviews.dismissal_restrictions": { - type: "object" - }, - "required_pull_request_reviews.dismissal_restrictions.teams": { - type: "string[]" - }, - "required_pull_request_reviews.dismissal_restrictions.users": { - type: "string[]" - }, - "required_pull_request_reviews.require_code_owner_reviews": { - type: "boolean" - }, - "required_pull_request_reviews.required_approving_review_count": { - type: "integer" - }, - required_status_checks: { - allowNull: true, - required: true, - type: "object" - }, - "required_status_checks.contexts": { - required: true, - type: "string[]" - }, - "required_status_checks.strict": { - required: true, - type: "boolean" - }, - restrictions: { - allowNull: true, - required: true, - type: "object" - }, - "restrictions.apps": { - type: "string[]" - }, - "restrictions.teams": { - required: true, - type: "string[]" - }, - "restrictions.users": { - required: true, - type: "string[]" } }, - url: "/repos/:owner/:repo/branches/:branch/protection" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" }, - updateCommitComment: { - method: "PATCH", + merge: { + method: "POST", params: { - body: { + base: { required: true, type: "string" }, - comment_id: { + commit_message: { + type: "string" + }, + head: { required: true, - type: "integer" + type: "string" }, owner: { required: true, @@ -12788,42 +13282,30 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/comments/:comment_id" + url: "/repos/:owner/:repo/merges" }, - updateFile: { - deprecated: "octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)", - method: "PUT", - params: { - author: { - type: "object" - }, - "author.email": { - required: true, - type: "string" - }, - "author.name": { - required: true, - type: "string" - }, - branch: { - type: "string" - }, - committer: { - type: "object" - }, - "committer.email": { + pingHook: { + method: "POST", + params: { + hook_id: { required: true, - type: "string" + type: "integer" }, - "committer.name": { + owner: { required: true, type: "string" }, - content: { + repo: { required: true, type: "string" - }, - message: { + } + }, + url: "/repos/:owner/:repo/hooks/:hook_id/pings" + }, + removeBranchProtection: { + method: "DELETE", + params: { + branch: { required: true, type: "string" }, @@ -12831,49 +13313,35 @@ var endpointsByScope = { required: true, type: "string" }, - path: { - required: true, - type: "string" - }, repo: { required: true, type: "string" - }, - sha: { - type: "string" } }, - url: "/repos/:owner/:repo/contents/:path" + url: "/repos/:owner/:repo/branches/:branch/protection" }, - updateHook: { - method: "PATCH", + removeCollaborator: { + method: "DELETE", params: { - active: { - type: "boolean" - }, - add_events: { - type: "string[]" - }, - config: { - type: "object" - }, - "config.content_type": { - type: "string" - }, - "config.insecure_ssl": { + owner: { + required: true, type: "string" }, - "config.secret": { + repo: { + required: true, type: "string" }, - "config.url": { + username: { required: true, type: "string" - }, - events: { - type: "string[]" - }, - hook_id: { + } + }, + url: "/repos/:owner/:repo/collaborators/:username" + }, + removeDeployKey: { + method: "DELETE", + params: { + key_id: { required: true, type: "integer" }, @@ -12881,20 +13349,18 @@ var endpointsByScope = { required: true, type: "string" }, - remove_events: { - type: "string[]" - }, repo: { required: true, type: "string" } }, - url: "/repos/:owner/:repo/hooks/:hook_id" + url: "/repos/:owner/:repo/keys/:key_id" }, - updateInformationAboutPagesSite: { - method: "PUT", + removeProtectedBranchAdminEnforcement: { + method: "DELETE", params: { - cname: { + branch: { + required: true, type: "string" }, owner: { @@ -12904,27 +13370,24 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - source: { - enum: ['"gh-pages"', '"master"', '"master /docs"'], - type: "string" } }, - url: "/repos/:owner/:repo/pages" + url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" }, - updateInvitation: { - method: "PATCH", + removeProtectedBranchAppRestrictions: { + method: "DELETE", params: { - invitation_id: { + apps: { + mapTo: "data", required: true, - type: "integer" + type: "string[]" }, - owner: { + branch: { required: true, type: "string" }, - permissions: { - enum: ["read", "write", "admin"], + owner: { + required: true, type: "string" }, repo: { @@ -12932,27 +13395,15 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/invitations/:invitation_id" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" }, - updateProtectedBranchPullRequestReviewEnforcement: { - method: "PATCH", + removeProtectedBranchPullRequestReviewEnforcement: { + method: "DELETE", params: { branch: { required: true, type: "string" }, - dismiss_stale_reviews: { - type: "boolean" - }, - dismissal_restrictions: { - type: "object" - }, - "dismissal_restrictions.teams": { - type: "string[]" - }, - "dismissal_restrictions.users": { - type: "string[]" - }, owner: { required: true, type: "string" @@ -12960,26 +13411,20 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - require_code_owner_reviews: { - type: "boolean" - }, - required_approving_review_count: { - type: "integer" } }, url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" }, - updateProtectedBranchRequiredStatusChecks: { - method: "PATCH", + removeProtectedBranchRequiredSignatures: { + headers: { + accept: "application/vnd.github.zzzax-preview+json" + }, + method: "DELETE", params: { branch: { required: true, type: "string" }, - contexts: { - type: "string[]" - }, owner: { required: true, type: "string" @@ -12987,61 +13432,39 @@ var endpointsByScope = { repo: { required: true, type: "string" - }, - strict: { - type: "boolean" } }, - url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" + url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" }, - updateRelease: { - method: "PATCH", + removeProtectedBranchRequiredStatusChecks: { + method: "DELETE", params: { - body: { - type: "string" - }, - draft: { - type: "boolean" - }, - name: { + branch: { + required: true, type: "string" }, owner: { required: true, type: "string" }, - prerelease: { - type: "boolean" - }, - release_id: { - required: true, - type: "integer" - }, repo: { required: true, type: "string" - }, - tag_name: { - type: "string" - }, - target_commitish: { - type: "string" } }, - url: "/repos/:owner/:repo/releases/:release_id" + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" }, - updateReleaseAsset: { - method: "PATCH", + removeProtectedBranchRequiredStatusChecksContexts: { + method: "DELETE", params: { - asset_id: { + branch: { required: true, - type: "integer" - }, - label: { type: "string" }, - name: { - type: "string" + contexts: { + mapTo: "data", + required: true, + type: "string[]" }, owner: { required: true, @@ -13052,467 +13475,460 @@ var endpointsByScope = { type: "string" } }, - url: "/repos/:owner/:repo/releases/assets/:asset_id" + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" }, - uploadReleaseAsset: { - method: "POST", + removeProtectedBranchRestrictions: { + method: "DELETE", params: { - data: { - mapTo: "data", - required: true, - type: "string | object" - }, - file: { - alias: "data", - deprecated: true, - type: "string | object" - }, - headers: { - required: true, - type: "object" - }, - "headers.content-length": { - required: true, - type: "integer" - }, - "headers.content-type": { + branch: { required: true, type: "string" }, - label: { - type: "string" - }, - name: { + owner: { required: true, type: "string" }, - url: { + repo: { required: true, type: "string" } }, - url: ":url" - } - }, - search: { - code: { - method: "GET", + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions" + }, + removeProtectedBranchTeamRestrictions: { + method: "DELETE", params: { - order: { - enum: ["desc", "asc"], + branch: { + required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - q: { + owner: { required: true, type: "string" }, - sort: { - enum: ["indexed"], + repo: { + required: true, type: "string" + }, + teams: { + mapTo: "data", + required: true, + type: "string[]" } }, - url: "/search/code" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" }, - commits: { - headers: { - accept: "application/vnd.github.cloak-preview+json" - }, - method: "GET", + removeProtectedBranchUserRestrictions: { + method: "DELETE", params: { - order: { - enum: ["desc", "asc"], + branch: { + required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - q: { + owner: { required: true, type: "string" }, - sort: { - enum: ["author-date", "committer-date"], + repo: { + required: true, type: "string" + }, + users: { + mapTo: "data", + required: true, + type: "string[]" } }, - url: "/search/commits" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" }, - issues: { - deprecated: "octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)", - method: "GET", + replaceProtectedBranchAppRestrictions: { + method: "PUT", params: { - order: { - enum: ["desc", "asc"], - type: "string" - }, - page: { - type: "integer" + apps: { + mapTo: "data", + required: true, + type: "string[]" }, - per_page: { - type: "integer" + branch: { + required: true, + type: "string" }, - q: { + owner: { required: true, type: "string" }, - sort: { - enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], + repo: { + required: true, type: "string" } }, - url: "/search/issues" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" }, - issuesAndPullRequests: { - method: "GET", + replaceProtectedBranchRequiredStatusChecksContexts: { + method: "PUT", params: { - order: { - enum: ["desc", "asc"], + branch: { + required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + contexts: { + mapTo: "data", + required: true, + type: "string[]" }, - q: { + owner: { required: true, type: "string" }, - sort: { - enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], + repo: { + required: true, type: "string" } }, - url: "/search/issues" + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" }, - labels: { - method: "GET", + replaceProtectedBranchTeamRestrictions: { + method: "PUT", params: { - order: { - enum: ["desc", "asc"], + branch: { + required: true, type: "string" }, - q: { + owner: { required: true, type: "string" }, - repository_id: { + repo: { required: true, - type: "integer" - }, - sort: { - enum: ["created", "updated"], type: "string" + }, + teams: { + mapTo: "data", + required: true, + type: "string[]" } }, - url: "/search/labels" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" }, - repos: { - method: "GET", + replaceProtectedBranchUserRestrictions: { + method: "PUT", params: { - order: { - enum: ["desc", "asc"], + branch: { + required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - q: { + owner: { required: true, type: "string" }, - sort: { - enum: ["stars", "forks", "help-wanted-issues", "updated"], + repo: { + required: true, type: "string" + }, + users: { + mapTo: "data", + required: true, + type: "string[]" } }, - url: "/search/repositories" + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" }, - topics: { - method: "GET", + replaceTopics: { + headers: { + accept: "application/vnd.github.mercy-preview+json" + }, + method: "PUT", params: { - q: { + names: { + required: true, + type: "string[]" + }, + owner: { + required: true, + type: "string" + }, + repo: { required: true, type: "string" } }, - url: "/search/topics" + url: "/repos/:owner/:repo/topics" }, - users: { - method: "GET", + requestPageBuild: { + method: "POST", params: { - order: { - enum: ["desc", "asc"], - type: "string" - }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, - q: { + owner: { required: true, type: "string" }, - sort: { - enum: ["followers", "repositories", "joined"], + repo: { + required: true, type: "string" } }, - url: "/search/users" - } - }, - teams: { - addMember: { - deprecated: "octokit.teams.addMember() has been renamed to octokit.teams.addMemberLegacy() (2020-01-16)", - method: "PUT", + url: "/repos/:owner/:repo/pages/builds" + }, + retrieveCommunityProfileMetrics: { + method: "GET", params: { - team_id: { + owner: { required: true, - type: "integer" + type: "string" }, - username: { + repo: { required: true, type: "string" } }, - url: "/teams/:team_id/members/:username" + url: "/repos/:owner/:repo/community/profile" }, - addMemberLegacy: { - deprecated: "octokit.teams.addMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member-legacy", - method: "PUT", + testPushHook: { + method: "POST", params: { - team_id: { + hook_id: { required: true, type: "integer" }, - username: { + owner: { + required: true, + type: "string" + }, + repo: { required: true, type: "string" } }, - url: "/teams/:team_id/members/:username" + url: "/repos/:owner/:repo/hooks/:hook_id/tests" }, - addOrUpdateMembership: { - deprecated: "octokit.teams.addOrUpdateMembership() has been renamed to octokit.teams.addOrUpdateMembershipLegacy() (2020-01-16)", - method: "PUT", + transfer: { + method: "POST", params: { - role: { - enum: ["member", "maintainer"], + new_owner: { type: "string" }, - team_id: { + owner: { required: true, - type: "integer" + type: "string" }, - username: { + repo: { required: true, type: "string" + }, + team_ids: { + type: "integer[]" } }, - url: "/teams/:team_id/memberships/:username" + url: "/repos/:owner/:repo/transfer" }, - addOrUpdateMembershipInOrg: { - method: "PUT", + update: { + method: "PATCH", params: { - org: { - required: true, + allow_merge_commit: { + type: "boolean" + }, + allow_rebase_merge: { + type: "boolean" + }, + allow_squash_merge: { + type: "boolean" + }, + archived: { + type: "boolean" + }, + default_branch: { + type: "string" + }, + delete_branch_on_merge: { + type: "boolean" + }, + description: { + type: "string" + }, + has_issues: { + type: "boolean" + }, + has_projects: { + type: "boolean" + }, + has_wiki: { + type: "boolean" + }, + homepage: { type: "string" }, - role: { - enum: ["member", "maintainer"], + is_template: { + type: "boolean" + }, + name: { type: "string" }, - team_slug: { + owner: { required: true, type: "string" }, - username: { + private: { + type: "boolean" + }, + repo: { required: true, type: "string" + }, + visibility: { + enum: ["public", "private", "visibility", "internal"], + type: "string" } }, - url: "/orgs/:org/teams/:team_slug/memberships/:username" + url: "/repos/:owner/:repo" }, - addOrUpdateMembershipLegacy: { - deprecated: "octokit.teams.addOrUpdateMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-or-update-team-membership-legacy", + updateBranchProtection: { method: "PUT", params: { - role: { - enum: ["member", "maintainer"], + allow_deletions: { + type: "boolean" + }, + allow_force_pushes: { + allowNull: true, + type: "boolean" + }, + branch: { + required: true, type: "string" }, - team_id: { + enforce_admins: { + allowNull: true, required: true, - type: "integer" + type: "boolean" }, - username: { + owner: { required: true, type: "string" - } - }, - url: "/teams/:team_id/memberships/:username" - }, - addOrUpdateProject: { - deprecated: "octokit.teams.addOrUpdateProject() has been renamed to octokit.teams.addOrUpdateProjectLegacy() (2020-01-16)", - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "PUT", - params: { - permission: { - enum: ["read", "write", "admin"], + }, + repo: { + required: true, type: "string" }, - project_id: { + required_linear_history: { + type: "boolean" + }, + required_pull_request_reviews: { + allowNull: true, required: true, + type: "object" + }, + "required_pull_request_reviews.dismiss_stale_reviews": { + type: "boolean" + }, + "required_pull_request_reviews.dismissal_restrictions": { + type: "object" + }, + "required_pull_request_reviews.dismissal_restrictions.teams": { + type: "string[]" + }, + "required_pull_request_reviews.dismissal_restrictions.users": { + type: "string[]" + }, + "required_pull_request_reviews.require_code_owner_reviews": { + type: "boolean" + }, + "required_pull_request_reviews.required_approving_review_count": { type: "integer" }, - team_id: { + required_status_checks: { + allowNull: true, required: true, - type: "integer" - } - }, - url: "/teams/:team_id/projects/:project_id" - }, - addOrUpdateProjectInOrg: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "PUT", - params: { - org: { + type: "object" + }, + "required_status_checks.contexts": { required: true, - type: "string" + type: "string[]" }, - permission: { - enum: ["read", "write", "admin"], - type: "string" + "required_status_checks.strict": { + required: true, + type: "boolean" }, - project_id: { + restrictions: { + allowNull: true, required: true, - type: "integer" + type: "object" }, - team_slug: { + "restrictions.apps": { + type: "string[]" + }, + "restrictions.teams": { required: true, - type: "string" + type: "string[]" + }, + "restrictions.users": { + required: true, + type: "string[]" } }, - url: "/orgs/:org/teams/:team_slug/projects/:project_id" + url: "/repos/:owner/:repo/branches/:branch/protection" }, - addOrUpdateProjectLegacy: { - deprecated: "octokit.teams.addOrUpdateProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-project-legacy", - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, - method: "PUT", + updateCommitComment: { + method: "PATCH", params: { - permission: { - enum: ["read", "write", "admin"], + body: { + required: true, type: "string" }, - project_id: { + comment_id: { required: true, type: "integer" }, - team_id: { - required: true, - type: "integer" - } - }, - url: "/teams/:team_id/projects/:project_id" - }, - addOrUpdateRepo: { - deprecated: "octokit.teams.addOrUpdateRepo() has been renamed to octokit.teams.addOrUpdateRepoLegacy() (2020-01-16)", - method: "PUT", - params: { owner: { required: true, type: "string" }, - permission: { - enum: ["pull", "push", "admin"], - type: "string" - }, repo: { required: true, type: "string" - }, - team_id: { - required: true, - type: "integer" } }, - url: "/teams/:team_id/repos/:owner/:repo" + url: "/repos/:owner/:repo/comments/:comment_id" }, - addOrUpdateRepoInOrg: { + updateFile: { + deprecated: "octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)", method: "PUT", params: { - org: { + author: { + type: "object" + }, + "author.email": { required: true, type: "string" }, - owner: { + "author.name": { required: true, type: "string" }, - permission: { - enum: ["pull", "push", "admin"], + branch: { type: "string" }, - repo: { + committer: { + type: "object" + }, + "committer.email": { required: true, type: "string" }, - team_slug: { + "committer.name": { required: true, type: "string" - } - }, - url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" - }, - addOrUpdateRepoLegacy: { - deprecated: "octokit.teams.addOrUpdateRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-repository-legacy", - method: "PUT", - params: { - owner: { + }, + content: { required: true, type: "string" }, - permission: { - enum: ["pull", "push", "admin"], + message: { + required: true, type: "string" }, - repo: { + owner: { required: true, type: "string" }, - team_id: { - required: true, - type: "integer" - } - }, - url: "/teams/:team_id/repos/:owner/:repo" - }, - checkManagesRepo: { - deprecated: "octokit.teams.checkManagesRepo() has been renamed to octokit.teams.checkManagesRepoLegacy() (2020-01-16)", - method: "GET", - params: { - owner: { + path: { required: true, type: "string" }, @@ -13520,484 +13936,546 @@ var endpointsByScope = { required: true, type: "string" }, - team_id: { - required: true, - type: "integer" + sha: { + type: "string" } }, - url: "/teams/:team_id/repos/:owner/:repo" + url: "/repos/:owner/:repo/contents/:path" }, - checkManagesRepoInOrg: { - method: "GET", + updateHook: { + method: "PATCH", params: { - org: { - required: true, + active: { + type: "boolean" + }, + add_events: { + type: "string[]" + }, + config: { + type: "object" + }, + "config.content_type": { type: "string" }, - owner: { - required: true, + "config.insecure_ssl": { type: "string" }, - repo: { - required: true, + "config.secret": { type: "string" }, - team_slug: { + "config.url": { required: true, type: "string" - } - }, - url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" - }, - checkManagesRepoLegacy: { - deprecated: "octokit.teams.checkManagesRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository-legacy", - method: "GET", - params: { + }, + events: { + type: "string[]" + }, + hook_id: { + required: true, + type: "integer" + }, owner: { required: true, type: "string" }, + remove_events: { + type: "string[]" + }, repo: { required: true, type: "string" - }, - team_id: { - required: true, - type: "integer" } }, - url: "/teams/:team_id/repos/:owner/:repo" + url: "/repos/:owner/:repo/hooks/:hook_id" }, - create: { - method: "POST", + updateInformationAboutPagesSite: { + method: "PUT", params: { - description: { + cname: { type: "string" }, - maintainers: { - type: "string[]" - }, - name: { + owner: { required: true, type: "string" }, - org: { + repo: { required: true, type: "string" }, - parent_team_id: { + source: { + enum: ['"gh-pages"', '"master"', '"master /docs"'], + type: "string" + } + }, + url: "/repos/:owner/:repo/pages" + }, + updateInvitation: { + method: "PATCH", + params: { + invitation_id: { + required: true, type: "integer" }, - permission: { - enum: ["pull", "push", "admin"], + owner: { + required: true, type: "string" }, - privacy: { - enum: ["secret", "closed"], + permissions: { + enum: ["read", "write", "admin"], type: "string" }, - repo_names: { - type: "string[]" + repo: { + required: true, + type: "string" } }, - url: "/orgs/:org/teams" + url: "/repos/:owner/:repo/invitations/:invitation_id" }, - createDiscussion: { - deprecated: "octokit.teams.createDiscussion() has been renamed to octokit.teams.createDiscussionLegacy() (2020-01-16)", - method: "POST", + updateProtectedBranchPullRequestReviewEnforcement: { + method: "PATCH", params: { - body: { + branch: { required: true, type: "string" }, - private: { + dismiss_stale_reviews: { type: "boolean" }, - team_id: { - required: true, - type: "integer" + dismissal_restrictions: { + type: "object" }, - title: { + "dismissal_restrictions.teams": { + type: "string[]" + }, + "dismissal_restrictions.users": { + type: "string[]" + }, + owner: { required: true, type: "string" - } - }, - url: "/teams/:team_id/discussions" - }, - createDiscussionComment: { - deprecated: "octokit.teams.createDiscussionComment() has been renamed to octokit.teams.createDiscussionCommentLegacy() (2020-01-16)", - method: "POST", - params: { - body: { + }, + repo: { required: true, type: "string" }, - discussion_number: { - required: true, - type: "integer" + require_code_owner_reviews: { + type: "boolean" }, - team_id: { - required: true, + required_approving_review_count: { type: "integer" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments" + url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" }, - createDiscussionCommentInOrg: { - method: "POST", + updateProtectedBranchRequiredStatusChecks: { + method: "PATCH", params: { - body: { + branch: { required: true, type: "string" }, - discussion_number: { - required: true, - type: "integer" + contexts: { + type: "string[]" }, - org: { + owner: { required: true, type: "string" }, - team_slug: { + repo: { required: true, type: "string" + }, + strict: { + type: "boolean" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments" + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" }, - createDiscussionCommentLegacy: { - deprecated: "octokit.teams.createDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#create-a-comment-legacy", - method: "POST", + updateRelease: { + method: "PATCH", params: { body: { + type: "string" + }, + draft: { + type: "boolean" + }, + name: { + type: "string" + }, + owner: { required: true, type: "string" }, - discussion_number: { + prerelease: { + type: "boolean" + }, + release_id: { required: true, type: "integer" }, - team_id: { + repo: { required: true, - type: "integer" + type: "string" + }, + tag_name: { + type: "string" + }, + target_commitish: { + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments" + url: "/repos/:owner/:repo/releases/:release_id" }, - createDiscussionInOrg: { - method: "POST", + updateReleaseAsset: { + method: "PATCH", params: { - body: { + asset_id: { required: true, - type: "string" + type: "integer" }, - org: { - required: true, + label: { type: "string" }, - private: { - type: "boolean" + name: { + type: "string" }, - team_slug: { + owner: { required: true, type: "string" }, - title: { + repo: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions" + url: "/repos/:owner/:repo/releases/assets/:asset_id" }, - createDiscussionLegacy: { - deprecated: "octokit.teams.createDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#create-a-discussion-legacy", + uploadReleaseAsset: { method: "POST", params: { - body: { + data: { + mapTo: "data", required: true, - type: "string" + type: "string | object" }, - private: { - type: "boolean" + file: { + alias: "data", + deprecated: true, + type: "string | object" }, - team_id: { + headers: { + required: true, + type: "object" + }, + "headers.content-length": { required: true, type: "integer" }, - title: { + "headers.content-type": { required: true, type: "string" - } - }, - url: "/teams/:team_id/discussions" - }, - delete: { - deprecated: "octokit.teams.delete() has been renamed to octokit.teams.deleteLegacy() (2020-01-16)", - method: "DELETE", - params: { - team_id: { - required: true, - type: "integer" - } - }, - url: "/teams/:team_id" - }, - deleteDiscussion: { - deprecated: "octokit.teams.deleteDiscussion() has been renamed to octokit.teams.deleteDiscussionLegacy() (2020-01-16)", - method: "DELETE", - params: { - discussion_number: { + }, + label: { + type: "string" + }, + name: { required: true, - type: "integer" + type: "string" }, - team_id: { + url: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number" - }, - deleteDiscussionComment: { - deprecated: "octokit.teams.deleteDiscussionComment() has been renamed to octokit.teams.deleteDiscussionCommentLegacy() (2020-01-16)", - method: "DELETE", + url: ":url" + } + }, + search: { + code: { + method: "GET", params: { - comment_number: { - required: true, + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { type: "integer" }, - discussion_number: { - required: true, + per_page: { type: "integer" }, - team_id: { + q: { required: true, - type: "integer" + type: "string" + }, + sort: { + enum: ["indexed"], + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + url: "/search/code" }, - deleteDiscussionCommentInOrg: { - method: "DELETE", - params: { - comment_number: { - required: true, + commits: { + headers: { + accept: "application/vnd.github.cloak-preview+json" + }, + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { type: "integer" }, - discussion_number: { - required: true, + per_page: { type: "integer" }, - org: { + q: { required: true, type: "string" }, - team_slug: { - required: true, + sort: { + enum: ["author-date", "committer-date"], type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" + url: "/search/commits" }, - deleteDiscussionCommentLegacy: { - deprecated: "octokit.teams.deleteDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment-legacy", - method: "DELETE", + issues: { + deprecated: "octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)", + method: "GET", params: { - comment_number: { - required: true, + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { type: "integer" }, - discussion_number: { - required: true, + per_page: { type: "integer" }, - team_id: { + q: { required: true, - type: "integer" + type: "string" + }, + sort: { + enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + url: "/search/issues" }, - deleteDiscussionInOrg: { - method: "DELETE", + issuesAndPullRequests: { + method: "GET", params: { - discussion_number: { - required: true, + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { type: "integer" }, - org: { + per_page: { + type: "integer" + }, + q: { required: true, type: "string" }, - team_slug: { - required: true, + sort: { + enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + url: "/search/issues" }, - deleteDiscussionLegacy: { - deprecated: "octokit.teams.deleteDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#delete-a-discussion-legacy", - method: "DELETE", + labels: { + method: "GET", params: { - discussion_number: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + q: { required: true, - type: "integer" + type: "string" }, - team_id: { + repository_id: { required: true, type: "integer" + }, + sort: { + enum: ["created", "updated"], + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number" + url: "/search/labels" }, - deleteInOrg: { - method: "DELETE", + repos: { + method: "GET", params: { - org: { - required: true, + order: { + enum: ["desc", "asc"], type: "string" }, - team_slug: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { required: true, type: "string" + }, + sort: { + enum: ["stars", "forks", "help-wanted-issues", "updated"], + type: "string" } }, - url: "/orgs/:org/teams/:team_slug" - }, - deleteLegacy: { - deprecated: "octokit.teams.deleteLegacy() is deprecated, see https://developer.github.com/v3/teams/#delete-team-legacy", - method: "DELETE", - params: { - team_id: { - required: true, - type: "integer" - } - }, - url: "/teams/:team_id" + url: "/search/repositories" }, - get: { - deprecated: "octokit.teams.get() has been renamed to octokit.teams.getLegacy() (2020-01-16)", + topics: { method: "GET", params: { - team_id: { + q: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id" + url: "/search/topics" }, - getByName: { + users: { method: "GET", params: { - org: { - required: true, + order: { + enum: ["desc", "asc"], type: "string" }, - team_slug: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { required: true, type: "string" + }, + sort: { + enum: ["followers", "repositories", "joined"], + type: "string" } }, - url: "/orgs/:org/teams/:team_slug" - }, - getDiscussion: { - deprecated: "octokit.teams.getDiscussion() has been renamed to octokit.teams.getDiscussionLegacy() (2020-01-16)", - method: "GET", + url: "/search/users" + } + }, + teams: { + addMember: { + deprecated: "octokit.teams.addMember() has been renamed to octokit.teams.addMemberLegacy() (2020-01-16)", + method: "PUT", params: { - discussion_number: { + team_id: { required: true, type: "integer" }, - team_id: { + username: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number" + url: "/teams/:team_id/members/:username" }, - getDiscussionComment: { - deprecated: "octokit.teams.getDiscussionComment() has been renamed to octokit.teams.getDiscussionCommentLegacy() (2020-01-16)", - method: "GET", + addMemberLegacy: { + deprecated: "octokit.teams.addMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member-legacy", + method: "PUT", params: { - comment_number: { - required: true, - type: "integer" - }, - discussion_number: { + team_id: { required: true, type: "integer" }, - team_id: { + username: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + url: "/teams/:team_id/members/:username" }, - getDiscussionCommentInOrg: { - method: "GET", + addOrUpdateMembership: { + deprecated: "octokit.teams.addOrUpdateMembership() has been renamed to octokit.teams.addOrUpdateMembershipLegacy() (2020-01-16)", + method: "PUT", params: { - comment_number: { - required: true, - type: "integer" + role: { + enum: ["member", "maintainer"], + type: "string" }, - discussion_number: { + team_id: { required: true, type: "integer" }, - org: { - required: true, - type: "string" - }, - team_slug: { + username: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" + url: "/teams/:team_id/memberships/:username" }, - getDiscussionCommentLegacy: { - deprecated: "octokit.teams.getDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment-legacy", - method: "GET", + addOrUpdateMembershipInOrg: { + method: "PUT", params: { - comment_number: { + org: { required: true, - type: "integer" + type: "string" }, - discussion_number: { + role: { + enum: ["member", "maintainer"], + type: "string" + }, + team_slug: { required: true, - type: "integer" + type: "string" }, - team_id: { + username: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + url: "/orgs/:org/teams/:team_slug/memberships/:username" }, - getDiscussionInOrg: { - method: "GET", + addOrUpdateMembershipLegacy: { + deprecated: "octokit.teams.addOrUpdateMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-or-update-team-membership-legacy", + method: "PUT", params: { - discussion_number: { - required: true, - type: "integer" + role: { + enum: ["member", "maintainer"], + type: "string" }, - org: { + team_id: { required: true, - type: "string" + type: "integer" }, - team_slug: { + username: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + url: "/teams/:team_id/memberships/:username" }, - getDiscussionLegacy: { - deprecated: "octokit.teams.getDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#get-a-single-discussion-legacy", - method: "GET", + addOrUpdateProject: { + deprecated: "octokit.teams.addOrUpdateProject() has been renamed to octokit.teams.addOrUpdateProjectLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PUT", params: { - discussion_number: { + permission: { + enum: ["read", "write", "admin"], + type: "string" + }, + project_id: { required: true, type: "integer" }, @@ -14006,257 +14484,294 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/discussions/:discussion_number" + url: "/teams/:team_id/projects/:project_id" }, - getLegacy: { - deprecated: "octokit.teams.getLegacy() is deprecated, see https://developer.github.com/v3/teams/#get-team-legacy", - method: "GET", - params: { - team_id: { - required: true, - type: "integer" - } + addOrUpdateProjectInOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" }, - url: "/teams/:team_id" - }, - getMember: { - deprecated: "octokit.teams.getMember() has been renamed to octokit.teams.getMemberLegacy() (2020-01-16)", - method: "GET", + method: "PUT", params: { - team_id: { + org: { + required: true, + type: "string" + }, + permission: { + enum: ["read", "write", "admin"], + type: "string" + }, + project_id: { required: true, type: "integer" }, - username: { + team_slug: { required: true, type: "string" } }, - url: "/teams/:team_id/members/:username" + url: "/orgs/:org/teams/:team_slug/projects/:project_id" }, - getMemberLegacy: { - deprecated: "octokit.teams.getMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member-legacy", - method: "GET", + addOrUpdateProjectLegacy: { + deprecated: "octokit.teams.addOrUpdateProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-project-legacy", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PUT", params: { - team_id: { + permission: { + enum: ["read", "write", "admin"], + type: "string" + }, + project_id: { required: true, type: "integer" }, - username: { + team_id: { required: true, - type: "string" + type: "integer" } }, - url: "/teams/:team_id/members/:username" + url: "/teams/:team_id/projects/:project_id" }, - getMembership: { - deprecated: "octokit.teams.getMembership() has been renamed to octokit.teams.getMembershipLegacy() (2020-01-16)", - method: "GET", + addOrUpdateRepo: { + deprecated: "octokit.teams.addOrUpdateRepo() has been renamed to octokit.teams.addOrUpdateRepoLegacy() (2020-01-16)", + method: "PUT", params: { - team_id: { + owner: { required: true, - type: "integer" + type: "string" }, - username: { + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + repo: { required: true, type: "string" + }, + team_id: { + required: true, + type: "integer" } }, - url: "/teams/:team_id/memberships/:username" + url: "/teams/:team_id/repos/:owner/:repo" }, - getMembershipInOrg: { - method: "GET", + addOrUpdateRepoInOrg: { + method: "PUT", params: { org: { required: true, type: "string" }, - team_slug: { + owner: { required: true, type: "string" }, - username: { - required: true, + permission: { + enum: ["pull", "push", "admin"], type: "string" - } - }, - url: "/orgs/:org/teams/:team_slug/memberships/:username" - }, - getMembershipLegacy: { - deprecated: "octokit.teams.getMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-membership-legacy", - method: "GET", - params: { - team_id: { + }, + repo: { required: true, - type: "integer" + type: "string" }, - username: { + team_slug: { required: true, type: "string" } }, - url: "/teams/:team_id/memberships/:username" + url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" }, - list: { - method: "GET", + addOrUpdateRepoLegacy: { + deprecated: "octokit.teams.addOrUpdateRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-repository-legacy", + method: "PUT", params: { - org: { + owner: { required: true, type: "string" }, - page: { - type: "integer" + permission: { + enum: ["pull", "push", "admin"], + type: "string" }, - per_page: { + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, type: "integer" } }, - url: "/orgs/:org/teams" + url: "/teams/:team_id/repos/:owner/:repo" }, - listChild: { - deprecated: "octokit.teams.listChild() has been renamed to octokit.teams.listChildLegacy() (2020-01-16)", + checkManagesRepo: { + deprecated: "octokit.teams.checkManagesRepo() has been renamed to octokit.teams.checkManagesRepoLegacy() (2020-01-16)", method: "GET", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" }, team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id/teams" + url: "/teams/:team_id/repos/:owner/:repo" }, - listChildInOrg: { + checkManagesRepoInOrg: { method: "GET", params: { org: { required: true, type: "string" }, - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" }, team_slug: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/teams" + url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" }, - listChildLegacy: { - deprecated: "octokit.teams.listChildLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-child-teams-legacy", + checkManagesRepoLegacy: { + deprecated: "octokit.teams.checkManagesRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository-legacy", method: "GET", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { - type: "integer" + repo: { + required: true, + type: "string" }, team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id/teams" + url: "/teams/:team_id/repos/:owner/:repo" }, - listDiscussionComments: { - deprecated: "octokit.teams.listDiscussionComments() has been renamed to octokit.teams.listDiscussionCommentsLegacy() (2020-01-16)", - method: "GET", + create: { + method: "POST", params: { - direction: { - enum: ["asc", "desc"], + description: { type: "string" }, - discussion_number: { + maintainers: { + type: "string[]" + }, + name: { required: true, - type: "integer" + type: "string" }, - page: { - type: "integer" + org: { + required: true, + type: "string" }, - per_page: { + parent_team_id: { type: "integer" }, - team_id: { - required: true, - type: "integer" + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + repo_names: { + type: "string[]" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments" + url: "/orgs/:org/teams" }, - listDiscussionCommentsInOrg: { - method: "GET", + createDiscussion: { + deprecated: "octokit.teams.createDiscussion() has been renamed to octokit.teams.createDiscussionLegacy() (2020-01-16)", + method: "POST", params: { - direction: { - enum: ["asc", "desc"], + body: { + required: true, type: "string" }, - discussion_number: { + private: { + type: "boolean" + }, + team_id: { required: true, type: "integer" }, - org: { + title: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/discussions" + }, + createDiscussionComment: { + deprecated: "octokit.teams.createDiscussionComment() has been renamed to octokit.teams.createDiscussionCommentLegacy() (2020-01-16)", + method: "POST", + params: { + body: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { + discussion_number: { + required: true, type: "integer" }, - team_slug: { + team_id: { required: true, - type: "string" + type: "integer" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments" + url: "/teams/:team_id/discussions/:discussion_number/comments" }, - listDiscussionCommentsLegacy: { - deprecated: "octokit.teams.listDiscussionCommentsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#list-comments-legacy", - method: "GET", + createDiscussionCommentInOrg: { + method: "POST", params: { - direction: { - enum: ["asc", "desc"], + body: { + required: true, type: "string" }, discussion_number: { required: true, type: "integer" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + org: { + required: true, + type: "string" }, - team_id: { + team_slug: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments" }, - listDiscussions: { - deprecated: "octokit.teams.listDiscussions() has been renamed to octokit.teams.listDiscussionsLegacy() (2020-01-16)", - method: "GET", + createDiscussionCommentLegacy: { + deprecated: "octokit.teams.createDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#create-a-comment-legacy", + method: "POST", params: { - direction: { - enum: ["asc", "desc"], + body: { + required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { + discussion_number: { + required: true, type: "integer" }, team_id: { @@ -14264,101 +14779,113 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/discussions" + url: "/teams/:team_id/discussions/:discussion_number/comments" }, - listDiscussionsInOrg: { - method: "GET", + createDiscussionInOrg: { + method: "POST", params: { - direction: { - enum: ["asc", "desc"], + body: { + required: true, type: "string" }, org: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" + private: { + type: "boolean" }, team_slug: { required: true, type: "string" + }, + title: { + required: true, + type: "string" } }, url: "/orgs/:org/teams/:team_slug/discussions" }, - listDiscussionsLegacy: { - deprecated: "octokit.teams.listDiscussionsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#list-discussions-legacy", - method: "GET", + createDiscussionLegacy: { + deprecated: "octokit.teams.createDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#create-a-discussion-legacy", + method: "POST", params: { - direction: { - enum: ["asc", "desc"], + body: { + required: true, type: "string" }, - page: { - type: "integer" + private: { + type: "boolean" }, - per_page: { + team_id: { + required: true, type: "integer" }, + title: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/discussions" + }, + delete: { + deprecated: "octokit.teams.delete() has been renamed to octokit.teams.deleteLegacy() (2020-01-16)", + method: "DELETE", + params: { team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id/discussions" + url: "/teams/:team_id" }, - listForAuthenticatedUser: { - method: "GET", + deleteDiscussion: { + deprecated: "octokit.teams.deleteDiscussion() has been renamed to octokit.teams.deleteDiscussionLegacy() (2020-01-16)", + method: "DELETE", params: { - page: { + discussion_number: { + required: true, type: "integer" }, - per_page: { + team_id: { + required: true, type: "integer" } }, - url: "/user/teams" + url: "/teams/:team_id/discussions/:discussion_number" }, - listMembers: { - deprecated: "octokit.teams.listMembers() has been renamed to octokit.teams.listMembersLegacy() (2020-01-16)", - method: "GET", + deleteDiscussionComment: { + deprecated: "octokit.teams.deleteDiscussionComment() has been renamed to octokit.teams.deleteDiscussionCommentLegacy() (2020-01-16)", + method: "DELETE", params: { - page: { + comment_number: { + required: true, type: "integer" }, - per_page: { + discussion_number: { + required: true, type: "integer" }, - role: { - enum: ["member", "maintainer", "all"], - type: "string" - }, team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id/members" + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" }, - listMembersInOrg: { - method: "GET", + deleteDiscussionCommentInOrg: { + method: "DELETE", params: { - org: { + comment_number: { required: true, - type: "string" - }, - page: { type: "integer" }, - per_page: { + discussion_number: { + required: true, type: "integer" }, - role: { - enum: ["member", "maintainer", "all"], + org: { + required: true, type: "string" }, team_slug: { @@ -14366,37 +14893,51 @@ var endpointsByScope = { type: "string" } }, - url: "/orgs/:org/teams/:team_slug/members" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" }, - listMembersLegacy: { - deprecated: "octokit.teams.listMembersLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-team-members-legacy", - method: "GET", + deleteDiscussionCommentLegacy: { + deprecated: "octokit.teams.deleteDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment-legacy", + method: "DELETE", params: { - page: { + comment_number: { + required: true, type: "integer" }, - per_page: { + discussion_number: { + required: true, type: "integer" }, - role: { - enum: ["member", "maintainer", "all"], - type: "string" - }, team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id/members" + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" }, - listPendingInvitations: { - deprecated: "octokit.teams.listPendingInvitations() has been renamed to octokit.teams.listPendingInvitationsLegacy() (2020-01-16)", - method: "GET", + deleteDiscussionInOrg: { + method: "DELETE", params: { - page: { + discussion_number: { + required: true, type: "integer" }, - per_page: { + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + }, + deleteDiscussionLegacy: { + deprecated: "octokit.teams.deleteDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#delete-a-discussion-legacy", + method: "DELETE", + params: { + discussion_number: { + required: true, type: "integer" }, team_id: { @@ -14404,99 +14945,64 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/invitations" + url: "/teams/:team_id/discussions/:discussion_number" }, - listPendingInvitationsInOrg: { - method: "GET", + deleteInOrg: { + method: "DELETE", params: { org: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, team_slug: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/invitations" + url: "/orgs/:org/teams/:team_slug" }, - listPendingInvitationsLegacy: { - deprecated: "octokit.teams.listPendingInvitationsLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-pending-team-invitations-legacy", - method: "GET", + deleteLegacy: { + deprecated: "octokit.teams.deleteLegacy() is deprecated, see https://developer.github.com/v3/teams/#delete-team-legacy", + method: "DELETE", params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id/invitations" + url: "/teams/:team_id" }, - listProjects: { - deprecated: "octokit.teams.listProjects() has been renamed to octokit.teams.listProjectsLegacy() (2020-01-16)", - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + get: { + deprecated: "octokit.teams.get() has been renamed to octokit.teams.getLegacy() (2020-01-16)", method: "GET", params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id/projects" + url: "/teams/:team_id" }, - listProjectsInOrg: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + getByName: { method: "GET", params: { org: { required: true, type: "string" }, - page: { - type: "integer" - }, - per_page: { - type: "integer" - }, team_slug: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/projects" + url: "/orgs/:org/teams/:team_slug" }, - listProjectsLegacy: { - deprecated: "octokit.teams.listProjectsLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-projects-legacy", - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + getDiscussion: { + deprecated: "octokit.teams.getDiscussion() has been renamed to octokit.teams.getDiscussionLegacy() (2020-01-16)", method: "GET", params: { - page: { - type: "integer" - }, - per_page: { + discussion_number: { + required: true, type: "integer" }, team_id: { @@ -14504,16 +15010,18 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/projects" + url: "/teams/:team_id/discussions/:discussion_number" }, - listRepos: { - deprecated: "octokit.teams.listRepos() has been renamed to octokit.teams.listReposLegacy() (2020-01-16)", + getDiscussionComment: { + deprecated: "octokit.teams.getDiscussionComment() has been renamed to octokit.teams.getDiscussionCommentLegacy() (2020-01-16)", method: "GET", params: { - page: { + comment_number: { + required: true, type: "integer" }, - per_page: { + discussion_number: { + required: true, type: "integer" }, team_id: { @@ -14521,36 +15029,40 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/repos" + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" }, - listReposInOrg: { + getDiscussionCommentInOrg: { method: "GET", params: { - org: { + comment_number: { required: true, - type: "string" - }, - page: { type: "integer" }, - per_page: { + discussion_number: { + required: true, type: "integer" }, + org: { + required: true, + type: "string" + }, team_slug: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/repos" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" }, - listReposLegacy: { - deprecated: "octokit.teams.listReposLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-repos-legacy", + getDiscussionCommentLegacy: { + deprecated: "octokit.teams.getDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment-legacy", method: "GET", params: { - page: { + comment_number: { + required: true, type: "integer" }, - per_page: { + discussion_number: { + required: true, type: "integer" }, team_id: { @@ -14558,74 +15070,70 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/repos" + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" }, - removeMember: { - deprecated: "octokit.teams.removeMember() has been renamed to octokit.teams.removeMemberLegacy() (2020-01-16)", - method: "DELETE", + getDiscussionInOrg: { + method: "GET", params: { - team_id: { + discussion_number: { required: true, type: "integer" }, - username: { + org: { + required: true, + type: "string" + }, + team_slug: { required: true, type: "string" } }, - url: "/teams/:team_id/members/:username" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" }, - removeMemberLegacy: { - deprecated: "octokit.teams.removeMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member-legacy", - method: "DELETE", + getDiscussionLegacy: { + deprecated: "octokit.teams.getDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#get-a-single-discussion-legacy", + method: "GET", params: { - team_id: { + discussion_number: { required: true, type: "integer" }, - username: { + team_id: { required: true, - type: "string" + type: "integer" } }, - url: "/teams/:team_id/members/:username" + url: "/teams/:team_id/discussions/:discussion_number" }, - removeMembership: { - deprecated: "octokit.teams.removeMembership() has been renamed to octokit.teams.removeMembershipLegacy() (2020-01-16)", - method: "DELETE", + getLegacy: { + deprecated: "octokit.teams.getLegacy() is deprecated, see https://developer.github.com/v3/teams/#get-team-legacy", + method: "GET", params: { team_id: { required: true, type: "integer" - }, - username: { - required: true, - type: "string" } }, - url: "/teams/:team_id/memberships/:username" + url: "/teams/:team_id" }, - removeMembershipInOrg: { - method: "DELETE", + getMember: { + deprecated: "octokit.teams.getMember() has been renamed to octokit.teams.getMemberLegacy() (2020-01-16)", + method: "GET", params: { - org: { - required: true, - type: "string" - }, - team_slug: { + team_id: { required: true, - type: "string" + type: "integer" }, username: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/memberships/:username" + url: "/teams/:team_id/members/:username" }, - removeMembershipLegacy: { - deprecated: "octokit.teams.removeMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-membership-legacy", - method: "DELETE", + getMemberLegacy: { + deprecated: "octokit.teams.getMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member-legacy", + method: "GET", params: { team_id: { required: true, @@ -14636,125 +15144,80 @@ var endpointsByScope = { type: "string" } }, - url: "/teams/:team_id/memberships/:username" + url: "/teams/:team_id/members/:username" }, - removeProject: { - deprecated: "octokit.teams.removeProject() has been renamed to octokit.teams.removeProjectLegacy() (2020-01-16)", - method: "DELETE", + getMembership: { + deprecated: "octokit.teams.getMembership() has been renamed to octokit.teams.getMembershipLegacy() (2020-01-16)", + method: "GET", params: { - project_id: { + team_id: { required: true, type: "integer" }, - team_id: { + username: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/projects/:project_id" + url: "/teams/:team_id/memberships/:username" }, - removeProjectInOrg: { - method: "DELETE", + getMembershipInOrg: { + method: "GET", params: { org: { required: true, type: "string" }, - project_id: { - required: true, - type: "integer" - }, team_slug: { required: true, type: "string" - } - }, - url: "/orgs/:org/teams/:team_slug/projects/:project_id" - }, - removeProjectLegacy: { - deprecated: "octokit.teams.removeProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-project-legacy", - method: "DELETE", - params: { - project_id: { - required: true, - type: "integer" }, - team_id: { + username: { required: true, - type: "integer" + type: "string" } }, - url: "/teams/:team_id/projects/:project_id" + url: "/orgs/:org/teams/:team_slug/memberships/:username" }, - removeRepo: { - deprecated: "octokit.teams.removeRepo() has been renamed to octokit.teams.removeRepoLegacy() (2020-01-16)", - method: "DELETE", + getMembershipLegacy: { + deprecated: "octokit.teams.getMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-membership-legacy", + method: "GET", params: { - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" - }, team_id: { required: true, type: "integer" - } - }, - url: "/teams/:team_id/repos/:owner/:repo" - }, - removeRepoInOrg: { - method: "DELETE", - params: { - org: { - required: true, - type: "string" - }, - owner: { - required: true, - type: "string" - }, - repo: { - required: true, - type: "string" }, - team_slug: { + username: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" + url: "/teams/:team_id/memberships/:username" }, - removeRepoLegacy: { - deprecated: "octokit.teams.removeRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-repository-legacy", - method: "DELETE", + list: { + method: "GET", params: { - owner: { + org: { required: true, type: "string" }, - repo: { - required: true, - type: "string" + page: { + type: "integer" }, - team_id: { - required: true, + per_page: { type: "integer" } }, - url: "/teams/:team_id/repos/:owner/:repo" + url: "/orgs/:org/teams" }, - reviewProject: { - deprecated: "octokit.teams.reviewProject() has been renamed to octokit.teams.reviewProjectLegacy() (2020-01-16)", - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listChild: { + deprecated: "octokit.teams.listChild() has been renamed to octokit.teams.listChildLegacy() (2020-01-16)", method: "GET", params: { - project_id: { - required: true, + page: { + type: "integer" + }, + per_page: { type: "integer" }, team_id: { @@ -14762,20 +15225,19 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/projects/:project_id" + url: "/teams/:team_id/teams" }, - reviewProjectInOrg: { - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listChildInOrg: { method: "GET", params: { org: { required: true, type: "string" }, - project_id: { - required: true, + page: { + type: "integer" + }, + per_page: { type: "integer" }, team_slug: { @@ -14783,17 +15245,16 @@ var endpointsByScope = { type: "string" } }, - url: "/orgs/:org/teams/:team_slug/projects/:project_id" + url: "/orgs/:org/teams/:team_slug/teams" }, - reviewProjectLegacy: { - deprecated: "octokit.teams.reviewProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#review-a-team-project-legacy", - headers: { - accept: "application/vnd.github.inertia-preview+json" - }, + listChildLegacy: { + deprecated: "octokit.teams.listChildLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-child-teams-legacy", method: "GET", params: { - project_id: { - required: true, + page: { + type: "integer" + }, + per_page: { type: "integer" }, team_id: { @@ -14801,72 +15262,77 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/projects/:project_id" + url: "/teams/:team_id/teams" }, - update: { - deprecated: "octokit.teams.update() has been renamed to octokit.teams.updateLegacy() (2020-01-16)", - method: "PATCH", + listDiscussionComments: { + deprecated: "octokit.teams.listDiscussionComments() has been renamed to octokit.teams.listDiscussionCommentsLegacy() (2020-01-16)", + method: "GET", params: { - description: { + direction: { + enum: ["asc", "desc"], type: "string" }, - name: { + discussion_number: { required: true, - type: "string" - }, - parent_team_id: { type: "integer" }, - permission: { - enum: ["pull", "push", "admin"], - type: "string" - }, - privacy: { - enum: ["secret", "closed"], - type: "string" + page: { + type: "integer" + }, + per_page: { + type: "integer" }, team_id: { required: true, type: "integer" } }, - url: "/teams/:team_id" + url: "/teams/:team_id/discussions/:discussion_number/comments" }, - updateDiscussion: { - deprecated: "octokit.teams.updateDiscussion() has been renamed to octokit.teams.updateDiscussionLegacy() (2020-01-16)", - method: "PATCH", + listDiscussionCommentsInOrg: { + method: "GET", params: { - body: { + direction: { + enum: ["asc", "desc"], type: "string" }, discussion_number: { required: true, type: "integer" }, - team_id: { + org: { required: true, + type: "string" + }, + page: { type: "integer" }, - title: { + per_page: { + type: "integer" + }, + team_slug: { + required: true, type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number" + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments" }, - updateDiscussionComment: { - deprecated: "octokit.teams.updateDiscussionComment() has been renamed to octokit.teams.updateDiscussionCommentLegacy() (2020-01-16)", - method: "PATCH", + listDiscussionCommentsLegacy: { + deprecated: "octokit.teams.listDiscussionCommentsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#list-comments-legacy", + method: "GET", params: { - body: { - required: true, + direction: { + enum: ["asc", "desc"], type: "string" }, - comment_number: { + discussion_number: { required: true, type: "integer" }, - discussion_number: { - required: true, + page: { + type: "integer" + }, + per_page: { type: "integer" }, team_id: { @@ -14874,48 +15340,65 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + url: "/teams/:team_id/discussions/:discussion_number/comments" }, - updateDiscussionCommentInOrg: { - method: "PATCH", + listDiscussions: { + deprecated: "octokit.teams.listDiscussions() has been renamed to octokit.teams.listDiscussionsLegacy() (2020-01-16)", + method: "GET", params: { - body: { - required: true, + direction: { + enum: ["asc", "desc"], type: "string" }, - comment_number: { - required: true, + page: { type: "integer" }, - discussion_number: { + per_page: { + type: "integer" + }, + team_id: { required: true, type: "integer" + } + }, + url: "/teams/:team_id/discussions" + }, + listDiscussionsInOrg: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" }, org: { required: true, type: "string" }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, team_slug: { required: true, type: "string" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" + url: "/orgs/:org/teams/:team_slug/discussions" }, - updateDiscussionCommentLegacy: { - deprecated: "octokit.teams.updateDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment-legacy", - method: "PATCH", + listDiscussionsLegacy: { + deprecated: "octokit.teams.listDiscussionsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#list-discussions-legacy", + method: "GET", params: { - body: { - required: true, + direction: { + enum: ["asc", "desc"], type: "string" }, - comment_number: { - required: true, + page: { type: "integer" }, - discussion_number: { - required: true, + per_page: { type: "integer" }, team_id: { @@ -14923,76 +15406,56 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + url: "/teams/:team_id/discussions" }, - updateDiscussionInOrg: { - method: "PATCH", + listForAuthenticatedUser: { + method: "GET", params: { - body: { - type: "string" - }, - discussion_number: { - required: true, + page: { type: "integer" }, - org: { - required: true, - type: "string" - }, - team_slug: { - required: true, - type: "string" - }, - title: { - type: "string" + per_page: { + type: "integer" } }, - url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + url: "/user/teams" }, - updateDiscussionLegacy: { - deprecated: "octokit.teams.updateDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#edit-a-discussion-legacy", - method: "PATCH", + listMembers: { + deprecated: "octokit.teams.listMembers() has been renamed to octokit.teams.listMembersLegacy() (2020-01-16)", + method: "GET", params: { - body: { - type: "string" + page: { + type: "integer" }, - discussion_number: { - required: true, + per_page: { type: "integer" }, + role: { + enum: ["member", "maintainer", "all"], + type: "string" + }, team_id: { required: true, type: "integer" - }, - title: { - type: "string" } }, - url: "/teams/:team_id/discussions/:discussion_number" + url: "/teams/:team_id/members" }, - updateInOrg: { - method: "PATCH", + listMembersInOrg: { + method: "GET", params: { - description: { - type: "string" - }, - name: { - required: true, - type: "string" - }, org: { required: true, type: "string" }, - parent_team_id: { + page: { type: "integer" }, - permission: { - enum: ["pull", "push", "admin"], - type: "string" + per_page: { + type: "integer" }, - privacy: { - enum: ["secret", "closed"], + role: { + enum: ["member", "maintainer", "all"], type: "string" }, team_slug: { @@ -15000,28 +15463,20 @@ var endpointsByScope = { type: "string" } }, - url: "/orgs/:org/teams/:team_slug" + url: "/orgs/:org/teams/:team_slug/members" }, - updateLegacy: { - deprecated: "octokit.teams.updateLegacy() is deprecated, see https://developer.github.com/v3/teams/#edit-team-legacy", - method: "PATCH", + listMembersLegacy: { + deprecated: "octokit.teams.listMembersLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-team-members-legacy", + method: "GET", params: { - description: { - type: "string" - }, - name: { - required: true, - type: "string" - }, - parent_team_id: { + page: { type: "integer" }, - permission: { - enum: ["pull", "push", "admin"], - type: "string" + per_page: { + type: "integer" }, - privacy: { - enum: ["secret", "closed"], + role: { + enum: ["member", "maintainer", "all"], type: "string" }, team_id: { @@ -15029,148 +15484,233 @@ var endpointsByScope = { type: "integer" } }, - url: "/teams/:team_id" - } - }, - users: { - addEmails: { - method: "POST", + url: "/teams/:team_id/members" + }, + listPendingInvitations: { + deprecated: "octokit.teams.listPendingInvitations() has been renamed to octokit.teams.listPendingInvitationsLegacy() (2020-01-16)", + method: "GET", params: { - emails: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { required: true, - type: "string[]" + type: "integer" } }, - url: "/user/emails" + url: "/teams/:team_id/invitations" }, - block: { - method: "PUT", + listPendingInvitationsInOrg: { + method: "GET", params: { - username: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { required: true, type: "string" } }, - url: "/user/blocks/:username" - }, - checkBlocked: { + url: "/orgs/:org/teams/:team_slug/invitations" + }, + listPendingInvitationsLegacy: { + deprecated: "octokit.teams.listPendingInvitationsLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-pending-team-invitations-legacy", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/invitations" + }, + listProjects: { + deprecated: "octokit.teams.listProjects() has been renamed to octokit.teams.listProjectsLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - username: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { required: true, - type: "string" + type: "integer" } }, - url: "/user/blocks/:username" + url: "/teams/:team_id/projects" }, - checkFollowing: { + listProjectsInOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - username: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { required: true, type: "string" } }, - url: "/user/following/:username" + url: "/orgs/:org/teams/:team_slug/projects" }, - checkFollowingForUser: { + listProjectsLegacy: { + deprecated: "octokit.teams.listProjectsLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-projects-legacy", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - target_user: { - required: true, - type: "string" + page: { + type: "integer" }, - username: { + per_page: { + type: "integer" + }, + team_id: { required: true, - type: "string" + type: "integer" } }, - url: "/users/:username/following/:target_user" + url: "/teams/:team_id/projects" }, - createGpgKey: { - method: "POST", + listRepos: { + deprecated: "octokit.teams.listRepos() has been renamed to octokit.teams.listReposLegacy() (2020-01-16)", + method: "GET", params: { - armored_public_key: { - type: "string" + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" } }, - url: "/user/gpg_keys" + url: "/teams/:team_id/repos" }, - createPublicKey: { - method: "POST", + listReposInOrg: { + method: "GET", params: { - key: { + org: { + required: true, type: "string" }, - title: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, type: "string" } }, - url: "/user/keys" + url: "/orgs/:org/teams/:team_slug/repos" }, - deleteEmails: { - method: "DELETE", + listReposLegacy: { + deprecated: "octokit.teams.listReposLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-repos-legacy", + method: "GET", params: { - emails: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { required: true, - type: "string[]" + type: "integer" } }, - url: "/user/emails" + url: "/teams/:team_id/repos" }, - deleteGpgKey: { + removeMember: { + deprecated: "octokit.teams.removeMember() has been renamed to octokit.teams.removeMemberLegacy() (2020-01-16)", method: "DELETE", params: { - gpg_key_id: { + team_id: { required: true, type: "integer" + }, + username: { + required: true, + type: "string" } }, - url: "/user/gpg_keys/:gpg_key_id" + url: "/teams/:team_id/members/:username" }, - deletePublicKey: { + removeMemberLegacy: { + deprecated: "octokit.teams.removeMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member-legacy", method: "DELETE", params: { - key_id: { + team_id: { required: true, type: "integer" - } - }, - url: "/user/keys/:key_id" - }, - follow: { - method: "PUT", - params: { + }, username: { required: true, type: "string" } }, - url: "/user/following/:username" - }, - getAuthenticated: { - method: "GET", - params: {}, - url: "/user" + url: "/teams/:team_id/members/:username" }, - getByUsername: { - method: "GET", + removeMembership: { + deprecated: "octokit.teams.removeMembership() has been renamed to octokit.teams.removeMembershipLegacy() (2020-01-16)", + method: "DELETE", params: { + team_id: { + required: true, + type: "integer" + }, username: { required: true, type: "string" } }, - url: "/users/:username" + url: "/teams/:team_id/memberships/:username" }, - getContextForUser: { - method: "GET", + removeMembershipInOrg: { + method: "DELETE", params: { - subject_id: { + org: { + required: true, type: "string" }, - subject_type: { - enum: ["organization", "repository", "issue", "pull_request"], + team_slug: { + required: true, type: "string" }, username: { @@ -15178,850 +15718,915 @@ var endpointsByScope = { type: "string" } }, - url: "/users/:username/hovercard" + url: "/orgs/:org/teams/:team_slug/memberships/:username" }, - getGpgKey: { - method: "GET", + removeMembershipLegacy: { + deprecated: "octokit.teams.removeMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-membership-legacy", + method: "DELETE", params: { - gpg_key_id: { + team_id: { required: true, type: "integer" + }, + username: { + required: true, + type: "string" } }, - url: "/user/gpg_keys/:gpg_key_id" + url: "/teams/:team_id/memberships/:username" }, - getPublicKey: { - method: "GET", + removeProject: { + deprecated: "octokit.teams.removeProject() has been renamed to octokit.teams.removeProjectLegacy() (2020-01-16)", + method: "DELETE", params: { - key_id: { + project_id: { + required: true, + type: "integer" + }, + team_id: { required: true, type: "integer" } }, - url: "/user/keys/:key_id" + url: "/teams/:team_id/projects/:project_id" }, - list: { - method: "GET", + removeProjectInOrg: { + method: "DELETE", params: { - page: { - type: "integer" + org: { + required: true, + type: "string" }, - per_page: { + project_id: { + required: true, type: "integer" }, - since: { + team_slug: { + required: true, type: "string" } }, - url: "/users" - }, - listBlocked: { - method: "GET", - params: {}, - url: "/user/blocks" + url: "/orgs/:org/teams/:team_slug/projects/:project_id" }, - listEmails: { - method: "GET", + removeProjectLegacy: { + deprecated: "octokit.teams.removeProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-project-legacy", + method: "DELETE", params: { - page: { + project_id: { + required: true, type: "integer" }, - per_page: { + team_id: { + required: true, type: "integer" } }, - url: "/user/emails" + url: "/teams/:team_id/projects/:project_id" }, - listFollowersForAuthenticatedUser: { - method: "GET", + removeRepo: { + deprecated: "octokit.teams.removeRepo() has been renamed to octokit.teams.removeRepoLegacy() (2020-01-16)", + method: "DELETE", params: { - page: { - type: "integer" + owner: { + required: true, + type: "string" }, - per_page: { + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, type: "integer" } }, - url: "/user/followers" + url: "/teams/:team_id/repos/:owner/:repo" }, - listFollowersForUser: { - method: "GET", + removeRepoInOrg: { + method: "DELETE", params: { - page: { - type: "integer" + org: { + required: true, + type: "string" }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" }, - username: { + repo: { required: true, type: "string" - } - }, - url: "/users/:username/followers" - }, - listFollowingForAuthenticatedUser: { - method: "GET", - params: { - page: { - type: "integer" }, - per_page: { - type: "integer" + team_slug: { + required: true, + type: "string" } }, - url: "/user/following" + url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" }, - listFollowingForUser: { - method: "GET", + removeRepoLegacy: { + deprecated: "octokit.teams.removeRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-repository-legacy", + method: "DELETE", params: { - page: { - type: "integer" - }, - per_page: { - type: "integer" + owner: { + required: true, + type: "string" }, - username: { + repo: { required: true, type: "string" + }, + team_id: { + required: true, + type: "integer" } }, - url: "/users/:username/following" + url: "/teams/:team_id/repos/:owner/:repo" }, - listGpgKeys: { + reviewProject: { + deprecated: "octokit.teams.reviewProject() has been renamed to octokit.teams.reviewProjectLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - page: { + project_id: { + required: true, type: "integer" }, - per_page: { + team_id: { + required: true, type: "integer" } }, - url: "/user/gpg_keys" + url: "/teams/:team_id/projects/:project_id" }, - listGpgKeysForUser: { + reviewProjectInOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - page: { - type: "integer" + org: { + required: true, + type: "string" }, - per_page: { + project_id: { + required: true, type: "integer" }, - username: { + team_slug: { required: true, type: "string" } }, - url: "/users/:username/gpg_keys" + url: "/orgs/:org/teams/:team_slug/projects/:project_id" }, - listPublicEmails: { + reviewProjectLegacy: { + deprecated: "octokit.teams.reviewProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#review-a-team-project-legacy", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, method: "GET", params: { - page: { + project_id: { + required: true, type: "integer" }, - per_page: { + team_id: { + required: true, type: "integer" } }, - url: "/user/public_emails" + url: "/teams/:team_id/projects/:project_id" }, - listPublicKeys: { - method: "GET", + update: { + deprecated: "octokit.teams.update() has been renamed to octokit.teams.updateLegacy() (2020-01-16)", + method: "PATCH", params: { - page: { + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + parent_team_id: { type: "integer" }, - per_page: { + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + team_id: { + required: true, type: "integer" } }, - url: "/user/keys" + url: "/teams/:team_id" }, - listPublicKeysForUser: { - method: "GET", + updateDiscussion: { + deprecated: "octokit.teams.updateDiscussion() has been renamed to octokit.teams.updateDiscussionLegacy() (2020-01-16)", + method: "PATCH", params: { - page: { - type: "integer" + body: { + type: "string" }, - per_page: { + discussion_number: { + required: true, type: "integer" }, - username: { + team_id: { required: true, + type: "integer" + }, + title: { type: "string" } }, - url: "/users/:username/keys" + url: "/teams/:team_id/discussions/:discussion_number" }, - togglePrimaryEmailVisibility: { + updateDiscussionComment: { + deprecated: "octokit.teams.updateDiscussionComment() has been renamed to octokit.teams.updateDiscussionCommentLegacy() (2020-01-16)", method: "PATCH", params: { - email: { + body: { required: true, type: "string" }, - visibility: { + comment_number: { required: true, - type: "string" - } - }, - url: "/user/email/visibility" - }, - unblock: { - method: "DELETE", - params: { - username: { + type: "integer" + }, + discussion_number: { required: true, - type: "string" - } - }, - url: "/user/blocks/:username" - }, - unfollow: { - method: "DELETE", - params: { - username: { + type: "integer" + }, + team_id: { required: true, - type: "string" + type: "integer" } }, - url: "/user/following/:username" + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" }, - updateAuthenticated: { + updateDiscussionCommentInOrg: { method: "PATCH", params: { - bio: { - type: "string" - }, - blog: { - type: "string" - }, - company: { - type: "string" - }, - email: { + body: { + required: true, type: "string" }, - hireable: { - type: "boolean" - }, - location: { - type: "string" + comment_number: { + required: true, + type: "integer" }, - name: { - type: "string" - } - }, - url: "/user" - } - } -}; - -const VERSION = "2.4.0"; - -function registerEndpoints(octokit, routes) { - Object.keys(routes).forEach(namespaceName => { - if (!octokit[namespaceName]) { - octokit[namespaceName] = {}; - } - - Object.keys(routes[namespaceName]).forEach(apiName => { - const apiOptions = routes[namespaceName][apiName]; - const endpointDefaults = ["method", "url", "headers"].reduce((map, key) => { - if (typeof apiOptions[key] !== "undefined") { - map[key] = apiOptions[key]; - } - - return map; - }, {}); - endpointDefaults.request = { - validate: apiOptions.params - }; - let request = octokit.request.defaults(endpointDefaults); // patch request & endpoint methods to support deprecated parameters. - // Not the most elegant solution, but we don’t want to move deprecation - // logic into octokit/endpoint.js as it’s out of scope - - const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(key => apiOptions.params[key].deprecated); - - if (hasDeprecatedParam) { - const patch = patchForDeprecation.bind(null, octokit, apiOptions); - request = patch(octokit.request.defaults(endpointDefaults), `.${namespaceName}.${apiName}()`); - request.endpoint = patch(request.endpoint, `.${namespaceName}.${apiName}.endpoint()`); - request.endpoint.merge = patch(request.endpoint.merge, `.${namespaceName}.${apiName}.endpoint.merge()`); - } - - if (apiOptions.deprecated) { - octokit[namespaceName][apiName] = Object.assign(function deprecatedEndpointMethod() { - octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`)); - octokit[namespaceName][apiName] = request; - return request.apply(null, arguments); - }, request); - return; - } - - octokit[namespaceName][apiName] = request; - }); - }); -} - -function patchForDeprecation(octokit, apiOptions, method, methodName) { - const patchedMethod = options => { - options = Object.assign({}, options); - Object.keys(options).forEach(key => { - if (apiOptions.params[key] && apiOptions.params[key].deprecated) { - const aliasKey = apiOptions.params[key].alias; - octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] "${key}" parameter is deprecated for "${methodName}". Use "${aliasKey}" instead`)); - - if (!(aliasKey in options)) { - options[aliasKey] = options[key]; + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" } - - delete options[key]; - } - }); - return method(options); - }; - - Object.keys(method).forEach(key => { - patchedMethod[key] = method[key]; - }); - return patchedMethod; -} - -/** - * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary - * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is - * done, we will remove the registerEndpoints methods and return the methods - * directly as with the other plugins. At that point we will also remove the - * legacy workarounds and deprecations. - * - * See the plan at - * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1 - */ - -function restEndpointMethods(octokit) { - // @ts-ignore - octokit.registerEndpoints = registerEndpoints.bind(null, octokit); - registerEndpoints(octokit, endpointsByScope); // Aliasing scopes for backward compatibility - // See https://github.com/octokit/rest.js/pull/1134 - - [["gitdata", "git"], ["authorization", "oauthAuthorizations"], ["pullRequests", "pulls"]].forEach(([deprecatedScope, scope]) => { - Object.defineProperty(octokit, deprecatedScope, { - get() { - octokit.log.warn( // @ts-ignore - new deprecation.Deprecation(`[@octokit/plugin-rest-endpoint-methods] "octokit.${deprecatedScope}.*" methods are deprecated, use "octokit.${scope}.*" instead`)); // @ts-ignore - - return octokit[scope]; - } - - }); - }); - return {}; -} -restEndpointMethods.VERSION = VERSION; - -exports.restEndpointMethods = restEndpointMethods; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 537: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var deprecation = __nccwpck_require__(8932); -var once = _interopDefault(__nccwpck_require__(1223)); - -const logOnceCode = once(deprecation => console.warn(deprecation)); -const logOnceHeaders = once(deprecation => console.warn(deprecation)); -/** - * Error with extra properties to help with debugging - */ - -class RequestError extends Error { - constructor(message, statusCode, options) { - super(message); // Maintains proper stack trace (only available on V8) - - /* istanbul ignore next */ - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - - this.name = "HttpError"; - this.status = statusCode; - let headers; - - if ("headers" in options && typeof options.headers !== "undefined") { - headers = options.headers; - } - - if ("response" in options) { - this.response = options.response; - headers = options.response.headers; - } // redact request credentials without mutating original request options - - - const requestCopy = Object.assign({}, options.request); - - if (options.request.headers.authorization) { - requestCopy.headers = Object.assign({}, options.request.headers, { - authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") - }); - } - - requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit - // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications - .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended - // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header - .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); - this.request = requestCopy; // deprecations - - Object.defineProperty(this, "code", { - get() { - logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); - return statusCode; - } - - }); - Object.defineProperty(this, "headers", { - get() { - logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")); - return headers || {}; - } - - }); - } - -} - -exports.RequestError = RequestError; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 6234: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var endpoint = __nccwpck_require__(9440); -var universalUserAgent = __nccwpck_require__(5030); -var isPlainObject = __nccwpck_require__(3287); -var nodeFetch = _interopDefault(__nccwpck_require__(467)); -var requestError = __nccwpck_require__(537); - -const VERSION = "5.6.3"; - -function getBufferResponse(response) { - return response.arrayBuffer(); -} - -function fetchWrapper(requestOptions) { - const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; - - if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { - requestOptions.body = JSON.stringify(requestOptions.body); - } - - let headers = {}; - let status; - let url; - const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; - return fetch(requestOptions.url, Object.assign({ - method: requestOptions.method, - body: requestOptions.body, - headers: requestOptions.headers, - redirect: requestOptions.redirect - }, // `requestOptions.request.agent` type is incompatible - // see https://github.com/octokit/types.ts/pull/264 - requestOptions.request)).then(async response => { - url = response.url; - status = response.status; - - for (const keyAndValue of response.headers) { - headers[keyAndValue[0]] = keyAndValue[1]; - } - - if ("deprecation" in headers) { - const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); - const deprecationLink = matches && matches.pop(); - log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`); + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" + }, + updateDiscussionCommentLegacy: { + deprecated: "octokit.teams.updateDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment-legacy", + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + }, + updateDiscussionInOrg: { + method: "PATCH", + params: { + body: { + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + }, + title: { + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + }, + updateDiscussionLegacy: { + deprecated: "octokit.teams.updateDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#edit-a-discussion-legacy", + method: "PATCH", + params: { + body: { + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + }, + title: { + type: "string" + } + }, + url: "/teams/:team_id/discussions/:discussion_number" + }, + updateInOrg: { + method: "PATCH", + params: { + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + }, + parent_team_id: { + type: "integer" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug" + }, + updateLegacy: { + deprecated: "octokit.teams.updateLegacy() is deprecated, see https://developer.github.com/v3/teams/#edit-team-legacy", + method: "PATCH", + params: { + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + parent_team_id: { + type: "integer" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id" } - - if (status === 204 || status === 205) { - return; - } // GitHub API returns 200 for HEAD requests - - - if (requestOptions.method === "HEAD") { - if (status < 400) { - return; - } - - throw new requestError.RequestError(response.statusText, status, { - response: { - url, - status, - headers, - data: undefined + }, + users: { + addEmails: { + method: "POST", + params: { + emails: { + required: true, + type: "string[]" + } + }, + url: "/user/emails" + }, + block: { + method: "PUT", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/blocks/:username" + }, + checkBlocked: { + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/blocks/:username" + }, + checkFollowing: { + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/following/:username" + }, + checkFollowingForUser: { + method: "GET", + params: { + target_user: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/following/:target_user" + }, + createGpgKey: { + method: "POST", + params: { + armored_public_key: { + type: "string" + } + }, + url: "/user/gpg_keys" + }, + createPublicKey: { + method: "POST", + params: { + key: { + type: "string" + }, + title: { + type: "string" + } + }, + url: "/user/keys" + }, + deleteEmails: { + method: "DELETE", + params: { + emails: { + required: true, + type: "string[]" + } + }, + url: "/user/emails" + }, + deleteGpgKey: { + method: "DELETE", + params: { + gpg_key_id: { + required: true, + type: "integer" + } + }, + url: "/user/gpg_keys/:gpg_key_id" + }, + deletePublicKey: { + method: "DELETE", + params: { + key_id: { + required: true, + type: "integer" + } + }, + url: "/user/keys/:key_id" + }, + follow: { + method: "PUT", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/following/:username" + }, + getAuthenticated: { + method: "GET", + params: {}, + url: "/user" + }, + getByUsername: { + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/users/:username" + }, + getContextForUser: { + method: "GET", + params: { + subject_id: { + type: "string" + }, + subject_type: { + enum: ["organization", "repository", "issue", "pull_request"], + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/hovercard" + }, + getGpgKey: { + method: "GET", + params: { + gpg_key_id: { + required: true, + type: "integer" + } + }, + url: "/user/gpg_keys/:gpg_key_id" + }, + getPublicKey: { + method: "GET", + params: { + key_id: { + required: true, + type: "integer" + } + }, + url: "/user/keys/:key_id" + }, + list: { + method: "GET", + params: { + page: { + type: "integer" }, - request: requestOptions - }); - } - - if (status === 304) { - throw new requestError.RequestError("Not modified", status, { - response: { - url, - status, - headers, - data: await getResponseData(response) + per_page: { + type: "integer" }, - request: requestOptions - }); - } - - if (status >= 400) { - const data = await getResponseData(response); - const error = new requestError.RequestError(toErrorMessage(data), status, { - response: { - url, - status, - headers, - data + since: { + type: "string" + } + }, + url: "/users" + }, + listBlocked: { + method: "GET", + params: {}, + url: "/user/blocks" + }, + listEmails: { + method: "GET", + params: { + page: { + type: "integer" }, - request: requestOptions - }); - throw error; - } - - return getResponseData(response); - }).then(data => { - return { - status, - url, - headers, - data - }; - }).catch(error => { - if (error instanceof requestError.RequestError) throw error; - throw new requestError.RequestError(error.message, 500, { - request: requestOptions - }); - }); -} - -async function getResponseData(response) { - const contentType = response.headers.get("content-type"); - - if (/application\/json/.test(contentType)) { - return response.json(); - } - - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); - } - - return getBufferResponse(response); -} - -function toErrorMessage(data) { - if (typeof data === "string") return data; // istanbul ignore else - just in case - - if ("message" in data) { - if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; - } - - return data.message; - } // istanbul ignore next - just in case - - - return `Unknown error: ${JSON.stringify(data)}`; -} - -function withDefaults(oldEndpoint, newDefaults) { - const endpoint = oldEndpoint.defaults(newDefaults); - - const newApi = function (route, parameters) { - const endpointOptions = endpoint.merge(route, parameters); - - if (!endpointOptions.request || !endpointOptions.request.hook) { - return fetchWrapper(endpoint.parse(endpointOptions)); + per_page: { + type: "integer" + } + }, + url: "/user/emails" + }, + listFollowersForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/followers" + }, + listFollowersForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/followers" + }, + listFollowingForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/following" + }, + listFollowingForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/following" + }, + listGpgKeys: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/gpg_keys" + }, + listGpgKeysForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/gpg_keys" + }, + listPublicEmails: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/public_emails" + }, + listPublicKeys: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/keys" + }, + listPublicKeysForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/keys" + }, + togglePrimaryEmailVisibility: { + method: "PATCH", + params: { + email: { + required: true, + type: "string" + }, + visibility: { + required: true, + type: "string" + } + }, + url: "/user/email/visibility" + }, + unblock: { + method: "DELETE", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/blocks/:username" + }, + unfollow: { + method: "DELETE", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/following/:username" + }, + updateAuthenticated: { + method: "PATCH", + params: { + bio: { + type: "string" + }, + blog: { + type: "string" + }, + company: { + type: "string" + }, + email: { + type: "string" + }, + hireable: { + type: "boolean" + }, + location: { + type: "string" + }, + name: { + type: "string" + } + }, + url: "/user" } - - const request = (route, parameters) => { - return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); - }; - - Object.assign(request, { - endpoint, - defaults: withDefaults.bind(null, endpoint) - }); - return endpointOptions.request.hook(request, endpointOptions); - }; - - return Object.assign(newApi, { - endpoint, - defaults: withDefaults.bind(null, endpoint) - }); -} - -const request = withDefaults(endpoint.endpoint, { - headers: { - "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` - } -}); - -exports.request = request; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 9351: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const { requestLog } = __nccwpck_require__(8883); -const { - restEndpointMethods -} = __nccwpck_require__(3044); - -const Core = __nccwpck_require__(9833); - -const CORE_PLUGINS = [ - __nccwpck_require__(4555), - __nccwpck_require__(3691), // deprecated: remove in v17 - requestLog, - __nccwpck_require__(8579), - restEndpointMethods, - __nccwpck_require__(2657), - - __nccwpck_require__(2072) // deprecated: remove in v17 -]; - -const OctokitRest = Core.plugin(CORE_PLUGINS); - -function DeprecatedOctokit(options) { - const warn = - options && options.log && options.log.warn - ? options.log.warn - : console.warn; - warn( - '[@octokit/rest] `const Octokit = require("@octokit/rest")` is deprecated. Use `const { Octokit } = require("@octokit/rest")` instead' - ); - return new OctokitRest(options); -} - -const Octokit = Object.assign(DeprecatedOctokit, { - Octokit: OctokitRest -}); - -Object.keys(OctokitRest).forEach(key => { - /* istanbul ignore else */ - if (OctokitRest.hasOwnProperty(key)) { - Octokit[key] = OctokitRest[key]; } -}); - -module.exports = Octokit; - - -/***/ }), - -/***/ 823: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = Octokit; - -const { request } = __nccwpck_require__(6234); -const Hook = __nccwpck_require__(3682); - -const parseClientOptions = __nccwpck_require__(4613); - -function Octokit(plugins, options) { - options = options || {}; - const hook = new Hook.Collection(); - const log = Object.assign( - { - debug: () => {}, - info: () => {}, - warn: console.warn, - error: console.error - }, - options && options.log - ); - const api = { - hook, - log, - request: request.defaults(parseClientOptions(options, log, hook)) - }; - - plugins.forEach(pluginFunction => pluginFunction(api, options)); - - return api; -} - - -/***/ }), - -/***/ 9833: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const factory = __nccwpck_require__(5320); - -module.exports = factory(); - - -/***/ }), - -/***/ 5320: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = factory; - -const Octokit = __nccwpck_require__(823); -const registerPlugin = __nccwpck_require__(7826); - -function factory(plugins) { - const Api = Octokit.bind(null, plugins || []); - Api.plugin = registerPlugin.bind(null, plugins || []); - return Api; -} - - -/***/ }), - -/***/ 4613: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = parseOptions; - -const { Deprecation } = __nccwpck_require__(8932); -const { getUserAgent } = __nccwpck_require__(3318); -const once = __nccwpck_require__(1223); - -const pkg = __nccwpck_require__(9674); - -const deprecateOptionsTimeout = once((log, deprecation) => - log.warn(deprecation) -); -const deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation)); -const deprecateOptionsHeaders = once((log, deprecation) => - log.warn(deprecation) -); +}; -function parseOptions(options, log, hook) { - if (options.headers) { - options.headers = Object.keys(options.headers).reduce((newObj, key) => { - newObj[key.toLowerCase()] = options.headers[key]; - return newObj; - }, {}); - } +const VERSION = "2.4.0"; - const clientDefaults = { - headers: options.headers || {}, - request: options.request || {}, - mediaType: { - previews: [], - format: "" +function registerEndpoints(octokit, routes) { + Object.keys(routes).forEach(namespaceName => { + if (!octokit[namespaceName]) { + octokit[namespaceName] = {}; } - }; - if (options.baseUrl) { - clientDefaults.baseUrl = options.baseUrl; - } - - if (options.userAgent) { - clientDefaults.headers["user-agent"] = options.userAgent; - } + Object.keys(routes[namespaceName]).forEach(apiName => { + const apiOptions = routes[namespaceName][apiName]; + const endpointDefaults = ["method", "url", "headers"].reduce((map, key) => { + if (typeof apiOptions[key] !== "undefined") { + map[key] = apiOptions[key]; + } - if (options.previews) { - clientDefaults.mediaType.previews = options.previews; - } + return map; + }, {}); + endpointDefaults.request = { + validate: apiOptions.params + }; + let request = octokit.request.defaults(endpointDefaults); // patch request & endpoint methods to support deprecated parameters. + // Not the most elegant solution, but we don’t want to move deprecation + // logic into octokit/endpoint.js as it’s out of scope - if (options.timeZone) { - clientDefaults.headers["time-zone"] = options.timeZone; - } + const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(key => apiOptions.params[key].deprecated); - if (options.timeout) { - deprecateOptionsTimeout( - log, - new Deprecation( - "[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request" - ) - ); - clientDefaults.request.timeout = options.timeout; - } + if (hasDeprecatedParam) { + const patch = patchForDeprecation.bind(null, octokit, apiOptions); + request = patch(octokit.request.defaults(endpointDefaults), `.${namespaceName}.${apiName}()`); + request.endpoint = patch(request.endpoint, `.${namespaceName}.${apiName}.endpoint()`); + request.endpoint.merge = patch(request.endpoint.merge, `.${namespaceName}.${apiName}.endpoint.merge()`); + } - if (options.agent) { - deprecateOptionsAgent( - log, - new Deprecation( - "[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request" - ) - ); - clientDefaults.request.agent = options.agent; - } + if (apiOptions.deprecated) { + octokit[namespaceName][apiName] = Object.assign(function deprecatedEndpointMethod() { + octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`)); + octokit[namespaceName][apiName] = request; + return request.apply(null, arguments); + }, request); + return; + } - if (options.headers) { - deprecateOptionsHeaders( - log, - new Deprecation( - "[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request" - ) - ); - } + octokit[namespaceName][apiName] = request; + }); + }); +} - const userAgentOption = clientDefaults.headers["user-agent"]; - const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`; +function patchForDeprecation(octokit, apiOptions, method, methodName) { + const patchedMethod = options => { + options = Object.assign({}, options); + Object.keys(options).forEach(key => { + if (apiOptions.params[key] && apiOptions.params[key].deprecated) { + const aliasKey = apiOptions.params[key].alias; + octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] "${key}" parameter is deprecated for "${methodName}". Use "${aliasKey}" instead`)); - clientDefaults.headers["user-agent"] = [userAgentOption, defaultUserAgent] - .filter(Boolean) - .join(" "); + if (!(aliasKey in options)) { + options[aliasKey] = options[key]; + } - clientDefaults.request.hook = hook.bind(null, "request"); + delete options[key]; + } + }); + return method(options); + }; - return clientDefaults; + Object.keys(method).forEach(key => { + patchedMethod[key] = method[key]; + }); + return patchedMethod; } +/** + * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary + * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is + * done, we will remove the registerEndpoints methods and return the methods + * directly as with the other plugins. At that point we will also remove the + * legacy workarounds and deprecations. + * + * See the plan at + * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1 + */ -/***/ }), - -/***/ 7826: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +function restEndpointMethods(octokit) { + // @ts-ignore + octokit.registerEndpoints = registerEndpoints.bind(null, octokit); + registerEndpoints(octokit, endpointsByScope); // Aliasing scopes for backward compatibility + // See https://github.com/octokit/rest.js/pull/1134 -module.exports = registerPlugin; + [["gitdata", "git"], ["authorization", "oauthAuthorizations"], ["pullRequests", "pulls"]].forEach(([deprecatedScope, scope]) => { + Object.defineProperty(octokit, deprecatedScope, { + get() { + octokit.log.warn( // @ts-ignore + new deprecation.Deprecation(`[@octokit/plugin-rest-endpoint-methods] "octokit.${deprecatedScope}.*" methods are deprecated, use "octokit.${scope}.*" instead`)); // @ts-ignore -const factory = __nccwpck_require__(5320); + return octokit[scope]; + } -function registerPlugin(plugins, pluginFunction) { - return factory( - plugins.includes(pluginFunction) ? plugins : plugins.concat(pluginFunction) - ); + }); + }); + return {}; } +restEndpointMethods.VERSION = VERSION; + +exports.restEndpointMethods = restEndpointMethods; +//# sourceMappingURL=index.js.map /***/ }), -/***/ 6239: +/***/ 537: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -16034,7 +16639,8 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau var deprecation = __nccwpck_require__(8932); var once = _interopDefault(__nccwpck_require__(1223)); -const logOnce = once(deprecation => console.warn(deprecation)); +const logOnceCode = once(deprecation => console.warn(deprecation)); +const logOnceHeaders = once(deprecation => console.warn(deprecation)); /** * Error with extra properties to help with debugging */ @@ -16051,14 +16657,17 @@ class RequestError extends Error { this.name = "HttpError"; this.status = statusCode; - Object.defineProperty(this, "code", { - get() { - logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); - return statusCode; - } + let headers; + + if ("headers" in options && typeof options.headers !== "undefined") { + headers = options.headers; + } + + if ("response" in options) { + this.response = options.response; + headers = options.response.headers; + } // redact request credentials without mutating original request options - }); - this.headers = options.headers || {}; // redact request credentials without mutating original request options const requestCopy = Object.assign({}, options.request); @@ -16070,2304 +16679,1854 @@ class RequestError extends Error { requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications - .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended - // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header - .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); - this.request = requestCopy; - } - -} - -exports.RequestError = RequestError; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 3318: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var osName = _interopDefault(__nccwpck_require__(4824)); - -function getUserAgent() { - try { - return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`; - } catch (error) { - if (/wmic os get Caption/.test(error.message)) { - return "Windows "; - } - - throw error; - } -} - -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 795: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = authenticate; - -const { Deprecation } = __nccwpck_require__(8932); -const once = __nccwpck_require__(1223); - -const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation)); - -function authenticate(state, options) { - deprecateAuthenticate( - state.octokit.log, - new Deprecation( - '[@octokit/rest] octokit.authenticate() is deprecated. Use "auth" constructor option instead.' - ) - ); - - if (!options) { - state.auth = false; - return; - } - - switch (options.type) { - case "basic": - if (!options.username || !options.password) { - throw new Error( - "Basic authentication requires both a username and password to be set" - ); - } - break; - - case "oauth": - if (!options.token && !(options.key && options.secret)) { - throw new Error( - "OAuth2 authentication requires a token or key & secret to be set" - ); - } - break; - - case "token": - case "app": - if (!options.token) { - throw new Error("Token authentication requires a token to be set"); - } - break; - - default: - throw new Error( - "Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'" - ); - } - - state.auth = options; -} - - -/***/ }), - -/***/ 7578: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = authenticationBeforeRequest; - -const btoa = __nccwpck_require__(2358); -const uniq = __nccwpck_require__(8216); - -function authenticationBeforeRequest(state, options) { - if (!state.auth.type) { - return; - } - - if (state.auth.type === "basic") { - const hash = btoa(`${state.auth.username}:${state.auth.password}`); - options.headers.authorization = `Basic ${hash}`; - return; - } - - if (state.auth.type === "token") { - options.headers.authorization = `token ${state.auth.token}`; - return; - } - - if (state.auth.type === "app") { - options.headers.authorization = `Bearer ${state.auth.token}`; - const acceptHeaders = options.headers.accept - .split(",") - .concat("application/vnd.github.machine-man-preview+json"); - options.headers.accept = uniq(acceptHeaders) - .filter(Boolean) - .join(","); - return; - } + .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended + // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header + .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; // deprecations - options.url += options.url.indexOf("?") === -1 ? "?" : "&"; + Object.defineProperty(this, "code", { + get() { + logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); + return statusCode; + } - if (state.auth.token) { - options.url += `access_token=${encodeURIComponent(state.auth.token)}`; - return; + }); + Object.defineProperty(this, "headers", { + get() { + logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")); + return headers || {}; + } + + }); } - const key = encodeURIComponent(state.auth.key); - const secret = encodeURIComponent(state.auth.secret); - options.url += `client_id=${key}&client_secret=${secret}`; } +exports.RequestError = RequestError; +//# sourceMappingURL=index.js.map + /***/ }), -/***/ 3691: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 6234: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -module.exports = authenticationPlugin; +"use strict"; -const { Deprecation } = __nccwpck_require__(8932); -const once = __nccwpck_require__(1223); -const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation)); +Object.defineProperty(exports, "__esModule", ({ value: true })); -const authenticate = __nccwpck_require__(795); -const beforeRequest = __nccwpck_require__(7578); -const requestError = __nccwpck_require__(4275); +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -function authenticationPlugin(octokit, options) { - if (options.auth) { - octokit.authenticate = () => { - deprecateAuthenticate( - octokit.log, - new Deprecation( - '[@octokit/rest] octokit.authenticate() is deprecated and has no effect when "auth" option is set on Octokit constructor' - ) - ); - }; - return; - } - const state = { - octokit, - auth: false - }; - octokit.authenticate = authenticate.bind(null, state); - octokit.hook.before("request", beforeRequest.bind(null, state)); - octokit.hook.error("request", requestError.bind(null, state)); +var endpoint = __nccwpck_require__(9440); +var universalUserAgent = __nccwpck_require__(5030); +var isPlainObject = __nccwpck_require__(3287); +var nodeFetch = _interopDefault(__nccwpck_require__(467)); +var requestError = __nccwpck_require__(537); + +const VERSION = "5.6.3"; + +function getBufferResponse(response) { + return response.arrayBuffer(); } +function fetchWrapper(requestOptions) { + const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; -/***/ }), + if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { + requestOptions.body = JSON.stringify(requestOptions.body); + } -/***/ 4275: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + let headers = {}; + let status; + let url; + const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; + return fetch(requestOptions.url, Object.assign({ + method: requestOptions.method, + body: requestOptions.body, + headers: requestOptions.headers, + redirect: requestOptions.redirect + }, // `requestOptions.request.agent` type is incompatible + // see https://github.com/octokit/types.ts/pull/264 + requestOptions.request)).then(async response => { + url = response.url; + status = response.status; -module.exports = authenticationRequestError; + for (const keyAndValue of response.headers) { + headers[keyAndValue[0]] = keyAndValue[1]; + } -const { RequestError } = __nccwpck_require__(6239); + if ("deprecation" in headers) { + const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); + const deprecationLink = matches && matches.pop(); + log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`); + } -function authenticationRequestError(state, error, options) { - /* istanbul ignore next */ - if (!error.headers) throw error; + if (status === 204 || status === 205) { + return; + } // GitHub API returns 200 for HEAD requests - const otpRequired = /required/.test(error.headers["x-github-otp"] || ""); - // handle "2FA required" error only - if (error.status !== 401 || !otpRequired) { - throw error; - } - if ( - error.status === 401 && - otpRequired && - error.request && - error.request.headers["x-github-otp"] - ) { - throw new RequestError( - "Invalid one-time password for two-factor authentication", - 401, - { - headers: error.headers, - request: options + if (requestOptions.method === "HEAD") { + if (status < 400) { + return; } - ); - } - if (typeof state.auth.on2fa !== "function") { - throw new RequestError( - "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication", - 401, - { - headers: error.headers, - request: options - } - ); - } + throw new requestError.RequestError(response.statusText, status, { + response: { + url, + status, + headers, + data: undefined + }, + request: requestOptions + }); + } - return Promise.resolve() - .then(() => { - return state.auth.on2fa(); - }) - .then(oneTimePassword => { - const newOptions = Object.assign(options, { - headers: Object.assign( - { "x-github-otp": oneTimePassword }, - options.headers - ) + if (status === 304) { + throw new requestError.RequestError("Not modified", status, { + response: { + url, + status, + headers, + data: await getResponseData(response) + }, + request: requestOptions }); - return state.octokit.request(newOptions); + } + + if (status >= 400) { + const data = await getResponseData(response); + const error = new requestError.RequestError(toErrorMessage(data), status, { + response: { + url, + status, + headers, + data + }, + request: requestOptions + }); + throw error; + } + + return getResponseData(response); + }).then(data => { + return { + status, + url, + headers, + data + }; + }).catch(error => { + if (error instanceof requestError.RequestError) throw error; + throw new requestError.RequestError(error.message, 500, { + request: requestOptions }); + }); } +async function getResponseData(response) { + const contentType = response.headers.get("content-type"); -/***/ }), + if (/application\/json/.test(contentType)) { + return response.json(); + } -/***/ 9733: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { + return response.text(); + } -module.exports = authenticationBeforeRequest; + return getBufferResponse(response); +} -const btoa = __nccwpck_require__(2358); +function toErrorMessage(data) { + if (typeof data === "string") return data; // istanbul ignore else - just in case -const withAuthorizationPrefix = __nccwpck_require__(9603); + if ("message" in data) { + if (Array.isArray(data.errors)) { + return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; + } -function authenticationBeforeRequest(state, options) { - if (typeof state.auth === "string") { - options.headers.authorization = withAuthorizationPrefix(state.auth); - return; - } + return data.message; + } // istanbul ignore next - just in case - if (state.auth.username) { - const hash = btoa(`${state.auth.username}:${state.auth.password}`); - options.headers.authorization = `Basic ${hash}`; - if (state.otp) { - options.headers["x-github-otp"] = state.otp; - } - return; - } - if (state.auth.clientId) { - // There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as - // Basic Authorization instead of query parameters. The only routes where that applies share the same - // URL though: `/applications/:client_id/tokens/:access_token`. - // - // 1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization) - // 2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization) - // 3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application) - // - // We identify by checking the URL. It must merge both "/applications/:client_id/tokens/:access_token" - // as well as "/applications/123/tokens/token456" - if (/\/applications\/:?[\w_]+\/tokens\/:?[\w_]+($|\?)/.test(options.url)) { - const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`); - options.headers.authorization = `Basic ${hash}`; - return; - } + return `Unknown error: ${JSON.stringify(data)}`; +} + +function withDefaults(oldEndpoint, newDefaults) { + const endpoint = oldEndpoint.defaults(newDefaults); - options.url += options.url.indexOf("?") === -1 ? "?" : "&"; - options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`; - return; - } + const newApi = function (route, parameters) { + const endpointOptions = endpoint.merge(route, parameters); - return Promise.resolve() + if (!endpointOptions.request || !endpointOptions.request.hook) { + return fetchWrapper(endpoint.parse(endpointOptions)); + } - .then(() => { - return state.auth(); - }) + const request = (route, parameters) => { + return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); + }; - .then(authorization => { - options.headers.authorization = withAuthorizationPrefix(authorization); + Object.assign(request, { + endpoint, + defaults: withDefaults.bind(null, endpoint) }); + return endpointOptions.request.hook(request, endpointOptions); + }; + + return Object.assign(newApi, { + endpoint, + defaults: withDefaults.bind(null, endpoint) + }); } +const request = withDefaults(endpoint.endpoint, { + headers: { + "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` + } +}); + +exports.request = request; +//# sourceMappingURL=index.js.map + /***/ }), -/***/ 4555: +/***/ 9351: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = authenticationPlugin; +const { requestLog } = __nccwpck_require__(8883); +const { + restEndpointMethods +} = __nccwpck_require__(3044); -const { createTokenAuth } = __nccwpck_require__(334); -const { Deprecation } = __nccwpck_require__(8932); -const once = __nccwpck_require__(1223); +const Core = __nccwpck_require__(9833); -const beforeRequest = __nccwpck_require__(9733); -const requestError = __nccwpck_require__(3217); -const validate = __nccwpck_require__(8997); -const withAuthorizationPrefix = __nccwpck_require__(9603); +const CORE_PLUGINS = [ + __nccwpck_require__(4555), + __nccwpck_require__(3691), // deprecated: remove in v17 + requestLog, + __nccwpck_require__(8579), + restEndpointMethods, + __nccwpck_require__(2657), -const deprecateAuthBasic = once((log, deprecation) => log.warn(deprecation)); -const deprecateAuthObject = once((log, deprecation) => log.warn(deprecation)); + __nccwpck_require__(2072) // deprecated: remove in v17 +]; -function authenticationPlugin(octokit, options) { - // If `options.authStrategy` is set then use it and pass in `options.auth` - if (options.authStrategy) { - const auth = options.authStrategy(options.auth); - octokit.hook.wrap("request", auth.hook); - octokit.auth = auth; - return; - } +const OctokitRest = Core.plugin(CORE_PLUGINS); - // If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance - // is unauthenticated. The `octokit.auth()` method is a no-op and no request hook is registred. - if (!options.auth) { - octokit.auth = () => - Promise.resolve({ - type: "unauthenticated" - }); - return; - } +function DeprecatedOctokit(options) { + const warn = + options && options.log && options.log.warn + ? options.log.warn + : console.warn; + warn( + '[@octokit/rest] `const Octokit = require("@octokit/rest")` is deprecated. Use `const { Octokit } = require("@octokit/rest")` instead' + ); + return new OctokitRest(options); +} - const isBasicAuthString = - typeof options.auth === "string" && - /^basic/.test(withAuthorizationPrefix(options.auth)); +const Octokit = Object.assign(DeprecatedOctokit, { + Octokit: OctokitRest +}); - // If only `options.auth` is set to a string, use the default token authentication strategy. - if (typeof options.auth === "string" && !isBasicAuthString) { - const auth = createTokenAuth(options.auth); - octokit.hook.wrap("request", auth.hook); - octokit.auth = auth; - return; +Object.keys(OctokitRest).forEach(key => { + /* istanbul ignore else */ + if (OctokitRest.hasOwnProperty(key)) { + Octokit[key] = OctokitRest[key]; } +}); - // Otherwise log a deprecation message - const [deprecationMethod, deprecationMessapge] = isBasicAuthString - ? [ - deprecateAuthBasic, - 'Setting the "new Octokit({ auth })" option to a Basic Auth string is deprecated. Use https://github.com/octokit/auth-basic.js instead. See (https://octokit.github.io/rest.js/#authentication)' - ] - : [ - deprecateAuthObject, - 'Setting the "new Octokit({ auth })" option to an object without also setting the "authStrategy" option is deprecated and will be removed in v17. See (https://octokit.github.io/rest.js/#authentication)' - ]; - deprecationMethod( - octokit.log, - new Deprecation("[@octokit/rest] " + deprecationMessapge) - ); +module.exports = Octokit; - octokit.auth = () => - Promise.resolve({ - type: "deprecated", - message: deprecationMessapge - }); - validate(options.auth); +/***/ }), - const state = { - octokit, - auth: options.auth +/***/ 823: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = Octokit; + +const { request } = __nccwpck_require__(6234); +const Hook = __nccwpck_require__(3682); + +const parseClientOptions = __nccwpck_require__(4613); + +function Octokit(plugins, options) { + options = options || {}; + const hook = new Hook.Collection(); + const log = Object.assign( + { + debug: () => {}, + info: () => {}, + warn: console.warn, + error: console.error + }, + options && options.log + ); + const api = { + hook, + log, + request: request.defaults(parseClientOptions(options, log, hook)) }; - octokit.hook.before("request", beforeRequest.bind(null, state)); - octokit.hook.error("request", requestError.bind(null, state)); + plugins.forEach(pluginFunction => pluginFunction(api, options)); + + return api; } /***/ }), -/***/ 3217: +/***/ 9833: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = authenticationRequestError; +const factory = __nccwpck_require__(5320); -const { RequestError } = __nccwpck_require__(6239); +module.exports = factory(); -function authenticationRequestError(state, error, options) { - if (!error.headers) throw error; - const otpRequired = /required/.test(error.headers["x-github-otp"] || ""); - // handle "2FA required" error only - if (error.status !== 401 || !otpRequired) { - throw error; - } +/***/ }), - if ( - error.status === 401 && - otpRequired && - error.request && - error.request.headers["x-github-otp"] - ) { - if (state.otp) { - delete state.otp; // no longer valid, request again - } else { - throw new RequestError( - "Invalid one-time password for two-factor authentication", - 401, - { - headers: error.headers, - request: options - } - ); - } - } +/***/ 5320: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - if (typeof state.auth.on2fa !== "function") { - throw new RequestError( - "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication", - 401, - { - headers: error.headers, - request: options - } - ); - } +module.exports = factory; - return Promise.resolve() - .then(() => { - return state.auth.on2fa(); - }) - .then(oneTimePassword => { - const newOptions = Object.assign(options, { - headers: Object.assign(options.headers, { - "x-github-otp": oneTimePassword - }) - }); - return state.octokit.request(newOptions).then(response => { - // If OTP still valid, then persist it for following requests - state.otp = oneTimePassword; - return response; - }); - }); +const Octokit = __nccwpck_require__(823); +const registerPlugin = __nccwpck_require__(7826); + +function factory(plugins) { + const Api = Octokit.bind(null, plugins || []); + Api.plugin = registerPlugin.bind(null, plugins || []); + return Api; } -/***/ }), +/***/ }), + +/***/ 4613: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = parseOptions; + +const { Deprecation } = __nccwpck_require__(8932); +const { getUserAgent } = __nccwpck_require__(3318); +const once = __nccwpck_require__(1223); + +const pkg = __nccwpck_require__(9674); + +const deprecateOptionsTimeout = once((log, deprecation) => + log.warn(deprecation) +); +const deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation)); +const deprecateOptionsHeaders = once((log, deprecation) => + log.warn(deprecation) +); + +function parseOptions(options, log, hook) { + if (options.headers) { + options.headers = Object.keys(options.headers).reduce((newObj, key) => { + newObj[key.toLowerCase()] = options.headers[key]; + return newObj; + }, {}); + } + + const clientDefaults = { + headers: options.headers || {}, + request: options.request || {}, + mediaType: { + previews: [], + format: "" + } + }; -/***/ 8997: -/***/ ((module) => { + if (options.baseUrl) { + clientDefaults.baseUrl = options.baseUrl; + } -module.exports = validateAuth; + if (options.userAgent) { + clientDefaults.headers["user-agent"] = options.userAgent; + } -function validateAuth(auth) { - if (typeof auth === "string") { - return; + if (options.previews) { + clientDefaults.mediaType.previews = options.previews; } - if (typeof auth === "function") { - return; + if (options.timeZone) { + clientDefaults.headers["time-zone"] = options.timeZone; } - if (auth.username && auth.password) { - return; + if (options.timeout) { + deprecateOptionsTimeout( + log, + new Deprecation( + "[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request" + ) + ); + clientDefaults.request.timeout = options.timeout; } - if (auth.clientId && auth.clientSecret) { - return; + if (options.agent) { + deprecateOptionsAgent( + log, + new Deprecation( + "[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request" + ) + ); + clientDefaults.request.agent = options.agent; } - throw new Error(`Invalid "auth" option: ${JSON.stringify(auth)}`); + if (options.headers) { + deprecateOptionsHeaders( + log, + new Deprecation( + "[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request" + ) + ); + } + + const userAgentOption = clientDefaults.headers["user-agent"]; + const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`; + + clientDefaults.headers["user-agent"] = [userAgentOption, defaultUserAgent] + .filter(Boolean) + .join(" "); + + clientDefaults.request.hook = hook.bind(null, "request"); + + return clientDefaults; } /***/ }), -/***/ 9603: +/***/ 7826: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = withAuthorizationPrefix; +module.exports = registerPlugin; -const atob = __nccwpck_require__(5224); +const factory = __nccwpck_require__(5320); -const REGEX_IS_BASIC_AUTH = /^[\w-]+:/; +function registerPlugin(plugins, pluginFunction) { + return factory( + plugins.includes(pluginFunction) ? plugins : plugins.concat(pluginFunction) + ); +} -function withAuthorizationPrefix(authorization) { - if (/^(basic|bearer|token) /i.test(authorization)) { - return authorization; - } - try { - if (REGEX_IS_BASIC_AUTH.test(atob(authorization))) { - return `basic ${authorization}`; - } - } catch (error) {} +/***/ }), - if (authorization.split(/\./).length === 3) { - return `bearer ${authorization}`; - } +/***/ 6239: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - return `token ${authorization}`; -} +"use strict"; -/***/ }), +Object.defineProperty(exports, "__esModule", ({ value: true })); -/***/ 8579: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -module.exports = paginatePlugin; +var deprecation = __nccwpck_require__(8932); +var once = _interopDefault(__nccwpck_require__(1223)); -const { paginateRest } = __nccwpck_require__(4193); +const logOnce = once(deprecation => console.warn(deprecation)); +/** + * Error with extra properties to help with debugging + */ -function paginatePlugin(octokit) { - Object.assign(octokit, paginateRest(octokit)); -} +class RequestError extends Error { + constructor(message, statusCode, options) { + super(message); // Maintains proper stack trace (only available on V8) + /* istanbul ignore next */ -/***/ }), + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } -/***/ 2657: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + this.name = "HttpError"; + this.status = statusCode; + Object.defineProperty(this, "code", { + get() { + logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); + return statusCode; + } -module.exports = octokitValidate; + }); + this.headers = options.headers || {}; // redact request credentials without mutating original request options -const validate = __nccwpck_require__(6132); + const requestCopy = Object.assign({}, options.request); + + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") + }); + } + + requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit + // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications + .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended + // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header + .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } -function octokitValidate(octokit) { - octokit.hook.before("request", validate.bind(null, octokit)); } +exports.RequestError = RequestError; +//# sourceMappingURL=index.js.map + /***/ }), -/***/ 6132: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 3318: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -module.exports = validate; +Object.defineProperty(exports, "__esModule", ({ value: true })); -const { RequestError } = __nccwpck_require__(6239); -const get = __nccwpck_require__(9197); -const set = __nccwpck_require__(1552); +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -function validate(octokit, options) { - if (!options.request.validate) { - return; - } - const { validate: params } = options.request; +var osName = _interopDefault(__nccwpck_require__(4824)); - Object.keys(params).forEach(parameterName => { - const parameter = get(params, parameterName); +function getUserAgent() { + try { + return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`; + } catch (error) { + if (/wmic os get Caption/.test(error.message)) { + return "Windows "; + } - const expectedType = parameter.type; - let parentParameterName; - let parentValue; - let parentParamIsPresent = true; - let parentParameterIsArray = false; + throw error; + } +} - if (/\./.test(parameterName)) { - parentParameterName = parameterName.replace(/\.[^.]+$/, ""); - parentParameterIsArray = parentParameterName.slice(-2) === "[]"; - if (parentParameterIsArray) { - parentParameterName = parentParameterName.slice(0, -2); - } - parentValue = get(options, parentParameterName); - parentParamIsPresent = - parentParameterName === "headers" || - (typeof parentValue === "object" && parentValue !== null); - } +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map - const values = parentParameterIsArray - ? (get(options, parentParameterName) || []).map( - value => value[parameterName.split(/\./).pop()] - ) - : [get(options, parameterName)]; - values.forEach((value, i) => { - const valueIsPresent = typeof value !== "undefined"; - const valueIsNull = value === null; - const currentParameterName = parentParameterIsArray - ? parameterName.replace(/\[\]/, `[${i}]`) - : parameterName; +/***/ }), - if (!parameter.required && !valueIsPresent) { - return; - } +/***/ 795: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - // if the parent parameter is of type object but allows null - // then the child parameters can be ignored - if (!parentParamIsPresent) { - return; - } +module.exports = authenticate; - if (parameter.allowNull && valueIsNull) { - return; - } +const { Deprecation } = __nccwpck_require__(8932); +const once = __nccwpck_require__(1223); - if (!parameter.allowNull && valueIsNull) { - throw new RequestError( - `'${currentParameterName}' cannot be null`, - 400, - { - request: options - } - ); - } +const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation)); - if (parameter.required && !valueIsPresent) { - throw new RequestError( - `Empty value for parameter '${currentParameterName}': ${JSON.stringify( - value - )}`, - 400, - { - request: options - } - ); - } +function authenticate(state, options) { + deprecateAuthenticate( + state.octokit.log, + new Deprecation( + '[@octokit/rest] octokit.authenticate() is deprecated. Use "auth" constructor option instead.' + ) + ); - // parse to integer before checking for enum - // so that string "1" will match enum with number 1 - if (expectedType === "integer") { - const unparsedValue = value; - value = parseInt(value, 10); - if (isNaN(value)) { - throw new RequestError( - `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( - unparsedValue - )} is NaN`, - 400, - { - request: options - } - ); - } - } + if (!options) { + state.auth = false; + return; + } - if (parameter.enum && parameter.enum.indexOf(String(value)) === -1) { - throw new RequestError( - `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( - value - )}`, - 400, - { - request: options - } + switch (options.type) { + case "basic": + if (!options.username || !options.password) { + throw new Error( + "Basic authentication requires both a username and password to be set" ); } + break; - if (parameter.validation) { - const regex = new RegExp(parameter.validation); - if (!regex.test(value)) { - throw new RequestError( - `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( - value - )}`, - 400, - { - request: options - } - ); - } + case "oauth": + if (!options.token && !(options.key && options.secret)) { + throw new Error( + "OAuth2 authentication requires a token or key & secret to be set" + ); } + break; - if (expectedType === "object" && typeof value === "string") { - try { - value = JSON.parse(value); - } catch (exception) { - throw new RequestError( - `JSON parse error of value for parameter '${currentParameterName}': ${JSON.stringify( - value - )}`, - 400, - { - request: options - } - ); - } + case "token": + case "app": + if (!options.token) { + throw new Error("Token authentication requires a token to be set"); } + break; - set(options, parameter.mapTo || currentParameterName, value); - }); - }); + default: + throw new Error( + "Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'" + ); + } - return options; + state.auth = options; } /***/ }), -/***/ 5224: -/***/ ((module) => { +/***/ 7578: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = function atob(str) { - return Buffer.from(str, 'base64').toString('binary') +module.exports = authenticationBeforeRequest; + +const btoa = __nccwpck_require__(2358); +const uniq = __nccwpck_require__(8216); + +function authenticationBeforeRequest(state, options) { + if (!state.auth.type) { + return; + } + + if (state.auth.type === "basic") { + const hash = btoa(`${state.auth.username}:${state.auth.password}`); + options.headers.authorization = `Basic ${hash}`; + return; + } + + if (state.auth.type === "token") { + options.headers.authorization = `token ${state.auth.token}`; + return; + } + + if (state.auth.type === "app") { + options.headers.authorization = `Bearer ${state.auth.token}`; + const acceptHeaders = options.headers.accept + .split(",") + .concat("application/vnd.github.machine-man-preview+json"); + options.headers.accept = uniq(acceptHeaders) + .filter(Boolean) + .join(","); + return; + } + + options.url += options.url.indexOf("?") === -1 ? "?" : "&"; + + if (state.auth.token) { + options.url += `access_token=${encodeURIComponent(state.auth.token)}`; + return; + } + + const key = encodeURIComponent(state.auth.key); + const secret = encodeURIComponent(state.auth.secret); + options.url += `client_id=${key}&client_secret=${secret}`; } /***/ }), -/***/ 3682: +/***/ 3691: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var register = __nccwpck_require__(4670) -var addHook = __nccwpck_require__(5549) -var removeHook = __nccwpck_require__(6819) +module.exports = authenticationPlugin; -// bind with array of arguments: https://stackoverflow.com/a/21792913 -var bind = Function.bind -var bindable = bind.bind(bind) +const { Deprecation } = __nccwpck_require__(8932); +const once = __nccwpck_require__(1223); -function bindApi (hook, state, name) { - var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]) - hook.api = { remove: removeHookRef } - hook.remove = removeHookRef +const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation)); - ;['before', 'error', 'after', 'wrap'].forEach(function (kind) { - var args = name ? [state, kind, name] : [state, kind] - hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args) - }) -} +const authenticate = __nccwpck_require__(795); +const beforeRequest = __nccwpck_require__(7578); +const requestError = __nccwpck_require__(4275); -function HookSingular () { - var singularHookName = 'h' - var singularHookState = { - registry: {} +function authenticationPlugin(octokit, options) { + if (options.auth) { + octokit.authenticate = () => { + deprecateAuthenticate( + octokit.log, + new Deprecation( + '[@octokit/rest] octokit.authenticate() is deprecated and has no effect when "auth" option is set on Octokit constructor' + ) + ); + }; + return; } - var singularHook = register.bind(null, singularHookState, singularHookName) - bindApi(singularHook, singularHookState, singularHookName) - return singularHook + const state = { + octokit, + auth: false + }; + octokit.authenticate = authenticate.bind(null, state); + octokit.hook.before("request", beforeRequest.bind(null, state)); + octokit.hook.error("request", requestError.bind(null, state)); } -function HookCollection () { - var state = { - registry: {} - } - var hook = register.bind(null, state) - bindApi(hook, state) +/***/ }), - return hook -} +/***/ 4275: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var collectionHookDeprecationMessageDisplayed = false -function Hook () { - if (!collectionHookDeprecationMessageDisplayed) { - console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4') - collectionHookDeprecationMessageDisplayed = true +module.exports = authenticationRequestError; + +const { RequestError } = __nccwpck_require__(6239); + +function authenticationRequestError(state, error, options) { + /* istanbul ignore next */ + if (!error.headers) throw error; + + const otpRequired = /required/.test(error.headers["x-github-otp"] || ""); + // handle "2FA required" error only + if (error.status !== 401 || !otpRequired) { + throw error; } - return HookCollection() + + if ( + error.status === 401 && + otpRequired && + error.request && + error.request.headers["x-github-otp"] + ) { + throw new RequestError( + "Invalid one-time password for two-factor authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } + + if (typeof state.auth.on2fa !== "function") { + throw new RequestError( + "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } + + return Promise.resolve() + .then(() => { + return state.auth.on2fa(); + }) + .then(oneTimePassword => { + const newOptions = Object.assign(options, { + headers: Object.assign( + { "x-github-otp": oneTimePassword }, + options.headers + ) + }); + return state.octokit.request(newOptions); + }); } -Hook.Singular = HookSingular.bind() -Hook.Collection = HookCollection.bind() -module.exports = Hook -// expose constructors as a named property for TypeScript -module.exports.Hook = Hook -module.exports.Singular = Hook.Singular -module.exports.Collection = Hook.Collection +/***/ }), +/***/ 9733: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -/***/ }), +module.exports = authenticationBeforeRequest; -/***/ 5549: -/***/ ((module) => { +const btoa = __nccwpck_require__(2358); -module.exports = addHook; +const withAuthorizationPrefix = __nccwpck_require__(9603); -function addHook(state, kind, name, hook) { - var orig = hook; - if (!state.registry[name]) { - state.registry[name] = []; +function authenticationBeforeRequest(state, options) { + if (typeof state.auth === "string") { + options.headers.authorization = withAuthorizationPrefix(state.auth); + return; } - if (kind === "before") { - hook = function (method, options) { - return Promise.resolve() - .then(orig.bind(null, options)) - .then(method.bind(null, options)); - }; + if (state.auth.username) { + const hash = btoa(`${state.auth.username}:${state.auth.password}`); + options.headers.authorization = `Basic ${hash}`; + if (state.otp) { + options.headers["x-github-otp"] = state.otp; + } + return; } - if (kind === "after") { - hook = function (method, options) { - var result; - return Promise.resolve() - .then(method.bind(null, options)) - .then(function (result_) { - result = result_; - return orig(result, options); - }) - .then(function () { - return result; - }); - }; - } + if (state.auth.clientId) { + // There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as + // Basic Authorization instead of query parameters. The only routes where that applies share the same + // URL though: `/applications/:client_id/tokens/:access_token`. + // + // 1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization) + // 2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization) + // 3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application) + // + // We identify by checking the URL. It must merge both "/applications/:client_id/tokens/:access_token" + // as well as "/applications/123/tokens/token456" + if (/\/applications\/:?[\w_]+\/tokens\/:?[\w_]+($|\?)/.test(options.url)) { + const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`); + options.headers.authorization = `Basic ${hash}`; + return; + } - if (kind === "error") { - hook = function (method, options) { - return Promise.resolve() - .then(method.bind(null, options)) - .catch(function (error) { - return orig(error, options); - }); - }; + options.url += options.url.indexOf("?") === -1 ? "?" : "&"; + options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`; + return; } - state.registry[name].push({ - hook: hook, - orig: orig, - }); + return Promise.resolve() + + .then(() => { + return state.auth(); + }) + + .then(authorization => { + options.headers.authorization = withAuthorizationPrefix(authorization); + }); } /***/ }), -/***/ 4670: -/***/ ((module) => { +/***/ 4555: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = register; +module.exports = authenticationPlugin; -function register(state, name, method, options) { - if (typeof method !== "function") { - throw new Error("method for before hook must be a function"); +const { createTokenAuth } = __nccwpck_require__(334); +const { Deprecation } = __nccwpck_require__(8932); +const once = __nccwpck_require__(1223); + +const beforeRequest = __nccwpck_require__(9733); +const requestError = __nccwpck_require__(3217); +const validate = __nccwpck_require__(8997); +const withAuthorizationPrefix = __nccwpck_require__(9603); + +const deprecateAuthBasic = once((log, deprecation) => log.warn(deprecation)); +const deprecateAuthObject = once((log, deprecation) => log.warn(deprecation)); + +function authenticationPlugin(octokit, options) { + // If `options.authStrategy` is set then use it and pass in `options.auth` + if (options.authStrategy) { + const auth = options.authStrategy(options.auth); + octokit.hook.wrap("request", auth.hook); + octokit.auth = auth; + return; } - if (!options) { - options = {}; + // If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance + // is unauthenticated. The `octokit.auth()` method is a no-op and no request hook is registred. + if (!options.auth) { + octokit.auth = () => + Promise.resolve({ + type: "unauthenticated" + }); + return; } - if (Array.isArray(name)) { - return name.reverse().reduce(function (callback, name) { - return register.bind(null, state, name, callback, options); - }, method)(); + const isBasicAuthString = + typeof options.auth === "string" && + /^basic/.test(withAuthorizationPrefix(options.auth)); + + // If only `options.auth` is set to a string, use the default token authentication strategy. + if (typeof options.auth === "string" && !isBasicAuthString) { + const auth = createTokenAuth(options.auth); + octokit.hook.wrap("request", auth.hook); + octokit.auth = auth; + return; } - return Promise.resolve().then(function () { - if (!state.registry[name]) { - return method(options); - } + // Otherwise log a deprecation message + const [deprecationMethod, deprecationMessapge] = isBasicAuthString + ? [ + deprecateAuthBasic, + 'Setting the "new Octokit({ auth })" option to a Basic Auth string is deprecated. Use https://github.com/octokit/auth-basic.js instead. See (https://octokit.github.io/rest.js/#authentication)' + ] + : [ + deprecateAuthObject, + 'Setting the "new Octokit({ auth })" option to an object without also setting the "authStrategy" option is deprecated and will be removed in v17. See (https://octokit.github.io/rest.js/#authentication)' + ]; + deprecationMethod( + octokit.log, + new Deprecation("[@octokit/rest] " + deprecationMessapge) + ); - return state.registry[name].reduce(function (method, registered) { - return registered.hook.bind(null, method, options); - }, method)(); - }); + octokit.auth = () => + Promise.resolve({ + type: "deprecated", + message: deprecationMessapge + }); + + validate(options.auth); + + const state = { + octokit, + auth: options.auth + }; + + octokit.hook.before("request", beforeRequest.bind(null, state)); + octokit.hook.error("request", requestError.bind(null, state)); } /***/ }), -/***/ 6819: -/***/ ((module) => { +/***/ 3217: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = removeHook; +module.exports = authenticationRequestError; -function removeHook(state, name, method) { - if (!state.registry[name]) { - return; - } +const { RequestError } = __nccwpck_require__(6239); - var index = state.registry[name] - .map(function (registered) { - return registered.orig; - }) - .indexOf(method); +function authenticationRequestError(state, error, options) { + if (!error.headers) throw error; - if (index === -1) { - return; + const otpRequired = /required/.test(error.headers["x-github-otp"] || ""); + // handle "2FA required" error only + if (error.status !== 401 || !otpRequired) { + throw error; } - state.registry[name].splice(index, 1); -} - - -/***/ }), + if ( + error.status === 401 && + otpRequired && + error.request && + error.request.headers["x-github-otp"] + ) { + if (state.otp) { + delete state.otp; // no longer valid, request again + } else { + throw new RequestError( + "Invalid one-time password for two-factor authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } + } -/***/ 2358: -/***/ ((module) => { + if (typeof state.auth.on2fa !== "function") { + throw new RequestError( + "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } -module.exports = function btoa(str) { - return new Buffer(str).toString('base64') + return Promise.resolve() + .then(() => { + return state.auth.on2fa(); + }) + .then(oneTimePassword => { + const newOptions = Object.assign(options, { + headers: Object.assign(options.headers, { + "x-github-otp": oneTimePassword + }) + }); + return state.octokit.request(newOptions).then(response => { + // If OTP still valid, then persist it for following requests + state.otp = oneTimePassword; + return response; + }); + }); } /***/ }), -/***/ 8932: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - +/***/ 8997: +/***/ ((module) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); +module.exports = validateAuth; -class Deprecation extends Error { - constructor(message) { - super(message); // Maintains proper stack trace (only available on V8) +function validateAuth(auth) { + if (typeof auth === "string") { + return; + } - /* istanbul ignore next */ + if (typeof auth === "function") { + return; + } - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } + if (auth.username && auth.password) { + return; + } - this.name = 'Deprecation'; + if (auth.clientId && auth.clientSecret) { + return; } + throw new Error(`Invalid "auth" option: ${JSON.stringify(auth)}`); } -exports.Deprecation = Deprecation; - /***/ }), -/***/ 1205: +/***/ 9603: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var once = __nccwpck_require__(1223); - -var noop = function() {}; +module.exports = withAuthorizationPrefix; -var isRequest = function(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -}; +const atob = __nccwpck_require__(5224); -var isChildProcess = function(stream) { - return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 -}; +const REGEX_IS_BASIC_AUTH = /^[\w-]+:/; -var eos = function(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; +function withAuthorizationPrefix(authorization) { + if (/^(basic|bearer|token) /i.test(authorization)) { + return authorization; + } - callback = once(callback || noop); + try { + if (REGEX_IS_BASIC_AUTH.test(atob(authorization))) { + return `basic ${authorization}`; + } + } catch (error) {} - var ws = stream._writableState; - var rs = stream._readableState; - var readable = opts.readable || (opts.readable !== false && stream.readable); - var writable = opts.writable || (opts.writable !== false && stream.writable); - var cancelled = false; + if (authorization.split(/\./).length === 3) { + return `bearer ${authorization}`; + } - var onlegacyfinish = function() { - if (!stream.writable) onfinish(); - }; + return `token ${authorization}`; +} - var onfinish = function() { - writable = false; - if (!readable) callback.call(stream); - }; - var onend = function() { - readable = false; - if (!writable) callback.call(stream); - }; +/***/ }), - var onexit = function(exitCode) { - callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); - }; +/***/ 8579: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - var onerror = function(err) { - callback.call(stream, err); - }; +module.exports = paginatePlugin; - var onclose = function() { - process.nextTick(onclosenexttick); - }; +const { paginateRest } = __nccwpck_require__(4193); - var onclosenexttick = function() { - if (cancelled) return; - if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); - if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); - }; +function paginatePlugin(octokit) { + Object.assign(octokit, paginateRest(octokit)); +} - var onrequest = function() { - stream.req.on('finish', onfinish); - }; - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest(); - else stream.on('request', onrequest); - } else if (writable && !ws) { // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } +/***/ }), - if (isChildProcess(stream)) stream.on('exit', onexit); +/***/ 2657: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); +module.exports = octokitValidate; - return function() { - cancelled = true; - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('exit', onexit); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -}; +const validate = __nccwpck_require__(6132); -module.exports = eos; +function octokitValidate(octokit) { + octokit.hook.before("request", validate.bind(null, octokit)); +} /***/ }), -/***/ 1585: +/***/ 6132: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const {PassThrough} = __nccwpck_require__(2413); -module.exports = options => { - options = Object.assign({}, options); +module.exports = validate; - const {array} = options; - let {encoding} = options; - const buffer = encoding === 'buffer'; - let objectMode = false; +const { RequestError } = __nccwpck_require__(6239); +const get = __nccwpck_require__(9197); +const set = __nccwpck_require__(1552); - if (array) { - objectMode = !(encoding || buffer); - } else { - encoding = encoding || 'utf8'; - } +function validate(octokit, options) { + if (!options.request.validate) { + return; + } + const { validate: params } = options.request; - if (buffer) { - encoding = null; - } + Object.keys(params).forEach(parameterName => { + const parameter = get(params, parameterName); - let len = 0; - const ret = []; - const stream = new PassThrough({objectMode}); + const expectedType = parameter.type; + let parentParameterName; + let parentValue; + let parentParamIsPresent = true; + let parentParameterIsArray = false; - if (encoding) { - stream.setEncoding(encoding); - } + if (/\./.test(parameterName)) { + parentParameterName = parameterName.replace(/\.[^.]+$/, ""); + parentParameterIsArray = parentParameterName.slice(-2) === "[]"; + if (parentParameterIsArray) { + parentParameterName = parentParameterName.slice(0, -2); + } + parentValue = get(options, parentParameterName); + parentParamIsPresent = + parentParameterName === "headers" || + (typeof parentValue === "object" && parentValue !== null); + } - stream.on('data', chunk => { - ret.push(chunk); + const values = parentParameterIsArray + ? (get(options, parentParameterName) || []).map( + value => value[parameterName.split(/\./).pop()] + ) + : [get(options, parameterName)]; - if (objectMode) { - len = ret.length; - } else { - len += chunk.length; - } - }); + values.forEach((value, i) => { + const valueIsPresent = typeof value !== "undefined"; + const valueIsNull = value === null; + const currentParameterName = parentParameterIsArray + ? parameterName.replace(/\[\]/, `[${i}]`) + : parameterName; - stream.getBufferedValue = () => { - if (array) { - return ret; - } + if (!parameter.required && !valueIsPresent) { + return; + } - return buffer ? Buffer.concat(ret, len) : ret.join(''); - }; + // if the parent parameter is of type object but allows null + // then the child parameters can be ignored + if (!parentParamIsPresent) { + return; + } - stream.getBufferedLength = () => len; + if (parameter.allowNull && valueIsNull) { + return; + } - return stream; -}; + if (!parameter.allowNull && valueIsNull) { + throw new RequestError( + `'${currentParameterName}' cannot be null`, + 400, + { + request: options + } + ); + } + + if (parameter.required && !valueIsPresent) { + throw new RequestError( + `Empty value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } + // parse to integer before checking for enum + // so that string "1" will match enum with number 1 + if (expectedType === "integer") { + const unparsedValue = value; + value = parseInt(value, 10); + if (isNaN(value)) { + throw new RequestError( + `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( + unparsedValue + )} is NaN`, + 400, + { + request: options + } + ); + } + } -/***/ }), + if (parameter.enum && parameter.enum.indexOf(String(value)) === -1) { + throw new RequestError( + `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } -/***/ 1766: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + if (parameter.validation) { + const regex = new RegExp(parameter.validation); + if (!regex.test(value)) { + throw new RequestError( + `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } + } -"use strict"; + if (expectedType === "object" && typeof value === "string") { + try { + value = JSON.parse(value); + } catch (exception) { + throw new RequestError( + `JSON parse error of value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } + } -const pump = __nccwpck_require__(8341); -const bufferStream = __nccwpck_require__(1585); + set(options, parameter.mapTo || currentParameterName, value); + }); + }); -class MaxBufferError extends Error { - constructor() { - super('maxBuffer exceeded'); - this.name = 'MaxBufferError'; - } + return options; } -function getStream(inputStream, options) { - if (!inputStream) { - return Promise.reject(new Error('Expected a stream')); - } - - options = Object.assign({maxBuffer: Infinity}, options); - - const {maxBuffer} = options; - - let stream; - return new Promise((resolve, reject) => { - const rejectPromise = error => { - if (error) { // A null check - error.bufferedData = stream.getBufferedValue(); - } - reject(error); - }; - stream = pump(inputStream, bufferStream(options), error => { - if (error) { - rejectPromise(error); - return; - } +/***/ }), - resolve(); - }); +/***/ 5224: +/***/ ((module) => { - stream.on('data', () => { - if (stream.getBufferedLength() > maxBuffer) { - rejectPromise(new MaxBufferError()); - } - }); - }).then(() => stream.getBufferedValue()); +module.exports = function atob(str) { + return Buffer.from(str, 'base64').toString('binary') } -module.exports = getStream; -module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'})); -module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true})); -module.exports.MaxBufferError = MaxBufferError; - /***/ }), -/***/ 3287: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; +/***/ 3682: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +var register = __nccwpck_require__(4670) +var addHook = __nccwpck_require__(5549) +var removeHook = __nccwpck_require__(6819) -Object.defineProperty(exports, "__esModule", ({ value: true })); +// bind with array of arguments: https://stackoverflow.com/a/21792913 +var bind = Function.bind +var bindable = bind.bind(bind) -/*! - * is-plain-object - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ +function bindApi (hook, state, name) { + var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]) + hook.api = { remove: removeHookRef } + hook.remove = removeHookRef -function isObject(o) { - return Object.prototype.toString.call(o) === '[object Object]'; + ;['before', 'error', 'after', 'wrap'].forEach(function (kind) { + var args = name ? [state, kind, name] : [state, kind] + hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args) + }) } -function isPlainObject(o) { - var ctor,prot; +function HookSingular () { + var singularHookName = 'h' + var singularHookState = { + registry: {} + } + var singularHook = register.bind(null, singularHookState, singularHookName) + bindApi(singularHook, singularHookState, singularHookName) + return singularHook +} - if (isObject(o) === false) return false; +function HookCollection () { + var state = { + registry: {} + } - // If has modified constructor - ctor = o.constructor; - if (ctor === undefined) return true; + var hook = register.bind(null, state) + bindApi(hook, state) - // If has modified prototype - prot = ctor.prototype; - if (isObject(prot) === false) return false; + return hook +} - // If constructor does not have an Object-specific method - if (prot.hasOwnProperty('isPrototypeOf') === false) { - return false; +var collectionHookDeprecationMessageDisplayed = false +function Hook () { + if (!collectionHookDeprecationMessageDisplayed) { + console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4') + collectionHookDeprecationMessageDisplayed = true } - - // Most likely a plain Object - return true; + return HookCollection() } -exports.isPlainObject = isPlainObject; - - -/***/ }), +Hook.Singular = HookSingular.bind() +Hook.Collection = HookCollection.bind() -/***/ 7126: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +module.exports = Hook +// expose constructors as a named property for TypeScript +module.exports.Hook = Hook +module.exports.Singular = Hook.Singular +module.exports.Collection = Hook.Collection -var fs = __nccwpck_require__(5747) -var core -if (process.platform === 'win32' || global.TESTING_WINDOWS) { - core = __nccwpck_require__(2001) -} else { - core = __nccwpck_require__(9728) -} -module.exports = isexe -isexe.sync = sync +/***/ }), -function isexe (path, options, cb) { - if (typeof options === 'function') { - cb = options - options = {} - } +/***/ 5549: +/***/ ((module) => { - if (!cb) { - if (typeof Promise !== 'function') { - throw new TypeError('callback not provided') - } +module.exports = addHook; - return new Promise(function (resolve, reject) { - isexe(path, options || {}, function (er, is) { - if (er) { - reject(er) - } else { - resolve(is) - } - }) - }) +function addHook(state, kind, name, hook) { + var orig = hook; + if (!state.registry[name]) { + state.registry[name] = []; } - core(path, options || {}, function (er, is) { - // ignore EACCES because that just means we aren't allowed to run it - if (er) { - if (er.code === 'EACCES' || options && options.ignoreErrors) { - er = null - is = false - } - } - cb(er, is) - }) -} - -function sync (path, options) { - // my kingdom for a filtered catch - try { - return core.sync(path, options || {}) - } catch (er) { - if (options && options.ignoreErrors || er.code === 'EACCES') { - return false - } else { - throw er - } + if (kind === "before") { + hook = function (method, options) { + return Promise.resolve() + .then(orig.bind(null, options)) + .then(method.bind(null, options)); + }; } -} + if (kind === "after") { + hook = function (method, options) { + var result; + return Promise.resolve() + .then(method.bind(null, options)) + .then(function (result_) { + result = result_; + return orig(result, options); + }) + .then(function () { + return result; + }); + }; + } -/***/ }), - -/***/ 9728: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + if (kind === "error") { + hook = function (method, options) { + return Promise.resolve() + .then(method.bind(null, options)) + .catch(function (error) { + return orig(error, options); + }); + }; + } -module.exports = isexe -isexe.sync = sync + state.registry[name].push({ + hook: hook, + orig: orig, + }); +} -var fs = __nccwpck_require__(5747) -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, options)) - }) -} +/***/ }), -function sync (path, options) { - return checkStat(fs.statSync(path), options) -} +/***/ 4670: +/***/ ((module) => { -function checkStat (stat, options) { - return stat.isFile() && checkMode(stat, options) -} +module.exports = register; -function checkMode (stat, options) { - var mod = stat.mode - var uid = stat.uid - var gid = stat.gid +function register(state, name, method, options) { + if (typeof method !== "function") { + throw new Error("method for before hook must be a function"); + } - var myUid = options.uid !== undefined ? - options.uid : process.getuid && process.getuid() - var myGid = options.gid !== undefined ? - options.gid : process.getgid && process.getgid() + if (!options) { + options = {}; + } - var u = parseInt('100', 8) - var g = parseInt('010', 8) - var o = parseInt('001', 8) - var ug = u | g + if (Array.isArray(name)) { + return name.reverse().reduce(function (callback, name) { + return register.bind(null, state, name, callback, options); + }, method)(); + } - var ret = (mod & o) || - (mod & g) && gid === myGid || - (mod & u) && uid === myUid || - (mod & ug) && myUid === 0 + return Promise.resolve().then(function () { + if (!state.registry[name]) { + return method(options); + } - return ret + return state.registry[name].reduce(function (method, registered) { + return registered.hook.bind(null, method, options); + }, method)(); + }); } /***/ }), -/***/ 2001: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 6819: +/***/ ((module) => { -module.exports = isexe -isexe.sync = sync +module.exports = removeHook; -var fs = __nccwpck_require__(5747) +function removeHook(state, name, method) { + if (!state.registry[name]) { + return; + } -function checkPathExt (path, options) { - var pathext = options.pathExt !== undefined ? - options.pathExt : process.env.PATHEXT + var index = state.registry[name] + .map(function (registered) { + return registered.orig; + }) + .indexOf(method); - if (!pathext) { - return true + if (index === -1) { + return; } - pathext = pathext.split(';') - if (pathext.indexOf('') !== -1) { - return true - } - for (var i = 0; i < pathext.length; i++) { - var p = pathext[i].toLowerCase() - if (p && path.substr(-p.length).toLowerCase() === p) { - return true - } - } - return false + state.registry[name].splice(index, 1); } -function checkStat (stat, path, options) { - if (!stat.isSymbolicLink() && !stat.isFile()) { - return false - } - return checkPathExt(path, options) -} -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, path, options)) - }) -} +/***/ }), -function sync (path, options) { - return checkStat(fs.statSync(path), path, options) +/***/ 2358: +/***/ ((module) => { + +module.exports = function btoa(str) { + return new Buffer(str).toString('base64') } /***/ }), -/***/ 9197: -/***/ ((module) => { +/***/ 8932: +/***/ ((__unused_webpack_module, exports) => { -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ +"use strict"; -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; +Object.defineProperty(exports, "__esModule", ({ value: true })); -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; +class Deprecation extends Error { + constructor(message) { + super(message); // Maintains proper stack trace (only available on V8) -/** `Object#toString` result references. */ -var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - symbolTag = '[object Symbol]'; + /* istanbul ignore next */ -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + this.name = 'Deprecation'; + } -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; +} -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; +exports.Deprecation = Deprecation; -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +/***/ }), -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); +/***/ 1205: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} +var once = __nccwpck_require__(1223); -/** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ -function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; -} +var noop = function() {}; -/** Used for built-in method references. */ -var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; +var isRequest = function(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +}; -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; +var isChildProcess = function(stream) { + return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 +}; + +var eos = function(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + + callback = once(callback || noop); + + var ws = stream._writableState; + var rs = stream._readableState; + var readable = opts.readable || (opts.readable !== false && stream.readable); + var writable = opts.writable || (opts.writable !== false && stream.writable); + var cancelled = false; -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); + var onlegacyfinish = function() { + if (!stream.writable) onfinish(); + }; -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; + var onfinish = function() { + writable = false; + if (!readable) callback.call(stream); + }; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + var onend = function() { + readable = false; + if (!writable) callback.call(stream); + }; -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; + var onexit = function(exitCode) { + callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); + }; -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); + var onerror = function(err) { + callback.call(stream, err); + }; -/** Built-in value references. */ -var Symbol = root.Symbol, - splice = arrayProto.splice; + var onclose = function() { + process.nextTick(onclosenexttick); + }; -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'), - nativeCreate = getNative(Object, 'create'); + var onclosenexttick = function() { + if (cancelled) return; + if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); + if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); + }; -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; + var onrequest = function() { + stream.req.on('finish', onfinish); + }; -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); + else stream.on('request', onrequest); + } else if (writable && !ws) { // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} + if (isChildProcess(stream)) stream.on('exit', onexit); -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; -} + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - return this.has(key) && delete this.__data__[key]; -} + return function() { + cancelled = true; + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('exit', onexit); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +}; -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} +module.exports = eos; -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); -} -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} +/***/ }), -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; +/***/ 1585: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; +"use strict"; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} +const {PassThrough} = __nccwpck_require__(2413); -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; -} +module.exports = options => { + options = Object.assign({}, options); -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + const {array} = options; + let {encoding} = options; + const buffer = encoding === 'buffer'; + let objectMode = false; - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - return true; -} + if (array) { + objectMode = !(encoding || buffer); + } else { + encoding = encoding || 'utf8'; + } -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + if (buffer) { + encoding = null; + } - return index < 0 ? undefined : data[index][1]; -} + let len = 0; + const ret = []; + const stream = new PassThrough({objectMode}); -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} + if (encoding) { + stream.setEncoding(encoding); + } -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); + stream.on('data', chunk => { + ret.push(chunk); - if (index < 0) { - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} + if (objectMode) { + len = ret.length; + } else { + len += chunk.length; + } + }); -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; + stream.getBufferedValue = () => { + if (array) { + return ret; + } -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; + return buffer ? Buffer.concat(ret, len) : ret.join(''); + }; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} + stream.getBufferedLength = () => len; -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} + return stream; +}; -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - return getMapData(this, key)['delete'](key); -} -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} +/***/ }), -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} +/***/ 1766: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - getMapData(this, key).set(key, value); - return this; -} +"use strict"; -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; +const pump = __nccwpck_require__(8341); +const bufferStream = __nccwpck_require__(1585); -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; +class MaxBufferError extends Error { + constructor() { + super('maxBuffer exceeded'); + this.name = 'MaxBufferError'; + } } -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); +function getStream(inputStream, options) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } - var index = 0, - length = path.length; + options = Object.assign({maxBuffer: Infinity}, options); - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} + const {maxBuffer} = options; -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} + let stream; + return new Promise((resolve, reject) => { + const rejectPromise = error => { + if (error) { // A null check + error.bufferedData = stream.getBufferedValue(); + } + reject(error); + }; -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + stream = pump(inputStream, bufferStream(options), error => { + if (error) { + rejectPromise(error); + return; + } + + resolve(); + }); + + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + rejectPromise(new MaxBufferError()); + } + }); + }).then(() => stream.getBufferedValue()); } -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value) { - return isArray(value) ? value : stringToPath(value); -} +module.exports = getStream; +module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'})); +module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true})); +module.exports.MaxBufferError = MaxBufferError; -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} -/** - * Gets the native function at `key` of `object`. +/***/ }), + +/***/ 3287: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +/*! + * is-plain-object * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; + +function isObject(o) { + return Object.prototype.toString.call(o) === '[object Object]'; } -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { +function isPlainObject(o) { + var ctor,prot; + + if (isObject(o) === false) return false; + + // If has modified constructor + ctor = o.constructor; + if (ctor === undefined) return true; + + // If has modified prototype + prot = ctor.prototype; + if (isObject(prot) === false) return false; + + // If constructor does not have an Object-specific method + if (prot.hasOwnProperty('isPrototypeOf') === false) { return false; } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); + // Most likely a plain Object + return true; } -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} +exports.isPlainObject = isPlainObject; -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoize(function(string) { - string = toString(string); - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); +/***/ }), -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +/***/ 7126: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var fs = __nccwpck_require__(5747) +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = __nccwpck_require__(2001) +} else { + core = __nccwpck_require__(9728) } -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} } - return ''; -} -/** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ -function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - if (cache.has(key)) { - return cache.get(key); + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; + } } -// Assign cache to `_.memoize`. -memoize.Cache = MapCache; -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} +/***/ }), -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; +/***/ 9728: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; +module.exports = isexe +isexe.sync = sync + +var fs = __nccwpck_require__(5747) + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) } -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); +function sync (path, options) { + return checkStat(fs.statSync(path), options) } -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) } -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret } -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {string} Returns the string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); + +/***/ }), + +/***/ 2001: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = isexe +isexe.sync = sync + +var fs = __nccwpck_require__(5747) + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false } -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) } -module.exports = get; +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} /***/ }), -/***/ 1552: +/***/ 9197: /***/ ((module) => { /** @@ -18386,8 +18545,7 @@ var FUNC_ERROR_TEXT = 'Expected a function'; var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; +var INFINITY = 1 / 0; /** `Object#toString` result references. */ var funcTag = '[object Function]', @@ -18412,9 +18570,6 @@ var reEscapeChar = /\\(\\)?/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; @@ -18804,24 +18959,6 @@ MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } -} - /** * Gets the index at which the `key` is found in `array` of key-value pairs. * @@ -18840,6 +18977,26 @@ function assocIndexOf(array, key) { return -1; } +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + /** * The base implementation of `_.isNative` without bad shim checks. * @@ -18856,46 +19013,6 @@ function baseIsNative(value) { return pattern.test(toSource(value)); } -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} - /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. @@ -18955,21 +19072,6 @@ function getNative(object, key) { return baseIsNative(value) ? value : undefined; } -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); -} - /** * Checks if `value` is a property name and not a property path. * @@ -19328,43 +19430,41 @@ function toString(value) { } /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 + * _.get(object, 'a[0].b.c'); + * // => 3 * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' */ -function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; } -module.exports = set; +module.exports = get; /***/ }), -/***/ 8216: +/***/ 1552: /***/ ((module) => { /** @@ -19376,141 +19476,50 @@ module.exports = set; * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; /** `Object#toString` result references. */ var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]'; - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; -} - -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return baseFindIndex(array, baseIsNaN, fromIndex); - } - var index = fromIndex - 1, - length = array.length; +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; -/** - * Checks if a cache value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); /** * Gets the value at `key` of `object`. @@ -19543,23 +19552,6 @@ function isHostObject(value) { return result; } -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - /** Used for built-in method references. */ var arrayProto = Array.prototype, funcProto = Function.prototype, @@ -19594,13 +19586,17 @@ var reIsNative = RegExp('^' + ); /** Built-in value references. */ -var splice = arrayProto.splice; +var Symbol = root.Symbol, + splice = arrayProto.splice; /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'), - Set = getNative(root, 'Set'), nativeCreate = getNative(Object, 'create'); +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + /** * Creates a hash object. * @@ -19906,55 +19902,23 @@ MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; /** - * - * Creates an array cache object to store unique values. + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. * * @private - * @constructor - * @param {Array} [values] The values to cache. + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. */ -function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; } } -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - /** * Gets the index at which the `key` is found in `array` of key-value pairs. * @@ -19990,76 +19954,75 @@ function baseIsNative(value) { } /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * The base implementation of `_.set`. * * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. */ -function baseUniq(array, iteratee, comparator) { +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = isKey(path, object) ? [path] : castPath(path); + var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; + length = path.length, + lastIndex = length - 1, + nested = object; - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); } - result.push(value); } + assignValue(nested, key, newValue); + nested = nested[key]; } - return result; + return object; } /** - * Creates a set object of `values`. + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. * * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. */ -var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); -}; +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} /** * Gets the data for `map`. @@ -20089,6 +20052,42 @@ function getNative(object, key) { return baseIsNative(value) ? value : undefined; } +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + /** * Checks if `value` is suitable for use as unique object key. * @@ -20114,6 +20113,41 @@ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + /** * Converts `func` to its source code. * @@ -20134,28 +20168,72 @@ function toSource(func) { } /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each - * element is kept. + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. * @example * - * _.uniq([2, 1, 2]); - * // => [2, 1] + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; */ -function uniq(array) { - return (array && array.length) - ? baseUniq(array) - : []; +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; } +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -20192,6 +20270,31 @@ function eq(value, other) { return value === other || (value !== value && other !== other); } +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + /** * Checks if `value` is classified as a `Function` object. * @@ -20217,5015 +20320,6373 @@ function isFunction(value) { } /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ - * @since 0.1.0 + * @since 4.0.0 * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @param {*} value The value to process. + * @returns {string} Returns the string. * @example * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true + * _.toString(null); + * // => '' * - * _.isObject(_.noop); - * // => true + * _.toString(-0); + * // => '-0' * - * _.isObject(null); - * // => false + * _.toString([1, 2, 3]); + * // => '1,2,3' */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); +function toString(value) { + return value == null ? '' : baseToString(value); } /** - * This method returns `undefined`. + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. * * @static * @memberOf _ - * @since 2.3.0 - * @category Util + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. * @example * - * _.times(2, _.noop); - * // => [undefined, undefined] + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 */ -function noop() { - // No operation performed. +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); } -module.exports = uniq; +module.exports = set; /***/ }), -/***/ 7493: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 8216: +/***/ ((module) => { -"use strict"; +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ -const os = __nccwpck_require__(2087); +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; -const nameMap = new Map([ - [21, ['Monterey', '12']], - [20, ['Big Sur', '11']], - [19, ['Catalina', '10.15']], - [18, ['Mojave', '10.14']], - [17, ['High Sierra', '10.13']], - [16, ['Sierra', '10.12']], - [15, ['El Capitan', '10.11']], - [14, ['Yosemite', '10.10']], - [13, ['Mavericks', '10.9']], - [12, ['Mountain Lion', '10.8']], - [11, ['Lion', '10.7']], - [10, ['Snow Leopard', '10.6']], - [9, ['Leopard', '10.5']], - [8, ['Tiger', '10.4']], - [7, ['Panther', '10.3']], - [6, ['Jaguar', '10.2']], - [5, ['Puma', '10.1']] -]); +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; -const macosRelease = release => { - release = Number((release || os.release()).split('.')[0]); +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; - const [name, version] = nameMap.get(release); +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; - return { - name, - version - }; -}; +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; -module.exports = macosRelease; -// TODO: remove this in the next major version -module.exports.default = macosRelease; +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; -/***/ }), +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; -/***/ 8560: -/***/ ((module) => { +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); -"use strict"; +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array ? array.length : 0; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array ? array.length : 0; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return baseFindIndex(array, baseIsNaN, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * Checks if a cache value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} /** - * Tries to execute a function and discards any error that occurs. - * @param {Function} fn - Function that might or might not throw an error. - * @returns {?*} Return-value of the function when no error occurred. + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. */ -module.exports = function(fn) { - - try { return fn() } catch (e) {} +function setToArray(set) { + var index = -1, + result = Array(set.size); + set.forEach(function(value) { + result[++index] = value; + }); + return result; } -/***/ }), +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; -/***/ 467: -/***/ ((module, exports, __nccwpck_require__) => { +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; -"use strict"; +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; -Object.defineProperty(exports, "__esModule", ({ value: true })); +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; -var Stream = _interopDefault(__nccwpck_require__(2413)); -var http = _interopDefault(__nccwpck_require__(8605)); -var Url = _interopDefault(__nccwpck_require__(8835)); -var whatwgUrl = _interopDefault(__nccwpck_require__(8665)); -var https = _interopDefault(__nccwpck_require__(7211)); -var zlib = _interopDefault(__nccwpck_require__(8761)); +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js +/** Built-in value references. */ +var splice = arrayProto.splice; -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + Set = getNative(root, 'Set'), + nativeCreate = getNative(Object, 'create'); -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; -class Blob { - constructor() { - this[TYPE] = ''; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - const blobParts = arguments[0]; - const options = arguments[1]; +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} - const buffers = []; - let size = 0; +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} - this[BUFFER] = Buffer.concat(buffers); +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } } -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - /** - * fetch-error.js + * Removes all key-value entries from the list cache. * - * FetchError interface for operational errors + * @private + * @name clear + * @memberOf ListCache */ +function listCacheClear() { + this.__data__ = []; +} /** - * Create FetchError instance + * Removes `key` and its value from the list cache. * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; + if (index < 0) { + return false; } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; } -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = __nccwpck_require__(2877).convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - /** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body + * Gets the list cache value for `key`. * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } + return index < 0 ? undefined : data[index][1]; } -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} /** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * Sets the list cache `key` to `value`. * - * @return Promise + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} - let body = this.body; +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; - // body is blob - if (isBlob(body)) { - body = body.stream(); - } + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} - return new Body.Promise(function (resolve, reject) { - let resTimeout; +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} - accumBytes += chunk.length; - accum.push(chunk); - }); +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} - body.on('end', function () { - if (abort) { - return; - } +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} - clearTimeout(resTimeout); +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; } /** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding + * The base implementation of `_.isNative` without bad shim checks. * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = /= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; - // turn raw buffers into a single utf-8 buffer - return convert(buffer, 'UTF-8', charset).toString(); + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; } /** - * Detect a URLSearchParams object - * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143 + * Creates a set object of `values`. * - * @param Object obj Object to detect by type or brand - * @return String + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. */ -function isURLSearchParams(obj) { - // Duck-typing as a necessary condition. - if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') { - return false; - } +var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); +}; - // Brand-checking and more duck-typing as optional condition. - return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function'; +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; } /** - * Check if `obj` is a W3C `Blob` object (which `File` inherits from) - * @param {*} obj - * @return {boolean} + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. */ -function isBlob(obj) { - return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]); +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; } /** - * Clone body given Res/Req instance + * Checks if `value` is suitable for use as unique object key. * - * @param Mixed instance Response or Request instance - * @return Mixed + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ -function clone(instance) { - let p1, p2; - let body = instance.body; - - // don't allow cloning a used body - if (instance.bodyUsed) { - throw new Error('cannot clone body after it is used'); - } - - // check that body is a stream and not form-data object - // note: we can't clone the form-data object without having it as a dependency - if (body instanceof Stream && typeof body.getBoundary !== 'function') { - // tee instance body - p1 = new PassThrough(); - p2 = new PassThrough(); - body.pipe(p1); - body.pipe(p2); - // set instance body to teed body and return the other teed body - instance[INTERNALS].body = p1; - body = p2; - } - - return body; +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); } /** - * Performs the operation "extract a `Content-Type` value from |object|" as - * specified in the specification: - * https://fetch.spec.whatwg.org/#concept-bodyinit-extract - * - * This function assumes that instance.body is present. + * Checks if `func` has its source masked. * - * @param Mixed instance Any options.body input + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ -function extractContentType(body) { - if (body === null) { - // body is null - return null; - } else if (typeof body === 'string') { - // body is string - return 'text/plain;charset=UTF-8'; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - return 'application/x-www-form-urlencoded;charset=UTF-8'; - } else if (isBlob(body)) { - // body is blob - return body.type || null; - } else if (Buffer.isBuffer(body)) { - // body is buffer - return null; - } else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - return null; - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - return null; - } else if (typeof body.getBoundary === 'function') { - // detect form data input from form-data module - return `multipart/form-data;boundary=${body.getBoundary()}`; - } else if (body instanceof Stream) { - // body is stream - // can't really do much about this - return null; - } else { - // Body constructor defaults other things to string - return 'text/plain;charset=UTF-8'; - } +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; } /** - * The Fetch Standard treats this as if "total bytes" is a property on the body. - * For us, we have to explicitly get it with a function. + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each + * element is kept. * - * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example * - * @param Body instance Instance of Body - * @return Number? Number of bytes, or null if not possible + * _.uniq([2, 1, 2]); + * // => [2, 1] */ -function getTotalBytes(instance) { - const body = instance.body; - - - if (body === null) { - // body is null - return 0; - } else if (isBlob(body)) { - return body.size; - } else if (Buffer.isBuffer(body)) { - // body is buffer - return body.length; - } else if (body && typeof body.getLengthSync === 'function') { - // detect form data input from form-data module - if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x - body.hasKnownLength && body.hasKnownLength()) { - // 2.x - return body.getLengthSync(); - } - return null; - } else { - // body is stream - return null; - } +function uniq(array) { + return (array && array.length) + ? baseUniq(array) + : []; } /** - * Write a Body to a Node.js WritableStream (e.g. http.Request) object. + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. * - * @param Body instance Instance of Body - * @return Void + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true */ -function writeToStream(dest, instance) { - const body = instance.body; - - - if (body === null) { - // body is null - dest.end(); - } else if (isBlob(body)) { - body.stream().pipe(dest); - } else if (Buffer.isBuffer(body)) { - // body is buffer - dest.write(body); - dest.end(); - } else { - // body is stream - body.pipe(dest); - } +function eq(value, other) { + return value === other || (value !== value && other !== other); } -// expose Promise -Body.Promise = global.Promise; - /** - * headers.js + * Checks if `value` is classified as a `Function` object. * - * Headers class offers convenient helpers + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false */ - -const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/; -const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/; - -function validateName(name) { - name = `${name}`; - if (invalidTokenRegex.test(name) || name === '') { - throw new TypeError(`${name} is not a legal HTTP header name`); - } +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; } -function validateValue(value) { - value = `${value}`; - if (invalidHeaderCharRegex.test(value)) { - throw new TypeError(`${value} is not a legal HTTP header value`); - } +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); } /** - * Find the key in the map object given a header name. + * This method returns `undefined`. * - * Returns undefined if not found. + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example * - * @param String name Header name - * @return String|Undefined + * _.times(2, _.noop); + * // => [undefined, undefined] */ -function find(map, name) { - name = name.toLowerCase(); - for (const key in map) { - if (key.toLowerCase() === name) { - return key; - } - } - return undefined; +function noop() { + // No operation performed. } -const MAP = Symbol('map'); -class Headers { - /** - * Headers class - * - * @param Object headers Response headers - * @return Void - */ - constructor() { - let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; +module.exports = uniq; - this[MAP] = Object.create(null); - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); +/***/ }), - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } +/***/ 7493: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - return; - } +"use strict"; + +const os = __nccwpck_require__(2087); + +const nameMap = new Map([ + [21, ['Monterey', '12']], + [20, ['Big Sur', '11']], + [19, ['Catalina', '10.15']], + [18, ['Mojave', '10.14']], + [17, ['High Sierra', '10.13']], + [16, ['Sierra', '10.12']], + [15, ['El Capitan', '10.11']], + [14, ['Yosemite', '10.10']], + [13, ['Mavericks', '10.9']], + [12, ['Mountain Lion', '10.8']], + [11, ['Lion', '10.7']], + [10, ['Snow Leopard', '10.6']], + [9, ['Leopard', '10.5']], + [8, ['Tiger', '10.4']], + [7, ['Panther', '10.3']], + [6, ['Jaguar', '10.2']], + [5, ['Puma', '10.1']] +]); + +const macosRelease = release => { + release = Number((release || os.release()).split('.')[0]); + + const [name, version] = nameMap.get(release); + + return { + name, + version + }; +}; - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } +module.exports = macosRelease; +// TODO: remove this in the next major version +module.exports.default = macosRelease; - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } +/***/ }), - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } +/***/ 8560: +/***/ ((module) => { - return this[MAP][key].join(', '); - } +"use strict"; - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; +/** + * Tries to execute a function and discards any error that occurs. + * @param {Function} fn - Function that might or might not throw an error. + * @returns {?*} Return-value of the function when no error occurred. + */ +module.exports = function(fn) { - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } + try { return fn() } catch (e) {} - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } +} - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } +/***/ }), - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } +/***/ 467: +/***/ ((module, exports, __nccwpck_require__) => { - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } +"use strict"; - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } +Object.defineProperty(exports, "__esModule", ({ value: true })); - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; +var Stream = _interopDefault(__nccwpck_require__(2413)); +var http = _interopDefault(__nccwpck_require__(8605)); +var Url = _interopDefault(__nccwpck_require__(8835)); +var whatwgUrl = _interopDefault(__nccwpck_require__(8665)); +var https = _interopDefault(__nccwpck_require__(7211)); +var zlib = _interopDefault(__nccwpck_require__(8761)); -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); +// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); +// fix for "Readable" isn't a named export issue +const Readable = Stream.Readable; -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; +const BUFFER = Symbol('buffer'); +const TYPE = Symbol('type'); - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} +class Blob { + constructor() { + this[TYPE] = ''; -const INTERNAL = Symbol('internal'); + const blobParts = arguments[0]; + const options = arguments[1]; -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} + const buffers = []; + let size = 0; -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); + if (blobParts) { + const a = blobParts; + const length = Number(a.length); + for (let i = 0; i < length; i++) { + const element = a[i]; + let buffer; + if (element instanceof Buffer) { + buffer = element; + } else if (ArrayBuffer.isView(element)) { + buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); + } else if (element instanceof ArrayBuffer) { + buffer = Buffer.from(element); + } else if (element instanceof Blob) { + buffer = element[BUFFER]; + } else { + buffer = Buffer.from(typeof element === 'string' ? element : String(element)); + } + size += buffer.length; + buffers.push(buffer); + } } - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; + this[BUFFER] = Buffer.concat(buffers); - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; + let type = options && options.type !== undefined && String(options.type).toLowerCase(); + if (type && !/[^\u0020-\u007E]/.test(type)) { + this[TYPE] = type; } + } + get size() { + return this[BUFFER].length; + } + get type() { + return this[TYPE]; + } + text() { + return Promise.resolve(this[BUFFER].toString()); + } + arrayBuffer() { + const buf = this[BUFFER]; + const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + return Promise.resolve(ab); + } + stream() { + const readable = new Readable(); + readable._read = function () {}; + readable.push(this[BUFFER]); + readable.push(null); + return readable; + } + toString() { + return '[object Blob]'; + } + slice() { + const size = this.size; - this[INTERNAL].index = index + 1; + const start = arguments[0]; + const end = arguments[1]; + let relativeStart, relativeEnd; + if (start === undefined) { + relativeStart = 0; + } else if (start < 0) { + relativeStart = Math.max(size + start, 0); + } else { + relativeStart = Math.min(start, size); + } + if (end === undefined) { + relativeEnd = size; + } else if (end < 0) { + relativeEnd = Math.max(size + end, 0); + } else { + relativeEnd = Math.min(end, size); + } + const span = Math.max(relativeEnd - relativeStart, 0); - return { - value: values[index], - done: false - }; + const buffer = this[BUFFER]; + const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); + const blob = new Blob([], { type: arguments[2] }); + blob[BUFFER] = slicedBuffer; + return blob; } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); +} -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', +Object.defineProperties(Blob.prototype, { + size: { enumerable: true }, + type: { enumerable: true }, + slice: { enumerable: true } +}); + +Object.defineProperty(Blob.prototype, Symbol.toStringTag, { + value: 'Blob', writable: false, enumerable: false, configurable: true }); /** - * Export the Headers object in a form that Node.js can consume. + * fetch-error.js * - * @param Headers headers - * @return Object + * FetchError interface for operational errors */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} /** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. + * Create FetchError instance * - * @param Object obj Object of headers - * @return Headers + * @param String message Error message for human + * @param String type Error type for machine + * @param String systemError For Node.js system error + * @return FetchError */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; +function FetchError(message, type, systemError) { + Error.call(this, message); + + this.message = message; + this.type = type; + + // when err.type is `system`, err.code contains system error code + if (systemError) { + this.code = this.errno = systemError.code; + } + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); } -const INTERNALS$1 = Symbol('Response internals'); +FetchError.prototype = Object.create(Error.prototype); +FetchError.prototype.constructor = FetchError; +FetchError.prototype.name = 'FetchError'; -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; +let convert; +try { + convert = __nccwpck_require__(2877).convert; +} catch (e) {} + +const INTERNALS = Symbol('Body internals'); + +// fix an issue where "PassThrough" isn't a named export for node <10 +const PassThrough = Stream.PassThrough; /** - * Response class + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body * * @param Stream body Readable stream * @param Object opts Response options * @return Void */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); +function Body(body) { + var _this = this; - const status = opts.status || 200; - const headers = new Headers(opts.headers); + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$size = _ref.size; - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } + let size = _ref$size === undefined ? 0 : _ref$size; + var _ref$timeout = _ref.timeout; + let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; + if (body == null) { + // body is undefined or null + body = null; + } else if (isURLSearchParams(body)) { + // body is a URLSearchParams + body = Buffer.from(body.toString()); + } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { + // body is ArrayBuffer + body = Buffer.from(body); + } else if (ArrayBuffer.isView(body)) { + // body is ArrayBufferView + body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); + } else if (body instanceof Stream) ; else { + // none of the above + // coerce to string then buffer + body = Buffer.from(String(body)); } + this[INTERNALS] = { + body, + disturbed: false, + error: null + }; + this.size = size; + this.timeout = timeout; - get url() { - return this[INTERNALS$1].url || ''; + if (body instanceof Stream) { + body.on('error', function (err) { + const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); + _this[INTERNALS].error = error; + }); } +} - get status() { - return this[INTERNALS$1].status; - } +Body.prototype = { + get body() { + return this[INTERNALS].body; + }, + + get bodyUsed() { + return this[INTERNALS].disturbed; + }, + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + arrayBuffer() { + return consumeBody.call(this).then(function (buf) { + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + }); + }, + + /** + * Return raw response as Blob + * + * @return Promise + */ + blob() { + let ct = this.headers && this.headers.get('content-type') || ''; + return consumeBody.call(this).then(function (buf) { + return Object.assign( + // Prevent copying + new Blob([], { + type: ct.toLowerCase() + }), { + [BUFFER]: buf + }); + }); + }, /** - * Convenience property representing if the request ended normally + * Decode response as json + * + * @return Promise */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } + json() { + var _this2 = this; - get redirected() { - return this[INTERNALS$1].counter > 0; - } + return consumeBody.call(this).then(function (buffer) { + try { + return JSON.parse(buffer.toString()); + } catch (err) { + return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); + } + }); + }, - get statusText() { - return this[INTERNALS$1].statusText; - } + /** + * Decode response as text + * + * @return Promise + */ + text() { + return consumeBody.call(this).then(function (buffer) { + return buffer.toString(); + }); + }, - get headers() { - return this[INTERNALS$1].headers; - } + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + buffer() { + return consumeBody.call(this); + }, /** - * Clone this response + * Decode response as text, while automatically detecting the encoding and + * trying to decode to UTF-8 (non-spec api) * - * @return Response + * @return Promise */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected + textConverted() { + var _this3 = this; + + return consumeBody.call(this).then(function (buffer) { + return convertBody(buffer, _this3.headers); }); } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); +}; -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true } }); -const INTERNALS$2 = Symbol('Request internals'); -const URL = Url.URL || whatwgUrl.URL; - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; +Body.mixIn = function (proto) { + for (const name of Object.getOwnPropertyNames(Body.prototype)) { + // istanbul ignore else: future proof + if (!(name in proto)) { + const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); + Object.defineProperty(proto, name, desc); + } + } +}; /** - * Wrapper around `new URL` to handle arbitrary URLs + * Consume and convert an entire Body to a Buffer. * - * @param {string} urlStr - * @return {void} - */ -function parseURL(urlStr) { - /* - Check whether the URL is absolute or not - Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 - Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise */ - if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { - urlStr = new URL(urlStr).toString(); +function consumeBody() { + var _this4 = this; + + if (this[INTERNALS].disturbed) { + return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); } - // Fallback to old implementation for arbitrary URLs - return parse_url(urlStr); -} + this[INTERNALS].disturbed = true; -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; + if (this[INTERNALS].error) { + return Body.Promise.reject(this[INTERNALS].error); + } -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} + let body = this.body; -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} + // body is null + if (body === null) { + return Body.Promise.resolve(Buffer.alloc(0)); + } -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + // body is blob + if (isBlob(body)) { + body = body.stream(); + } - let parsedURL; + // body is buffer + if (Buffer.isBuffer(body)) { + return Body.Promise.resolve(body); + } - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parseURL(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parseURL(`${input}`); - } - input = {}; - } else { - parsedURL = parseURL(input.url); - } + // istanbul ignore if: should never happen + if (!(body instanceof Stream)) { + return Body.Promise.resolve(Buffer.alloc(0)); + } - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); + // body is stream + // get ready to actually consume the body + let accum = []; + let accumBytes = 0; + let abort = false; - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } + return new Body.Promise(function (resolve, reject) { + let resTimeout; - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; + // allow timeout on slow response body + if (_this4.timeout) { + resTimeout = setTimeout(function () { + abort = true; + reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); + }, _this4.timeout); + } - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 + // handle stream errors + body.on('error', function (err) { + if (err.name === 'AbortError') { + // if the request was aborted, reject with this Error + abort = true; + reject(err); + } else { + // other errors, such as incorrect content-encoding + reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); + } }); - const headers = new Headers(init.headers || input.headers || {}); + body.on('data', function (chunk) { + if (abort || chunk === null) { + return; + } - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); + if (_this4.size && accumBytes + chunk.length > _this4.size) { + abort = true; + reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); + return; } - } - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; + accumBytes += chunk.length; + accum.push(chunk); + }); + + body.on('end', function () { + if (abort) { + return; + } - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } + clearTimeout(resTimeout); - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; + try { + resolve(Buffer.concat(accum, accumBytes)); + } catch (err) { + // handle streams that have accumulated too much data (issue #414) + reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + }); +} - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; +/** + * Detect buffer encoding and convert to target encoding + * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding + * + * @param Buffer buffer Incoming buffer + * @param String encoding Target encoding + * @return String + */ +function convertBody(buffer, headers) { + if (typeof convert !== 'function') { + throw new Error('The package `encoding` must be installed to use the textConverted() function'); } - get method() { - return this[INTERNALS$2].method; - } + const ct = headers.get('content-type'); + let charset = 'utf-8'; + let res, str; - get url() { - return format_url(this[INTERNALS$2].parsedURL); + // header + if (ct) { + res = /charset=([^;]*)/i.exec(ct); } - get headers() { - return this[INTERNALS$2].headers; - } + // no charset in content type, peek at response body for at most 1024 bytes + str = buffer.slice(0, 1024).toString(); - get redirect() { - return this[INTERNALS$2].redirect; + // html5 + if (!res && str) { + res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; + this[MAP] = Object.create(null); - let response = null; + if (init instanceof Headers) { + const rawHeaders = init.raw(); + const headerNames = Object.keys(rawHeaders); - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - request.body.destroy(error); + for (const headerName of headerNames) { + for (const value of rawHeaders[headerName]) { + this.append(headerName, value); + } } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - if (signal && signal.aborted) { - abort(); return; } - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - finalize(); - }); - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); + // We don't worry about converting prop to ByteString here as append() + // will handle it. + if (init == null) ; else if (typeof init === 'object') { + const method = init[Symbol.iterator]; + if (method != null) { + if (typeof method !== 'function') { + throw new TypeError('Header pairs must be iterable'); + } - // HTTP fetch step 5.3 - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - // error here can only be invalid URL in Location: header - // do not throw when options.redirect == manual - // let the user extract the errorneous redirect URL - if (request.redirect !== 'manual') { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); - finalize(); - return; + // sequence> + // Note: per spec we have to first exhaust the lists then process them + const pairs = []; + for (const pair of init) { + if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { + throw new TypeError('Each header pair must be iterable'); } + pairs.push(Array.from(pair)); } - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } + for (const pair of pairs) { + if (pair.length !== 2) { + throw new TypeError('Each header pair must be a name/value tuple'); + } + this.append(pair[0], pair[1]); + } + } else { + // record + for (const key of Object.keys(init)) { + const value = init[key]; + this.append(key, value); + } + } + } else { + throw new TypeError('Provided initializer must be an object'); + } + } - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; + /** + * Return combined header value given name + * + * @param String name Header name + * @return Mixed + */ + get(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key === undefined) { + return null; + } - if (!isDomainOrSubdomain(request.url, locationURL)) { - for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { - requestOpts.headers.delete(name); - } - } + return this[MAP][key].join(', '); + } - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } + /** + * Iterate over all headers + * + * @param Function callback Executed for each item with parameters (value, name, thisArg) + * @param Boolean thisArg `this` context for callback function + * @return Void + */ + forEach(callback) { + let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } + let pairs = getHeaders(this); + let i = 0; + while (i < pairs.length) { + var _pairs$i = pairs[i]; + const name = _pairs$i[0], + value = _pairs$i[1]; - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } + callback.call(thisArg, value, name, this); + pairs = getHeaders(this); + i++; + } + } - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); + /** + * Overwrite header values given name + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + set(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + this[MAP][key !== undefined ? key : name] = [value]; + } - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; + /** + * Append a value onto existing header + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + append(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + if (key !== undefined) { + this[MAP][key].push(value); + } else { + this[MAP][name] = [value]; + } + } - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); + /** + * Check for header name existence + * + * @param String name Header name + * @return Boolean + */ + has(name) { + name = `${name}`; + validateName(name); + return find(this[MAP], name) !== undefined; + } - // HTTP-network fetch step 12.1.1.4: handle content codings + /** + * Delete all header values given name + * + * @param String name Header name + * @return Void + */ + delete(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key !== undefined) { + delete this[MAP][key]; + } + } - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } + /** + * Return raw headers (non-spec api) + * + * @return Object + */ + raw() { + return this[MAP]; + } - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; + /** + * Get an iterator on keys. + * + * @return Iterator + */ + keys() { + return createHeadersIterator(this, 'key'); + } - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } + /** + * Get an iterator on values. + * + * @return Iterator + */ + values() { + return createHeadersIterator(this, 'value'); + } - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - return; - } + /** + * Get an iterator on entries. + * + * This is the default iterator of the Headers object. + * + * @return Iterator + */ + [Symbol.iterator]() { + return createHeadersIterator(this, 'key+value'); + } +} +Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } +Object.defineProperty(Headers.prototype, Symbol.toStringTag, { + value: 'Headers', + writable: false, + enumerable: false, + configurable: true +}); - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); +Object.defineProperties(Headers.prototype, { + get: { enumerable: true }, + forEach: { enumerable: true }, + set: { enumerable: true }, + append: { enumerable: true }, + has: { enumerable: true }, + delete: { enumerable: true }, + keys: { enumerable: true }, + values: { enumerable: true }, + entries: { enumerable: true } +}); - writeToStream(req, request); +function getHeaders(headers) { + let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; + + const keys = Object.keys(headers[MAP]).sort(); + return keys.map(kind === 'key' ? function (k) { + return k.toLowerCase(); + } : kind === 'value' ? function (k) { + return headers[MAP][k].join(', '); + } : function (k) { + return [k.toLowerCase(), headers[MAP][k].join(', ')]; }); } -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -module.exports = exports = fetch; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.default = exports; -exports.Headers = Headers; -exports.Request = Request; -exports.Response = Response; -exports.FetchError = FetchError; +const INTERNAL = Symbol('internal'); -/***/ }), - -/***/ 2072: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +function createHeadersIterator(target, kind) { + const iterator = Object.create(HeadersIteratorPrototype); + iterator[INTERNAL] = { + target, + kind, + index: 0 + }; + return iterator; +} -module.exports = paginationMethodsPlugin +const HeadersIteratorPrototype = Object.setPrototypeOf({ + next() { + // istanbul ignore if + if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { + throw new TypeError('Value of `this` is not a HeadersIterator'); + } -function paginationMethodsPlugin (octokit) { - octokit.getFirstPage = __nccwpck_require__(9555).bind(null, octokit) - octokit.getLastPage = __nccwpck_require__(2203).bind(null, octokit) - octokit.getNextPage = __nccwpck_require__(6655).bind(null, octokit) - octokit.getPreviousPage = __nccwpck_require__(3032).bind(null, octokit) - octokit.hasFirstPage = __nccwpck_require__(9631) - octokit.hasLastPage = __nccwpck_require__(4286) - octokit.hasNextPage = __nccwpck_require__(500) - octokit.hasPreviousPage = __nccwpck_require__(5996) -} + var _INTERNAL = this[INTERNAL]; + const target = _INTERNAL.target, + kind = _INTERNAL.kind, + index = _INTERNAL.index; + const values = getHeaders(target, kind); + const len = values.length; + if (index >= len) { + return { + value: undefined, + done: true + }; + } -/***/ }), + this[INTERNAL].index = index + 1; -/***/ 191: -/***/ ((module) => { + return { + value: values[index], + done: false + }; + } +}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); -module.exports = deprecate +Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { + value: 'HeadersIterator', + writable: false, + enumerable: false, + configurable: true +}); -const loggedMessages = {} +/** + * Export the Headers object in a form that Node.js can consume. + * + * @param Headers headers + * @return Object + */ +function exportNodeCompatibleHeaders(headers) { + const obj = Object.assign({ __proto__: null }, headers[MAP]); -function deprecate (message) { - if (loggedMessages[message]) { - return - } + // http.request() only supports string as Host header. This hack makes + // specifying custom Host header possible. + const hostHeaderKey = find(headers[MAP], 'Host'); + if (hostHeaderKey !== undefined) { + obj[hostHeaderKey] = obj[hostHeaderKey][0]; + } - console.warn(`DEPRECATED (@octokit/rest): ${message}`) - loggedMessages[message] = 1 + return obj; } +/** + * Create a Headers object from an object of headers, ignoring those that do + * not conform to HTTP grammar productions. + * + * @param Object obj Object of headers + * @return Headers + */ +function createHeadersLenient(obj) { + const headers = new Headers(); + for (const name of Object.keys(obj)) { + if (invalidTokenRegex.test(name)) { + continue; + } + if (Array.isArray(obj[name])) { + for (const val of obj[name]) { + if (invalidHeaderCharRegex.test(val)) { + continue; + } + if (headers[MAP][name] === undefined) { + headers[MAP][name] = [val]; + } else { + headers[MAP][name].push(val); + } + } + } else if (!invalidHeaderCharRegex.test(obj[name])) { + headers[MAP][name] = [obj[name]]; + } + } + return headers; +} -/***/ }), - -/***/ 9555: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +const INTERNALS$1 = Symbol('Response internals'); -module.exports = getFirstPage +// fix an issue where "STATUS_CODES" aren't a named export for node <10 +const STATUS_CODES = http.STATUS_CODES; -const getPage = __nccwpck_require__(8604) +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Response { + constructor() { + let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -function getFirstPage (octokit, link, headers) { - return getPage(octokit, link, 'first', headers) -} + Body.call(this, body, opts); + const status = opts.status || 200; + const headers = new Headers(opts.headers); -/***/ }), + if (body != null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } -/***/ 2203: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + this[INTERNALS$1] = { + url: opts.url, + status, + statusText: opts.statusText || STATUS_CODES[status], + headers, + counter: opts.counter + }; + } -module.exports = getLastPage + get url() { + return this[INTERNALS$1].url || ''; + } -const getPage = __nccwpck_require__(8604) + get status() { + return this[INTERNALS$1].status; + } -function getLastPage (octokit, link, headers) { - return getPage(octokit, link, 'last', headers) -} + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; + } + get redirected() { + return this[INTERNALS$1].counter > 0; + } -/***/ }), + get statusText() { + return this[INTERNALS$1].statusText; + } -/***/ 6655: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + get headers() { + return this[INTERNALS$1].headers; + } -module.exports = getNextPage + /** + * Clone this response + * + * @return Response + */ + clone() { + return new Response(clone(this), { + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected + }); + } +} -const getPage = __nccwpck_require__(8604) +Body.mixIn(Response.prototype); -function getNextPage (octokit, link, headers) { - return getPage(octokit, link, 'next', headers) -} +Object.defineProperties(Response.prototype, { + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true } +}); +Object.defineProperty(Response.prototype, Symbol.toStringTag, { + value: 'Response', + writable: false, + enumerable: false, + configurable: true +}); -/***/ }), +const INTERNALS$2 = Symbol('Request internals'); +const URL = Url.URL || whatwgUrl.URL; -/***/ 7889: -/***/ ((module) => { +// fix an issue where "format", "parse" aren't a named export for node <10 +const parse_url = Url.parse; +const format_url = Url.format; -module.exports = getPageLinks +/** + * Wrapper around `new URL` to handle arbitrary URLs + * + * @param {string} urlStr + * @return {void} + */ +function parseURL(urlStr) { + /* + Check whether the URL is absolute or not + Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 + Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + */ + if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { + urlStr = new URL(urlStr).toString(); + } -function getPageLinks (link) { - link = link.link || link.headers.link || '' + // Fallback to old implementation for arbitrary URLs + return parse_url(urlStr); +} - const links = {} +const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - // link format: - // '; rel="next", ; rel="last"' - link.replace(/<([^>]*)>;\s*rel="([\w]*)"/g, (m, uri, type) => { - links[type] = uri - }) +/** + * Check if a value is an instance of Request. + * + * @param Mixed input + * @return Boolean + */ +function isRequest(input) { + return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; +} - return links +function isAbortSignal(signal) { + const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); + return !!(proto && proto.constructor.name === 'AbortSignal'); } +/** + * Request class + * + * @param Mixed input Url or Request instance + * @param Object init Custom options + * @return Void + */ +class Request { + constructor(input) { + let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -/***/ }), + let parsedURL; -/***/ 8604: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + // normalize input + if (!isRequest(input)) { + if (input && input.href) { + // in order to support Node.js' Url objects; though WHATWG's URL objects + // will fall into this branch also (since their `toString()` will return + // `href` property anyway) + parsedURL = parseURL(input.href); + } else { + // coerce input to a string before attempting to parse + parsedURL = parseURL(`${input}`); + } + input = {}; + } else { + parsedURL = parseURL(input.url); + } -module.exports = getPage + let method = init.method || input.method || 'GET'; + method = method.toUpperCase(); -const deprecate = __nccwpck_require__(191) -const getPageLinks = __nccwpck_require__(7889) -const HttpError = __nccwpck_require__(6058) + if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { + throw new TypeError('Request with GET/HEAD method cannot have body'); + } -function getPage (octokit, link, which, headers) { - deprecate(`octokit.get${which.charAt(0).toUpperCase() + which.slice(1)}Page() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) - const url = getPageLinks(link)[which] + let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - if (!url) { - const urlError = new HttpError(`No ${which} page found`, 404) - return Promise.reject(urlError) - } + Body.call(this, inputBody, { + timeout: init.timeout || input.timeout || 0, + size: init.size || input.size || 0 + }); - const requestOptions = { - url, - headers: applyAcceptHeader(link, headers) - } + const headers = new Headers(init.headers || input.headers || {}); - const promise = octokit.request(requestOptions) + if (inputBody != null && !headers.has('Content-Type')) { + const contentType = extractContentType(inputBody); + if (contentType) { + headers.append('Content-Type', contentType); + } + } - return promise -} + let signal = isRequest(input) ? input.signal : null; + if ('signal' in init) signal = init.signal; -function applyAcceptHeader (res, headers) { - const previous = res.headers && res.headers['x-github-media-type'] + if (signal != null && !isAbortSignal(signal)) { + throw new TypeError('Expected signal to be an instanceof AbortSignal'); + } - if (!previous || (headers && headers.accept)) { - return headers - } - headers = headers || {} - headers.accept = 'application/vnd.' + previous - .replace('; param=', '.') - .replace('; format=', '+') + this[INTERNALS$2] = { + method, + redirect: init.redirect || input.redirect || 'follow', + headers, + parsedURL, + signal + }; - return headers -} + // node-fetch-only options + this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; + this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; + this.counter = init.counter || input.counter || 0; + this.agent = init.agent || input.agent; + } + get method() { + return this[INTERNALS$2].method; + } -/***/ }), + get url() { + return format_url(this[INTERNALS$2].parsedURL); + } -/***/ 3032: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + get headers() { + return this[INTERNALS$2].headers; + } -module.exports = getPreviousPage + get redirect() { + return this[INTERNALS$2].redirect; + } -const getPage = __nccwpck_require__(8604) + get signal() { + return this[INTERNALS$2].signal; + } -function getPreviousPage (octokit, link, headers) { - return getPage(octokit, link, 'prev', headers) + /** + * Clone this request + * + * @return Request + */ + clone() { + return new Request(this); + } } +Body.mixIn(Request.prototype); -/***/ }), +Object.defineProperty(Request.prototype, Symbol.toStringTag, { + value: 'Request', + writable: false, + enumerable: false, + configurable: true +}); -/***/ 9631: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +Object.defineProperties(Request.prototype, { + method: { enumerable: true }, + url: { enumerable: true }, + headers: { enumerable: true }, + redirect: { enumerable: true }, + clone: { enumerable: true }, + signal: { enumerable: true } +}); -module.exports = hasFirstPage +/** + * Convert a Request to Node.js http request options. + * + * @param Request A Request instance + * @return Object The options object to be passed to http.request + */ +function getNodeRequestOptions(request) { + const parsedURL = request[INTERNALS$2].parsedURL; + const headers = new Headers(request[INTERNALS$2].headers); -const deprecate = __nccwpck_require__(191) -const getPageLinks = __nccwpck_require__(7889) + // fetch step 1.3 + if (!headers.has('Accept')) { + headers.set('Accept', '*/*'); + } -function hasFirstPage (link) { - deprecate(`octokit.hasFirstPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) - return getPageLinks(link).first -} + // Basic fetch + if (!parsedURL.protocol || !parsedURL.hostname) { + throw new TypeError('Only absolute URLs are supported'); + } + if (!/^https?:$/.test(parsedURL.protocol)) { + throw new TypeError('Only HTTP(S) protocols are supported'); + } -/***/ }), + if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { + throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); + } -/***/ 4286: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + // HTTP-network-or-cache fetch steps 2.4-2.7 + let contentLengthValue = null; + if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { + contentLengthValue = '0'; + } + if (request.body != null) { + const totalBytes = getTotalBytes(request); + if (typeof totalBytes === 'number') { + contentLengthValue = String(totalBytes); + } + } + if (contentLengthValue) { + headers.set('Content-Length', contentLengthValue); + } -module.exports = hasLastPage + // HTTP-network-or-cache fetch step 2.11 + if (!headers.has('User-Agent')) { + headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); + } + + // HTTP-network-or-cache fetch step 2.15 + if (request.compress && !headers.has('Accept-Encoding')) { + headers.set('Accept-Encoding', 'gzip,deflate'); + } -const deprecate = __nccwpck_require__(191) -const getPageLinks = __nccwpck_require__(7889) + let agent = request.agent; + if (typeof agent === 'function') { + agent = agent(parsedURL); + } -function hasLastPage (link) { - deprecate(`octokit.hasLastPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) - return getPageLinks(link).last -} + if (!headers.has('Connection') && !agent) { + headers.set('Connection', 'close'); + } + // HTTP-network fetch step 4.2 + // chunked encoding is handled by Node.js -/***/ }), + return Object.assign({}, parsedURL, { + method: request.method, + headers: exportNodeCompatibleHeaders(headers), + agent + }); +} -/***/ 500: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/** + * abort-error.js + * + * AbortError interface for cancelled requests + */ -module.exports = hasNextPage +/** + * Create AbortError instance + * + * @param String message Error message for human + * @return AbortError + */ +function AbortError(message) { + Error.call(this, message); -const deprecate = __nccwpck_require__(191) -const getPageLinks = __nccwpck_require__(7889) + this.type = 'aborted'; + this.message = message; -function hasNextPage (link) { - deprecate(`octokit.hasNextPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) - return getPageLinks(link).next + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); } +AbortError.prototype = Object.create(Error.prototype); +AbortError.prototype.constructor = AbortError; +AbortError.prototype.name = 'AbortError'; -/***/ }), +const URL$1 = Url.URL || whatwgUrl.URL; -/***/ 5996: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 +const PassThrough$1 = Stream.PassThrough; -module.exports = hasPreviousPage +const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { + const orig = new URL$1(original).hostname; + const dest = new URL$1(destination).hostname; -const deprecate = __nccwpck_require__(191) -const getPageLinks = __nccwpck_require__(7889) + return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); +}; -function hasPreviousPage (link) { - deprecate(`octokit.hasPreviousPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) - return getPageLinks(link).prev -} +/** + * Fetch function + * + * @param Mixed url Absolute url or Request instance + * @param Object opts Fetch options + * @return Promise + */ +function fetch(url, opts) { + // allow custom promise + if (!fetch.Promise) { + throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); + } -/***/ }), + Body.Promise = fetch.Promise; -/***/ 6058: -/***/ ((module) => { + // wrap http.request into fetch + return new fetch.Promise(function (resolve, reject) { + // build request object + const request = new Request(url, opts); + const options = getNodeRequestOptions(request); -module.exports = class HttpError extends Error { - constructor (message, code, headers) { - super(message) + const send = (options.protocol === 'https:' ? https : http).request; + const signal = request.signal; - // Maintains proper stack trace (only available on V8) - /* istanbul ignore next */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor) - } + let response = null; - this.name = 'HttpError' - this.code = code - this.headers = headers - } -} + const abort = function abort() { + let error = new AbortError('The user aborted a request.'); + reject(error); + if (request.body && request.body instanceof Stream.Readable) { + request.body.destroy(error); + } + if (!response || !response.body) return; + response.body.emit('error', error); + }; + if (signal && signal.aborted) { + abort(); + return; + } -/***/ }), + const abortAndFinalize = function abortAndFinalize() { + abort(); + finalize(); + }; -/***/ 1223: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + // send request + const req = send(options); + let reqTimeout; -var wrappy = __nccwpck_require__(2940) -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) + if (signal) { + signal.addEventListener('abort', abortAndFinalize); + } -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) + function finalize() { + req.abort(); + if (signal) signal.removeEventListener('abort', abortAndFinalize); + clearTimeout(reqTimeout); + } - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) + if (request.timeout) { + req.once('socket', function (socket) { + reqTimeout = setTimeout(function () { + reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); + finalize(); + }, request.timeout); + }); + } -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f -} + req.on('error', function (err) { + reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); + finalize(); + }); -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} + req.on('response', function (res) { + clearTimeout(reqTimeout); + const headers = createHeadersLenient(res.headers); -/***/ }), + // HTTP fetch step 5 + if (fetch.isRedirect(res.statusCode)) { + // HTTP fetch step 5.2 + const location = headers.get('Location'); -/***/ 4824: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + // HTTP fetch step 5.3 + let locationURL = null; + try { + locationURL = location === null ? null : new URL$1(location, request.url).toString(); + } catch (err) { + // error here can only be invalid URL in Location: header + // do not throw when options.redirect == manual + // let the user extract the errorneous redirect URL + if (request.redirect !== 'manual') { + reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); + finalize(); + return; + } + } -"use strict"; + // HTTP fetch step 5.5 + switch (request.redirect) { + case 'error': + reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); + finalize(); + return; + case 'manual': + // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. + if (locationURL !== null) { + // handle corrupted header + try { + headers.set('Location', locationURL); + } catch (err) { + // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request + reject(err); + } + } + break; + case 'follow': + // HTTP-redirect fetch step 2 + if (locationURL === null) { + break; + } -const os = __nccwpck_require__(2087); -const macosRelease = __nccwpck_require__(7493); -const winRelease = __nccwpck_require__(3515); + // HTTP-redirect fetch step 5 + if (request.counter >= request.follow) { + reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 6 (counter increment) + // Create a new Request object. + const requestOpts = { + headers: new Headers(request.headers), + follow: request.follow, + counter: request.counter + 1, + agent: request.agent, + compress: request.compress, + method: request.method, + body: request.body, + signal: request.signal, + timeout: request.timeout, + size: request.size + }; -const osName = (platform, release) => { - if (!platform && release) { - throw new Error('You can\'t specify a `release` without specifying `platform`'); - } + if (!isDomainOrSubdomain(request.url, locationURL)) { + for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { + requestOpts.headers.delete(name); + } + } - platform = platform || os.platform(); + // HTTP-redirect fetch step 9 + if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { + reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); + finalize(); + return; + } - let id; + // HTTP-redirect fetch step 11 + if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { + requestOpts.method = 'GET'; + requestOpts.body = undefined; + requestOpts.headers.delete('content-length'); + } - if (platform === 'darwin') { - if (!release && os.platform() === 'darwin') { - release = os.release(); - } + // HTTP-redirect fetch step 15 + resolve(fetch(new Request(locationURL, requestOpts))); + finalize(); + return; + } + } - const prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS'; - id = release ? macosRelease(release).name : ''; - return prefix + (id ? ' ' + id : ''); - } + // prepare response + res.once('end', function () { + if (signal) signal.removeEventListener('abort', abortAndFinalize); + }); + let body = res.pipe(new PassThrough$1()); - if (platform === 'linux') { - if (!release && os.platform() === 'linux') { - release = os.release(); - } + const response_options = { + url: request.url, + status: res.statusCode, + statusText: res.statusMessage, + headers: headers, + size: request.size, + timeout: request.timeout, + counter: request.counter + }; - id = release ? release.replace(/^(\d+\.\d+).*/, '$1') : ''; - return 'Linux' + (id ? ' ' + id : ''); - } + // HTTP-network fetch step 12.1.1.3 + const codings = headers.get('Content-Encoding'); - if (platform === 'win32') { - if (!release && os.platform() === 'win32') { - release = os.release(); - } + // HTTP-network fetch step 12.1.1.4: handle content codings - id = release ? winRelease(release) : ''; - return 'Windows' + (id ? ' ' + id : ''); - } + // in following scenarios we ignore compression support + // 1. compression support is disabled + // 2. HEAD request + // 3. no Content-Encoding header + // 4. no content response (204) + // 5. content not modified response (304) + if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { + response = new Response(body, response_options); + resolve(response); + return; + } - return platform; -}; + // For Node v6+ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + const zlibOptions = { + flush: zlib.Z_SYNC_FLUSH, + finishFlush: zlib.Z_SYNC_FLUSH + }; -module.exports = osName; + // for gzip + if (codings == 'gzip' || codings == 'x-gzip') { + body = body.pipe(zlib.createGunzip(zlibOptions)); + response = new Response(body, response_options); + resolve(response); + return; + } + // for deflate + if (codings == 'deflate' || codings == 'x-deflate') { + // handle the infamous raw deflate response from old servers + // a hack for old IIS and Apache servers + const raw = res.pipe(new PassThrough$1()); + raw.once('data', function (chunk) { + // see http://stackoverflow.com/questions/37519828 + if ((chunk[0] & 0x0F) === 0x08) { + body = body.pipe(zlib.createInflate()); + } else { + body = body.pipe(zlib.createInflateRaw()); + } + response = new Response(body, response_options); + resolve(response); + }); + return; + } -/***/ }), + // for br + if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { + body = body.pipe(zlib.createBrotliDecompress()); + response = new Response(body, response_options); + resolve(response); + return; + } -/***/ 1330: -/***/ ((module) => { + // otherwise, use response as-is + response = new Response(body, response_options); + resolve(response); + }); -"use strict"; + writeToStream(req, request); + }); +} +/** + * Redirect code matching + * + * @param Number code Status code + * @return Boolean + */ +fetch.isRedirect = function (code) { + return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; +}; -module.exports = (promise, onFinally) => { - onFinally = onFinally || (() => {}); +// expose Promise +fetch.Promise = global.Promise; - return promise.then( - val => new Promise(resolve => { - resolve(onFinally()); - }).then(() => val), - err => new Promise(resolve => { - resolve(onFinally()); - }).then(() => { - throw err; - }) - ); -}; +module.exports = exports = fetch; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.default = exports; +exports.Headers = Headers; +exports.Request = Request; +exports.Response = Response; +exports.FetchError = FetchError; /***/ }), -/***/ 8341: +/***/ 2072: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var once = __nccwpck_require__(1223) -var eos = __nccwpck_require__(1205) -var fs = __nccwpck_require__(5747) // we only need fs to get the ReadStream and WriteStream prototypes - -var noop = function () {} -var ancient = /^v?\.0/.test(process.version) - -var isFn = function (fn) { - return typeof fn === 'function' -} - -var isFS = function (stream) { - if (!ancient) return false // newer node version do not need to care about fs is a special way - if (!fs) return false // browser - return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) -} +module.exports = paginationMethodsPlugin -var isRequest = function (stream) { - return stream.setHeader && isFn(stream.abort) +function paginationMethodsPlugin (octokit) { + octokit.getFirstPage = __nccwpck_require__(9555).bind(null, octokit) + octokit.getLastPage = __nccwpck_require__(2203).bind(null, octokit) + octokit.getNextPage = __nccwpck_require__(6655).bind(null, octokit) + octokit.getPreviousPage = __nccwpck_require__(3032).bind(null, octokit) + octokit.hasFirstPage = __nccwpck_require__(9631) + octokit.hasLastPage = __nccwpck_require__(4286) + octokit.hasNextPage = __nccwpck_require__(500) + octokit.hasPreviousPage = __nccwpck_require__(5996) } -var destroyer = function (stream, reading, writing, callback) { - callback = once(callback) - - var closed = false - stream.on('close', function () { - closed = true - }) - eos(stream, {readable: reading, writable: writing}, function (err) { - if (err) return callback(err) - closed = true - callback() - }) +/***/ }), - var destroyed = false - return function (err) { - if (closed) return - if (destroyed) return - destroyed = true +/***/ 191: +/***/ ((module) => { - if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks - if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want +module.exports = deprecate - if (isFn(stream.destroy)) return stream.destroy() +const loggedMessages = {} - callback(err || new Error('stream was destroyed')) +function deprecate (message) { + if (loggedMessages[message]) { + return } -} -var call = function (fn) { - fn() + console.warn(`DEPRECATED (@octokit/rest): ${message}`) + loggedMessages[message] = 1 } -var pipe = function (from, to) { - return from.pipe(to) -} -var pump = function () { - var streams = Array.prototype.slice.call(arguments) - var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop +/***/ }), - if (Array.isArray(streams[0])) streams = streams[0] - if (streams.length < 2) throw new Error('pump requires two streams per minimum') +/***/ 9555: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - var error - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1 - var writing = i > 0 - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err - if (err) destroys.forEach(call) - if (reading) return - destroys.forEach(call) - callback(error) - }) - }) +module.exports = getFirstPage - return streams.reduce(pipe) -} +const getPage = __nccwpck_require__(8604) -module.exports = pump +function getFirstPage (octokit, link, headers) { + return getPage(octokit, link, 'first', headers) +} /***/ }), -/***/ 4931: +/***/ 2203: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -// Note: since nyc uses this module to output coverage, any lines -// that are in the direct sync flow of nyc's outputCoverage are -// ignored, since we can never get coverage for them. -// grab a reference to node's real process object right away -var process = global.process +module.exports = getLastPage -const processOk = function (process) { - return process && - typeof process === 'object' && - typeof process.removeListener === 'function' && - typeof process.emit === 'function' && - typeof process.reallyExit === 'function' && - typeof process.listeners === 'function' && - typeof process.kill === 'function' && - typeof process.pid === 'number' && - typeof process.on === 'function' +const getPage = __nccwpck_require__(8604) + +function getLastPage (octokit, link, headers) { + return getPage(octokit, link, 'last', headers) } -// some kind of non-node environment, just no-op -/* istanbul ignore if */ -if (!processOk(process)) { - module.exports = function () { - return function () {} - } -} else { - var assert = __nccwpck_require__(2357) - var signals = __nccwpck_require__(3710) - var isWin = /^win/i.test(process.platform) - var EE = __nccwpck_require__(8614) - /* istanbul ignore if */ - if (typeof EE !== 'function') { - EE = EE.EventEmitter - } +/***/ }), - var emitter - if (process.__signal_exit_emitter__) { - emitter = process.__signal_exit_emitter__ - } else { - emitter = process.__signal_exit_emitter__ = new EE() - emitter.count = 0 - emitter.emitted = {} - } +/***/ 6655: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - // Because this emitter is a global, we have to check to see if a - // previous version of this library failed to enable infinite listeners. - // I know what you're about to say. But literally everything about - // signal-exit is a compromise with evil. Get used to it. - if (!emitter.infinite) { - emitter.setMaxListeners(Infinity) - emitter.infinite = true - } +module.exports = getNextPage - module.exports = function (cb, opts) { - /* istanbul ignore if */ - if (!processOk(global.process)) { - return function () {} - } - assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') +const getPage = __nccwpck_require__(8604) - if (loaded === false) { - load() - } +function getNextPage (octokit, link, headers) { + return getPage(octokit, link, 'next', headers) +} - var ev = 'exit' - if (opts && opts.alwaysLast) { - ev = 'afterexit' - } - var remove = function () { - emitter.removeListener(ev, cb) - if (emitter.listeners('exit').length === 0 && - emitter.listeners('afterexit').length === 0) { - unload() - } - } - emitter.on(ev, cb) +/***/ }), - return remove - } +/***/ 7889: +/***/ ((module) => { - var unload = function unload () { - if (!loaded || !processOk(global.process)) { - return - } - loaded = false +module.exports = getPageLinks - signals.forEach(function (sig) { - try { - process.removeListener(sig, sigListeners[sig]) - } catch (er) {} - }) - process.emit = originalProcessEmit - process.reallyExit = originalProcessReallyExit - emitter.count -= 1 - } - module.exports.unload = unload +function getPageLinks (link) { + link = link.link || link.headers.link || '' - var emit = function emit (event, code, signal) { - /* istanbul ignore if */ - if (emitter.emitted[event]) { - return - } - emitter.emitted[event] = true - emitter.emit(event, code, signal) - } + const links = {} - // { : , ... } - var sigListeners = {} - signals.forEach(function (sig) { - sigListeners[sig] = function listener () { - /* istanbul ignore if */ - if (!processOk(global.process)) { - return - } - // If there are no other listeners, an exit is coming! - // Simplest way: remove us and then re-send the signal. - // We know that this will kill the process, so we can - // safely emit now. - var listeners = process.listeners(sig) - if (listeners.length === emitter.count) { - unload() - emit('exit', null, sig) - /* istanbul ignore next */ - emit('afterexit', null, sig) - /* istanbul ignore next */ - if (isWin && sig === 'SIGHUP') { - // "SIGHUP" throws an `ENOSYS` error on Windows, - // so use a supported signal instead - sig = 'SIGINT' - } - /* istanbul ignore next */ - process.kill(process.pid, sig) - } - } + // link format: + // '; rel="next", ; rel="last"' + link.replace(/<([^>]*)>;\s*rel="([\w]*)"/g, (m, uri, type) => { + links[type] = uri }) - module.exports.signals = function () { - return signals - } + return links +} - var loaded = false - var load = function load () { - if (loaded || !processOk(global.process)) { - return - } - loaded = true +/***/ }), - // This is the number of onSignalExit's that are in play. - // It's important so that we can count the correct number of - // listeners on signals, and don't wait for the other one to - // handle it instead of us. - emitter.count += 1 +/***/ 8604: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - signals = signals.filter(function (sig) { - try { - process.on(sig, sigListeners[sig]) - return true - } catch (er) { - return false - } - }) +module.exports = getPage - process.emit = processEmit - process.reallyExit = processReallyExit +const deprecate = __nccwpck_require__(191) +const getPageLinks = __nccwpck_require__(7889) +const HttpError = __nccwpck_require__(6058) + +function getPage (octokit, link, which, headers) { + deprecate(`octokit.get${which.charAt(0).toUpperCase() + which.slice(1)}Page() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + const url = getPageLinks(link)[which] + + if (!url) { + const urlError = new HttpError(`No ${which} page found`, 404) + return Promise.reject(urlError) } - module.exports.load = load - var originalProcessReallyExit = process.reallyExit - var processReallyExit = function processReallyExit (code) { - /* istanbul ignore if */ - if (!processOk(global.process)) { - return - } - process.exitCode = code || /* istanbul ignore next */ 0 - emit('exit', process.exitCode, null) - /* istanbul ignore next */ - emit('afterexit', process.exitCode, null) - /* istanbul ignore next */ - originalProcessReallyExit.call(process, process.exitCode) + const requestOptions = { + url, + headers: applyAcceptHeader(link, headers) } - var originalProcessEmit = process.emit - var processEmit = function processEmit (ev, arg) { - if (ev === 'exit' && processOk(global.process)) { - /* istanbul ignore else */ - if (arg !== undefined) { - process.exitCode = arg - } - var ret = originalProcessEmit.apply(this, arguments) - /* istanbul ignore next */ - emit('exit', process.exitCode, null) - /* istanbul ignore next */ - emit('afterexit', process.exitCode, null) - /* istanbul ignore next */ - return ret - } else { - return originalProcessEmit.apply(this, arguments) - } + const promise = octokit.request(requestOptions) + + return promise +} + +function applyAcceptHeader (res, headers) { + const previous = res.headers && res.headers['x-github-media-type'] + + if (!previous || (headers && headers.accept)) { + return headers } + headers = headers || {} + headers.accept = 'application/vnd.' + previous + .replace('; param=', '.') + .replace('; format=', '+') + + return headers +} + + +/***/ }), + +/***/ 3032: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = getPreviousPage + +const getPage = __nccwpck_require__(8604) + +function getPreviousPage (octokit, link, headers) { + return getPage(octokit, link, 'prev', headers) } /***/ }), -/***/ 3710: -/***/ ((module) => { +/***/ 9631: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -// This is not the set of all possible signals. -// -// It IS, however, the set of all signals that trigger -// an exit on either Linux or BSD systems. Linux is a -// superset of the signal names supported on BSD, and -// the unknown signals just fail to register, so we can -// catch that easily enough. -// -// Don't bother with SIGKILL. It's uncatchable, which -// means that we can't fire any callbacks anyway. -// -// If a user does happen to register a handler on a non- -// fatal signal like SIGWINCH or something, and then -// exit, it'll end up firing `process.emit('exit')`, so -// the handler will be fired anyway. -// -// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised -// artificially, inherently leave the process in a -// state from which it is not safe to try and enter JS -// listeners. -module.exports = [ - 'SIGABRT', - 'SIGALRM', - 'SIGHUP', - 'SIGINT', - 'SIGTERM' -] +module.exports = hasFirstPage -if (process.platform !== 'win32') { - module.exports.push( - 'SIGVTALRM', - 'SIGXCPU', - 'SIGXFSZ', - 'SIGUSR2', - 'SIGTRAP', - 'SIGSYS', - 'SIGQUIT', - 'SIGIOT' - // should detect profiler and enable/disable accordingly. - // see #21 - // 'SIGPROF' - ) -} +const deprecate = __nccwpck_require__(191) +const getPageLinks = __nccwpck_require__(7889) -if (process.platform === 'linux') { - module.exports.push( - 'SIGIO', - 'SIGPOLL', - 'SIGPWR', - 'SIGSTKFLT', - 'SIGUNUSED' - ) +function hasFirstPage (link) { + deprecate(`octokit.hasFirstPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).first } /***/ }), -/***/ 5515: -/***/ ((module) => { +/***/ 4286: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -"use strict"; +module.exports = hasLastPage -module.exports = function (x) { - var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt(); - var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt(); +const deprecate = __nccwpck_require__(191) +const getPageLinks = __nccwpck_require__(7889) - if (x[x.length - 1] === lf) { - x = x.slice(0, x.length - 1); - } +function hasLastPage (link) { + deprecate(`octokit.hasLastPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).last +} - if (x[x.length - 1] === cr) { - x = x.slice(0, x.length - 1); - } - return x; -}; +/***/ }), + +/***/ 500: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = hasNextPage + +const deprecate = __nccwpck_require__(191) +const getPageLinks = __nccwpck_require__(7889) + +function hasNextPage (link) { + deprecate(`octokit.hasNextPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).next +} /***/ }), -/***/ 4256: +/***/ 5996: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -"use strict"; +module.exports = hasPreviousPage +const deprecate = __nccwpck_require__(191) +const getPageLinks = __nccwpck_require__(7889) -var punycode = __nccwpck_require__(4213); -var mappingTable = __nccwpck_require__(68); +function hasPreviousPage (link) { + deprecate(`octokit.hasPreviousPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).prev +} -var PROCESSING_OPTIONS = { - TRANSITIONAL: 0, - NONTRANSITIONAL: 1 -}; -function normalize(str) { // fix bug in v8 - return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000'); -} +/***/ }), -function findStatus(val) { - var start = 0; - var end = mappingTable.length - 1; +/***/ 6058: +/***/ ((module) => { - while (start <= end) { - var mid = Math.floor((start + end) / 2); +module.exports = class HttpError extends Error { + constructor (message, code, headers) { + super(message) - var target = mappingTable[mid]; - if (target[0][0] <= val && target[0][1] >= val) { - return target; - } else if (target[0][0] > val) { - end = mid - 1; - } else { - start = mid + 1; + // Maintains proper stack trace (only available on V8) + /* istanbul ignore next */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor) } - } - return null; + this.name = 'HttpError' + this.code = code + this.headers = headers + } } -var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; -function countSymbols(string) { - return string - // replace every surrogate pair with a BMP symbol - .replace(regexAstralSymbols, '_') - // then get the length - .length; -} +/***/ }), -function mapChars(domain_name, useSTD3, processing_option) { - var hasError = false; - var processed = ""; +/***/ 1223: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - var len = countSymbols(domain_name); - for (var i = 0; i < len; ++i) { - var codePoint = domain_name.codePointAt(i); - var status = findStatus(codePoint); +var wrappy = __nccwpck_require__(2940) +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) - switch (status[1]) { - case "disallowed": - hasError = true; - processed += String.fromCodePoint(codePoint); - break; - case "ignored": - break; - case "mapped": - processed += String.fromCodePoint.apply(String, status[2]); - break; - case "deviation": - if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { - processed += String.fromCodePoint.apply(String, status[2]); - } else { - processed += String.fromCodePoint(codePoint); - } - break; - case "valid": - processed += String.fromCodePoint(codePoint); - break; - case "disallowed_STD3_mapped": - if (useSTD3) { - hasError = true; - processed += String.fromCodePoint(codePoint); - } else { - processed += String.fromCodePoint.apply(String, status[2]); - } - break; - case "disallowed_STD3_valid": - if (useSTD3) { - hasError = true; - } +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) - processed += String.fromCodePoint(codePoint); - break; - } + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) } + f.called = false + return f +} - return { - string: processed, - error: hasError - }; +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) + } + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f } -var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; -function validateLabel(label, processing_option) { - if (label.substr(0, 4) === "xn--") { - label = punycode.toUnicode(label); - processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; - } +/***/ }), + +/***/ 4824: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + +const os = __nccwpck_require__(2087); +const macosRelease = __nccwpck_require__(7493); +const winRelease = __nccwpck_require__(3515); + +const osName = (platform, release) => { + if (!platform && release) { + throw new Error('You can\'t specify a `release` without specifying `platform`'); + } + + platform = platform || os.platform(); + + let id; - var error = false; + if (platform === 'darwin') { + if (!release && os.platform() === 'darwin') { + release = os.release(); + } - if (normalize(label) !== label || - (label[3] === "-" && label[4] === "-") || - label[0] === "-" || label[label.length - 1] === "-" || - label.indexOf(".") !== -1 || - label.search(combiningMarksRegex) === 0) { - error = true; - } + const prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS'; + id = release ? macosRelease(release).name : ''; + return prefix + (id ? ' ' + id : ''); + } - var len = countSymbols(label); - for (var i = 0; i < len; ++i) { - var status = findStatus(label.codePointAt(i)); - if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") || - (processing === PROCESSING_OPTIONS.NONTRANSITIONAL && - status[1] !== "valid" && status[1] !== "deviation")) { - error = true; - break; - } - } + if (platform === 'linux') { + if (!release && os.platform() === 'linux') { + release = os.release(); + } - return { - label: label, - error: error - }; -} + id = release ? release.replace(/^(\d+\.\d+).*/, '$1') : ''; + return 'Linux' + (id ? ' ' + id : ''); + } -function processing(domain_name, useSTD3, processing_option) { - var result = mapChars(domain_name, useSTD3, processing_option); - result.string = normalize(result.string); + if (platform === 'win32') { + if (!release && os.platform() === 'win32') { + release = os.release(); + } - var labels = result.string.split("."); - for (var i = 0; i < labels.length; ++i) { - try { - var validation = validateLabel(labels[i]); - labels[i] = validation.label; - result.error = result.error || validation.error; - } catch(e) { - result.error = true; - } - } + id = release ? winRelease(release) : ''; + return 'Windows' + (id ? ' ' + id : ''); + } - return { - string: labels.join("."), - error: result.error - }; -} + return platform; +}; -module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { - var result = processing(domain_name, useSTD3, processing_option); - var labels = result.string.split("."); - labels = labels.map(function(l) { - try { - return punycode.toASCII(l); - } catch(e) { - result.error = true; - return l; - } - }); +module.exports = osName; - if (verifyDnsLength) { - var total = labels.slice(0, labels.length - 1).join(".").length; - if (total.length > 253 || total.length === 0) { - result.error = true; - } - for (var i=0; i < labels.length; ++i) { - if (labels.length > 63 || labels.length === 0) { - result.error = true; - break; - } - } - } +/***/ }), - if (result.error) return null; - return labels.join("."); -}; +/***/ 1330: +/***/ ((module) => { -module.exports.toUnicode = function(domain_name, useSTD3) { - var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); +"use strict"; - return { - domain: result.string, - error: result.error - }; -}; +module.exports = (promise, onFinally) => { + onFinally = onFinally || (() => {}); -module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; + return promise.then( + val => new Promise(resolve => { + resolve(onFinally()); + }).then(() => val), + err => new Promise(resolve => { + resolve(onFinally()); + }).then(() => { + throw err; + }) + ); +}; /***/ }), -/***/ 4294: +/***/ 8341: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = __nccwpck_require__(4219); +var once = __nccwpck_require__(1223) +var eos = __nccwpck_require__(1205) +var fs = __nccwpck_require__(5747) // we only need fs to get the ReadStream and WriteStream prototypes +var noop = function () {} +var ancient = /^v?\.0/.test(process.version) -/***/ }), +var isFn = function (fn) { + return typeof fn === 'function' +} -/***/ 4219: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +var isFS = function (stream) { + if (!ancient) return false // newer node version do not need to care about fs is a special way + if (!fs) return false // browser + return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) +} -"use strict"; +var isRequest = function (stream) { + return stream.setHeader && isFn(stream.abort) +} +var destroyer = function (stream, reading, writing, callback) { + callback = once(callback) -var net = __nccwpck_require__(1631); -var tls = __nccwpck_require__(4016); -var http = __nccwpck_require__(8605); -var https = __nccwpck_require__(7211); -var events = __nccwpck_require__(8614); -var assert = __nccwpck_require__(2357); -var util = __nccwpck_require__(1669); + var closed = false + stream.on('close', function () { + closed = true + }) + eos(stream, {readable: reading, writable: writing}, function (err) { + if (err) return callback(err) + closed = true + callback() + }) -exports.httpOverHttp = httpOverHttp; -exports.httpsOverHttp = httpsOverHttp; -exports.httpOverHttps = httpOverHttps; -exports.httpsOverHttps = httpsOverHttps; + var destroyed = false + return function (err) { + if (closed) return + if (destroyed) return + destroyed = true + if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks + if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want -function httpOverHttp(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - return agent; -} + if (isFn(stream.destroy)) return stream.destroy() -function httpsOverHttp(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - agent.createSocket = createSecureSocket; - agent.defaultPort = 443; - return agent; + callback(err || new Error('stream was destroyed')) + } } -function httpOverHttps(options) { - var agent = new TunnelingAgent(options); - agent.request = https.request; - return agent; +var call = function (fn) { + fn() } -function httpsOverHttps(options) { - var agent = new TunnelingAgent(options); - agent.request = https.request; - agent.createSocket = createSecureSocket; - agent.defaultPort = 443; - return agent; +var pipe = function (from, to) { + return from.pipe(to) } +var pump = function () { + var streams = Array.prototype.slice.call(arguments) + var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop -function TunnelingAgent(options) { - var self = this; - self.options = options || {}; - self.proxyOptions = self.options.proxy || {}; - self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; - self.requests = []; - self.sockets = []; + if (Array.isArray(streams[0])) streams = streams[0] + if (streams.length < 2) throw new Error('pump requires two streams per minimum') - self.on('free', function onFree(socket, host, port, localAddress) { - var options = toOptions(host, port, localAddress); - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i]; - if (pending.host === options.host && pending.port === options.port) { - // Detect the request to connect same origin server, - // reuse the connection. - self.requests.splice(i, 1); - pending.request.onSocket(socket); - return; - } - } - socket.destroy(); - self.removeSocket(socket); - }); -} -util.inherits(TunnelingAgent, events.EventEmitter); + var error + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1 + var writing = i > 0 + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err + if (err) destroys.forEach(call) + if (reading) return + destroys.forEach(call) + callback(error) + }) + }) -TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { - var self = this; - var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); + return streams.reduce(pipe) +} - if (self.sockets.length >= this.maxSockets) { - // We are over limit so we'll add it to the queue. - self.requests.push(options); - return; - } +module.exports = pump - // If we are under maxSockets create a new one. - self.createSocket(options, function(socket) { - socket.on('free', onFree); - socket.on('close', onCloseOrRemove); - socket.on('agentRemove', onCloseOrRemove); - req.onSocket(socket); - function onFree() { - self.emit('free', socket, options); - } +/***/ }), - function onCloseOrRemove(err) { - self.removeSocket(socket); - socket.removeListener('free', onFree); - socket.removeListener('close', onCloseOrRemove); - socket.removeListener('agentRemove', onCloseOrRemove); - } - }); -}; +/***/ 4931: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { - var self = this; - var placeholder = {}; - self.sockets.push(placeholder); +// Note: since nyc uses this module to output coverage, any lines +// that are in the direct sync flow of nyc's outputCoverage are +// ignored, since we can never get coverage for them. +// grab a reference to node's real process object right away +var process = global.process - var connectOptions = mergeOptions({}, self.proxyOptions, { - method: 'CONNECT', - path: options.host + ':' + options.port, - agent: false, - headers: { - host: options.host + ':' + options.port - } - }); - if (options.localAddress) { - connectOptions.localAddress = options.localAddress; - } - if (connectOptions.proxyAuth) { - connectOptions.headers = connectOptions.headers || {}; - connectOptions.headers['Proxy-Authorization'] = 'Basic ' + - new Buffer(connectOptions.proxyAuth).toString('base64'); +const processOk = function (process) { + return process && + typeof process === 'object' && + typeof process.removeListener === 'function' && + typeof process.emit === 'function' && + typeof process.reallyExit === 'function' && + typeof process.listeners === 'function' && + typeof process.kill === 'function' && + typeof process.pid === 'number' && + typeof process.on === 'function' +} + +// some kind of non-node environment, just no-op +/* istanbul ignore if */ +if (!processOk(process)) { + module.exports = function () { + return function () {} } +} else { + var assert = __nccwpck_require__(2357) + var signals = __nccwpck_require__(3710) + var isWin = /^win/i.test(process.platform) - debug('making CONNECT request'); - var connectReq = self.request(connectOptions); - connectReq.useChunkedEncodingByDefault = false; // for v0.6 - connectReq.once('response', onResponse); // for v0.6 - connectReq.once('upgrade', onUpgrade); // for v0.6 - connectReq.once('connect', onConnect); // for v0.7 or later - connectReq.once('error', onError); - connectReq.end(); + var EE = __nccwpck_require__(8614) + /* istanbul ignore if */ + if (typeof EE !== 'function') { + EE = EE.EventEmitter + } - function onResponse(res) { - // Very hacky. This is necessary to avoid http-parser leaks. - res.upgrade = true; + var emitter + if (process.__signal_exit_emitter__) { + emitter = process.__signal_exit_emitter__ + } else { + emitter = process.__signal_exit_emitter__ = new EE() + emitter.count = 0 + emitter.emitted = {} } - function onUpgrade(res, socket, head) { - // Hacky. - process.nextTick(function() { - onConnect(res, socket, head); - }); + // Because this emitter is a global, we have to check to see if a + // previous version of this library failed to enable infinite listeners. + // I know what you're about to say. But literally everything about + // signal-exit is a compromise with evil. Get used to it. + if (!emitter.infinite) { + emitter.setMaxListeners(Infinity) + emitter.infinite = true } - function onConnect(res, socket, head) { - connectReq.removeAllListeners(); - socket.removeAllListeners(); + module.exports = function (cb, opts) { + /* istanbul ignore if */ + if (!processOk(global.process)) { + return function () {} + } + assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') - if (res.statusCode !== 200) { - debug('tunneling socket could not be established, statusCode=%d', - res.statusCode); - socket.destroy(); - var error = new Error('tunneling socket could not be established, ' + - 'statusCode=' + res.statusCode); - error.code = 'ECONNRESET'; - options.request.emit('error', error); - self.removeSocket(placeholder); - return; + if (loaded === false) { + load() } - if (head.length > 0) { - debug('got illegal response body from proxy'); - socket.destroy(); - var error = new Error('got illegal response body from proxy'); - error.code = 'ECONNRESET'; - options.request.emit('error', error); - self.removeSocket(placeholder); - return; + + var ev = 'exit' + if (opts && opts.alwaysLast) { + ev = 'afterexit' } - debug('tunneling connection has established'); - self.sockets[self.sockets.indexOf(placeholder)] = socket; - return cb(socket); + + var remove = function () { + emitter.removeListener(ev, cb) + if (emitter.listeners('exit').length === 0 && + emitter.listeners('afterexit').length === 0) { + unload() + } + } + emitter.on(ev, cb) + + return remove } - function onError(cause) { - connectReq.removeAllListeners(); + var unload = function unload () { + if (!loaded || !processOk(global.process)) { + return + } + loaded = false - debug('tunneling socket could not be established, cause=%s\n', - cause.message, cause.stack); - var error = new Error('tunneling socket could not be established, ' + - 'cause=' + cause.message); - error.code = 'ECONNRESET'; - options.request.emit('error', error); - self.removeSocket(placeholder); + signals.forEach(function (sig) { + try { + process.removeListener(sig, sigListeners[sig]) + } catch (er) {} + }) + process.emit = originalProcessEmit + process.reallyExit = originalProcessReallyExit + emitter.count -= 1 } -}; + module.exports.unload = unload -TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { - var pos = this.sockets.indexOf(socket) - if (pos === -1) { - return; + var emit = function emit (event, code, signal) { + /* istanbul ignore if */ + if (emitter.emitted[event]) { + return + } + emitter.emitted[event] = true + emitter.emit(event, code, signal) } - this.sockets.splice(pos, 1); - var pending = this.requests.shift(); - if (pending) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(pending, function(socket) { - pending.request.onSocket(socket); - }); + // { : , ... } + var sigListeners = {} + signals.forEach(function (sig) { + sigListeners[sig] = function listener () { + /* istanbul ignore if */ + if (!processOk(global.process)) { + return + } + // If there are no other listeners, an exit is coming! + // Simplest way: remove us and then re-send the signal. + // We know that this will kill the process, so we can + // safely emit now. + var listeners = process.listeners(sig) + if (listeners.length === emitter.count) { + unload() + emit('exit', null, sig) + /* istanbul ignore next */ + emit('afterexit', null, sig) + /* istanbul ignore next */ + if (isWin && sig === 'SIGHUP') { + // "SIGHUP" throws an `ENOSYS` error on Windows, + // so use a supported signal instead + sig = 'SIGINT' + } + /* istanbul ignore next */ + process.kill(process.pid, sig) + } + } + }) + + module.exports.signals = function () { + return signals } -}; -function createSecureSocket(options, cb) { - var self = this; - TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { - var hostHeader = options.request.getHeader('host'); - var tlsOptions = mergeOptions({}, self.options, { - socket: socket, - servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host - }); + var loaded = false - // 0 is dummy port for v0.6 - var secureSocket = tls.connect(0, tlsOptions); - self.sockets[self.sockets.indexOf(socket)] = secureSocket; - cb(secureSocket); - }); -} + var load = function load () { + if (loaded || !processOk(global.process)) { + return + } + loaded = true + + // This is the number of onSignalExit's that are in play. + // It's important so that we can count the correct number of + // listeners on signals, and don't wait for the other one to + // handle it instead of us. + emitter.count += 1 + signals = signals.filter(function (sig) { + try { + process.on(sig, sigListeners[sig]) + return true + } catch (er) { + return false + } + }) -function toOptions(host, port, localAddress) { - if (typeof host === 'string') { // since v0.10 - return { - host: host, - port: port, - localAddress: localAddress - }; + process.emit = processEmit + process.reallyExit = processReallyExit } - return host; // for v0.11 or later -} + module.exports.load = load -function mergeOptions(target) { - for (var i = 1, len = arguments.length; i < len; ++i) { - var overrides = arguments[i]; - if (typeof overrides === 'object') { - var keys = Object.keys(overrides); - for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { - var k = keys[j]; - if (overrides[k] !== undefined) { - target[k] = overrides[k]; - } - } + var originalProcessReallyExit = process.reallyExit + var processReallyExit = function processReallyExit (code) { + /* istanbul ignore if */ + if (!processOk(global.process)) { + return } + process.exitCode = code || /* istanbul ignore next */ 0 + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + originalProcessReallyExit.call(process, process.exitCode) } - return target; -} - -var debug; -if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { - var args = Array.prototype.slice.call(arguments); - if (typeof args[0] === 'string') { - args[0] = 'TUNNEL: ' + args[0]; + var originalProcessEmit = process.emit + var processEmit = function processEmit (ev, arg) { + if (ev === 'exit' && processOk(global.process)) { + /* istanbul ignore else */ + if (arg !== undefined) { + process.exitCode = arg + } + var ret = originalProcessEmit.apply(this, arguments) + /* istanbul ignore next */ + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + return ret } else { - args.unshift('TUNNEL:'); + return originalProcessEmit.apply(this, arguments) } - console.error.apply(console, args); } -} else { - debug = function() {}; } -exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 3710: +/***/ ((module) => { -"use strict"; +// This is not the set of all possible signals. +// +// It IS, however, the set of all signals that trigger +// an exit on either Linux or BSD systems. Linux is a +// superset of the signal names supported on BSD, and +// the unknown signals just fail to register, so we can +// catch that easily enough. +// +// Don't bother with SIGKILL. It's uncatchable, which +// means that we can't fire any callbacks anyway. +// +// If a user does happen to register a handler on a non- +// fatal signal like SIGWINCH or something, and then +// exit, it'll end up firing `process.emit('exit')`, so +// the handler will be fired anyway. +// +// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised +// artificially, inherently leave the process in a +// state from which it is not safe to try and enter JS +// listeners. +module.exports = [ + 'SIGABRT', + 'SIGALRM', + 'SIGHUP', + 'SIGINT', + 'SIGTERM' +] +if (process.platform !== 'win32') { + module.exports.push( + 'SIGVTALRM', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGUSR2', + 'SIGTRAP', + 'SIGSYS', + 'SIGQUIT', + 'SIGIOT' + // should detect profiler and enable/disable accordingly. + // see #21 + // 'SIGPROF' + ) +} -Object.defineProperty(exports, "__esModule", ({ value: true })); +if (process.platform === 'linux') { + module.exports.push( + 'SIGIO', + 'SIGPOLL', + 'SIGPWR', + 'SIGSTKFLT', + 'SIGUNUSED' + ) +} -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +/***/ }), - return ""; -} +/***/ 5515: +/***/ ((module) => { -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +"use strict"; + +module.exports = function (x) { + var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt(); + var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt(); + + if (x[x.length - 1] === lf) { + x = x.slice(0, x.length - 1); + } + + if (x[x.length - 1] === cr) { + x = x.slice(0, x.length - 1); + } + + return x; +}; /***/ }), -/***/ 4886: -/***/ ((module) => { +/***/ 4256: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -var conversions = {}; -module.exports = conversions; +var punycode = __nccwpck_require__(4213); +var mappingTable = __nccwpck_require__(68); -function sign(x) { - return x < 0 ? -1 : 1; -} +var PROCESSING_OPTIONS = { + TRANSITIONAL: 0, + NONTRANSITIONAL: 1 +}; -function evenRound(x) { - // Round x to the nearest integer, choosing the even integer if it lies halfway between two. - if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) - return Math.floor(x); - } else { - return Math.round(x); - } +function normalize(str) { // fix bug in v8 + return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000'); } -function createNumberConversion(bitLength, typeOpts) { - if (!typeOpts.unsigned) { - --bitLength; - } - const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); - const upperBound = Math.pow(2, bitLength) - 1; +function findStatus(val) { + var start = 0; + var end = mappingTable.length - 1; - const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); - const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); + while (start <= end) { + var mid = Math.floor((start + end) / 2); - return function(V, opts) { - if (!opts) opts = {}; + var target = mappingTable[mid]; + if (target[0][0] <= val && target[0][1] >= val) { + return target; + } else if (target[0][0] > val) { + end = mid - 1; + } else { + start = mid + 1; + } + } - let x = +V; + return null; +} - if (opts.enforceRange) { - if (!Number.isFinite(x)) { - throw new TypeError("Argument is not a finite number"); - } +var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; - x = sign(x) * Math.floor(Math.abs(x)); - if (x < lowerBound || x > upperBound) { - throw new TypeError("Argument is not in byte range"); - } +function countSymbols(string) { + return string + // replace every surrogate pair with a BMP symbol + .replace(regexAstralSymbols, '_') + // then get the length + .length; +} - return x; - } +function mapChars(domain_name, useSTD3, processing_option) { + var hasError = false; + var processed = ""; - if (!isNaN(x) && opts.clamp) { - x = evenRound(x); + var len = countSymbols(domain_name); + for (var i = 0; i < len; ++i) { + var codePoint = domain_name.codePointAt(i); + var status = findStatus(codePoint); - if (x < lowerBound) x = lowerBound; - if (x > upperBound) x = upperBound; - return x; + switch (status[1]) { + case "disallowed": + hasError = true; + processed += String.fromCodePoint(codePoint); + break; + case "ignored": + break; + case "mapped": + processed += String.fromCodePoint.apply(String, status[2]); + break; + case "deviation": + if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { + processed += String.fromCodePoint.apply(String, status[2]); + } else { + processed += String.fromCodePoint(codePoint); } - - if (!Number.isFinite(x) || x === 0) { - return 0; + break; + case "valid": + processed += String.fromCodePoint(codePoint); + break; + case "disallowed_STD3_mapped": + if (useSTD3) { + hasError = true; + processed += String.fromCodePoint(codePoint); + } else { + processed += String.fromCodePoint.apply(String, status[2]); } - - x = sign(x) * Math.floor(Math.abs(x)); - x = x % moduloVal; - - if (!typeOpts.unsigned && x >= moduloBound) { - return x - moduloVal; - } else if (typeOpts.unsigned) { - if (x < 0) { - x += moduloVal; - } else if (x === -0) { // don't return negative zero - return 0; - } + break; + case "disallowed_STD3_valid": + if (useSTD3) { + hasError = true; } - return x; + processed += String.fromCodePoint(codePoint); + break; } -} - -conversions["void"] = function () { - return undefined; -}; - -conversions["boolean"] = function (val) { - return !!val; -}; + } -conversions["byte"] = createNumberConversion(8, { unsigned: false }); -conversions["octet"] = createNumberConversion(8, { unsigned: true }); + return { + string: processed, + error: hasError + }; +} -conversions["short"] = createNumberConversion(16, { unsigned: false }); -conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); +var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; -conversions["long"] = createNumberConversion(32, { unsigned: false }); -conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); +function validateLabel(label, processing_option) { + if (label.substr(0, 4) === "xn--") { + label = punycode.toUnicode(label); + processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; + } -conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); -conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); + var error = false; -conversions["double"] = function (V) { - const x = +V; + if (normalize(label) !== label || + (label[3] === "-" && label[4] === "-") || + label[0] === "-" || label[label.length - 1] === "-" || + label.indexOf(".") !== -1 || + label.search(combiningMarksRegex) === 0) { + error = true; + } - if (!Number.isFinite(x)) { - throw new TypeError("Argument is not a finite floating-point value"); + var len = countSymbols(label); + for (var i = 0; i < len; ++i) { + var status = findStatus(label.codePointAt(i)); + if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") || + (processing === PROCESSING_OPTIONS.NONTRANSITIONAL && + status[1] !== "valid" && status[1] !== "deviation")) { + error = true; + break; } + } - return x; -}; + return { + label: label, + error: error + }; +} -conversions["unrestricted double"] = function (V) { - const x = +V; +function processing(domain_name, useSTD3, processing_option) { + var result = mapChars(domain_name, useSTD3, processing_option); + result.string = normalize(result.string); - if (isNaN(x)) { - throw new TypeError("Argument is NaN"); + var labels = result.string.split("."); + for (var i = 0; i < labels.length; ++i) { + try { + var validation = validateLabel(labels[i]); + labels[i] = validation.label; + result.error = result.error || validation.error; + } catch(e) { + result.error = true; } + } - return x; -}; - -// not quite valid, but good enough for JS -conversions["float"] = conversions["double"]; -conversions["unrestricted float"] = conversions["unrestricted double"]; - -conversions["DOMString"] = function (V, opts) { - if (!opts) opts = {}; + return { + string: labels.join("."), + error: result.error + }; +} - if (opts.treatNullAsEmptyString && V === null) { - return ""; +module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { + var result = processing(domain_name, useSTD3, processing_option); + var labels = result.string.split("."); + labels = labels.map(function(l) { + try { + return punycode.toASCII(l); + } catch(e) { + result.error = true; + return l; } + }); - return String(V); -}; + if (verifyDnsLength) { + var total = labels.slice(0, labels.length - 1).join(".").length; + if (total.length > 253 || total.length === 0) { + result.error = true; + } -conversions["ByteString"] = function (V, opts) { - const x = String(V); - let c = undefined; - for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { - if (c > 255) { - throw new TypeError("Argument is not a valid bytestring"); - } + for (var i=0; i < labels.length; ++i) { + if (labels.length > 63 || labels.length === 0) { + result.error = true; + break; + } } + } - return x; + if (result.error) return null; + return labels.join("."); }; -conversions["USVString"] = function (V) { - const S = String(V); - const n = S.length; - const U = []; - for (let i = 0; i < n; ++i) { - const c = S.charCodeAt(i); - if (c < 0xD800 || c > 0xDFFF) { - U.push(String.fromCodePoint(c)); - } else if (0xDC00 <= c && c <= 0xDFFF) { - U.push(String.fromCodePoint(0xFFFD)); - } else { - if (i === n - 1) { - U.push(String.fromCodePoint(0xFFFD)); - } else { - const d = S.charCodeAt(i + 1); - if (0xDC00 <= d && d <= 0xDFFF) { - const a = c & 0x3FF; - const b = d & 0x3FF; - U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); - ++i; - } else { - U.push(String.fromCodePoint(0xFFFD)); - } - } - } - } +module.exports.toUnicode = function(domain_name, useSTD3) { + var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); - return U.join(''); + return { + domain: result.string, + error: result.error + }; }; -conversions["Date"] = function (V, opts) { - if (!(V instanceof Date)) { - throw new TypeError("Argument is not a Date object"); - } - if (isNaN(V)) { - return undefined; - } +module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; - return V; -}; -conversions["RegExp"] = function (V, opts) { - if (!(V instanceof RegExp)) { - V = new RegExp(V); - } +/***/ }), - return V; -}; +/***/ 4294: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = __nccwpck_require__(4219); /***/ }), -/***/ 7537: +/***/ 4219: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -const usm = __nccwpck_require__(2158); -exports.implementation = class URLImpl { - constructor(constructorArgs) { - const url = constructorArgs[0]; - const base = constructorArgs[1]; +var net = __nccwpck_require__(1631); +var tls = __nccwpck_require__(4016); +var http = __nccwpck_require__(8605); +var https = __nccwpck_require__(7211); +var events = __nccwpck_require__(8614); +var assert = __nccwpck_require__(2357); +var util = __nccwpck_require__(1669); - let parsedBase = null; - if (base !== undefined) { - parsedBase = usm.basicURLParse(base); - if (parsedBase === "failure") { - throw new TypeError("Invalid base URL"); - } - } - const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); - if (parsedURL === "failure") { - throw new TypeError("Invalid URL"); - } +exports.httpOverHttp = httpOverHttp; +exports.httpsOverHttp = httpsOverHttp; +exports.httpOverHttps = httpOverHttps; +exports.httpsOverHttps = httpsOverHttps; - this._url = parsedURL; - // TODO: query stuff - } +function httpOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + return agent; +} + +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + +function httpOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; +} + +function httpsOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + - get href() { - return usm.serializeURL(this._url); - } +function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; - set href(v) { - const parsedURL = usm.basicURLParse(v); - if (parsedURL === "failure") { - throw new TypeError("Invalid URL"); + self.on('free', function onFree(socket, host, port, localAddress) { + var options = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options.host && pending.port === options.port) { + // Detect the request to connect same origin server, + // reuse the connection. + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } } + socket.destroy(); + self.removeSocket(socket); + }); +} +util.inherits(TunnelingAgent, events.EventEmitter); - this._url = parsedURL; - } - - get origin() { - return usm.serializeURLOrigin(this._url); - } +TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); - get protocol() { - return this._url.scheme + ":"; + if (self.sockets.length >= this.maxSockets) { + // We are over limit so we'll add it to the queue. + self.requests.push(options); + return; } - set protocol(v) { - usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" }); - } + // If we are under maxSockets create a new one. + self.createSocket(options, function(socket) { + socket.on('free', onFree); + socket.on('close', onCloseOrRemove); + socket.on('agentRemove', onCloseOrRemove); + req.onSocket(socket); - get username() { - return this._url.username; - } + function onFree() { + self.emit('free', socket, options); + } - set username(v) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener('free', onFree); + socket.removeListener('close', onCloseOrRemove); + socket.removeListener('agentRemove', onCloseOrRemove); } + }); +}; - usm.setTheUsername(this._url, v); - } +TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); - get password() { - return this._url.password; + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: 'CONNECT', + path: options.host + ':' + options.port, + agent: false, + headers: { + host: options.host + ':' + options.port + } + }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers['Proxy-Authorization'] = 'Basic ' + + new Buffer(connectOptions.proxyAuth).toString('base64'); } - set password(v) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } + debug('making CONNECT request'); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; // for v0.6 + connectReq.once('response', onResponse); // for v0.6 + connectReq.once('upgrade', onUpgrade); // for v0.6 + connectReq.once('connect', onConnect); // for v0.7 or later + connectReq.once('error', onError); + connectReq.end(); - usm.setThePassword(this._url, v); + function onResponse(res) { + // Very hacky. This is necessary to avoid http-parser leaks. + res.upgrade = true; } - get host() { - const url = this._url; + function onUpgrade(res, socket, head) { + // Hacky. + process.nextTick(function() { + onConnect(res, socket, head); + }); + } - if (url.host === null) { - return ""; - } + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); - if (url.port === null) { - return usm.serializeHost(url.host); + if (res.statusCode !== 200) { + debug('tunneling socket could not be established, statusCode=%d', + res.statusCode); + socket.destroy(); + var error = new Error('tunneling socket could not be established, ' + + 'statusCode=' + res.statusCode); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; } - - return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); - } - - set host(v) { - if (this._url.cannotBeABaseURL) { + if (head.length > 0) { + debug('got illegal response body from proxy'); + socket.destroy(); + var error = new Error('got illegal response body from proxy'); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); return; } - - usm.basicURLParse(v, { url: this._url, stateOverride: "host" }); + debug('tunneling connection has established'); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); } - get hostname() { - if (this._url.host === null) { - return ""; - } + function onError(cause) { + connectReq.removeAllListeners(); - return usm.serializeHost(this._url.host); + debug('tunneling socket could not be established, cause=%s\n', + cause.message, cause.stack); + var error = new Error('tunneling socket could not be established, ' + + 'cause=' + cause.message); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); } +}; - set hostname(v) { - if (this._url.cannotBeABaseURL) { - return; - } - - usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" }); +TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket) + if (pos === -1) { + return; } + this.sockets.splice(pos, 1); - get port() { - if (this._url.port === null) { - return ""; - } - - return usm.serializeInteger(this._url.port); + var pending = this.requests.shift(); + if (pending) { + // If we have pending requests and a socket gets closed a new one + // needs to be created to take over in the pool for the one that closed. + this.createSocket(pending, function(socket) { + pending.request.onSocket(socket); + }); } +}; - set port(v) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } - - if (v === "") { - this._url.port = null; - } else { - usm.basicURLParse(v, { url: this._url, stateOverride: "port" }); - } - } +function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader('host'); + var tlsOptions = mergeOptions({}, self.options, { + socket: socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host + }); - get pathname() { - if (this._url.cannotBeABaseURL) { - return this._url.path[0]; - } + // 0 is dummy port for v0.6 + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); +} - if (this._url.path.length === 0) { - return ""; - } - return "/" + this._url.path.join("/"); +function toOptions(host, port, localAddress) { + if (typeof host === 'string') { // since v0.10 + return { + host: host, + port: port, + localAddress: localAddress + }; } + return host; // for v0.11 or later +} - set pathname(v) { - if (this._url.cannotBeABaseURL) { - return; - } - - this._url.path = []; - usm.basicURLParse(v, { url: this._url, stateOverride: "path start" }); +function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === 'object') { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== undefined) { + target[k] = overrides[k]; + } + } + } } + return target; +} - get search() { - if (this._url.query === null || this._url.query === "") { - return ""; - } - return "?" + this._url.query; +var debug; +if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === 'string') { + args[0] = 'TUNNEL: ' + args[0]; + } else { + args.unshift('TUNNEL:'); + } + console.error.apply(console, args); } +} else { + debug = function() {}; +} +exports.debug = debug; // for test - set search(v) { - // TODO: query stuff - - const url = this._url; - if (v === "") { - url.query = null; - return; - } +/***/ }), - const input = v[0] === "?" ? v.substring(1) : v; - url.query = ""; - usm.basicURLParse(input, { url, stateOverride: "query" }); - } +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { - get hash() { - if (this._url.fragment === null || this._url.fragment === "") { - return ""; - } +"use strict"; - return "#" + this._url.fragment; - } - set hash(v) { - if (v === "") { - this._url.fragment = null; - return; - } +Object.defineProperty(exports, "__esModule", ({ value: true })); - const input = v[0] === "#" ? v.substring(1) : v; - this._url.fragment = ""; - usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; } - toJSON() { - return this.href; + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; } -}; + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map /***/ }), -/***/ 3394: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); -const conversions = __nccwpck_require__(4886); -const utils = __nccwpck_require__(3185); -const Impl = __nccwpck_require__(7537); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js -const impl = utils.implSymbol; +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate -function URL(url) { - if (!this || this[impl] || !(this instanceof URL)) { - throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); - } - if (arguments.length < 1) { - throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); - } - const args = []; - for (let i = 0; i < arguments.length && i < 2; ++i) { - args[i] = arguments[i]; - } - args[0] = conversions["USVString"](args[0]); - if (args[1] !== undefined) { - args[1] = conversions["USVString"](args[1]); +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; } - module.exports.setup(this, args); + return rnds8Pool.slice(poolPtr, poolPtr += 16); } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js -URL.prototype.toJSON = function toJSON() { - if (!this || !module.exports.is(this)) { - throw new TypeError("Illegal invocation"); - } - const args = []; - for (let i = 0; i < arguments.length && i < 0; ++i) { - args[i] = arguments[i]; - } - return this[impl].toJSON.apply(this[impl], args); -}; -Object.defineProperty(URL.prototype, "href", { - get() { - return this[impl].href; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].href = V; - }, - enumerable: true, - configurable: true -}); -URL.prototype.toString = function () { - if (!this || !module.exports.is(this)) { - throw new TypeError("Illegal invocation"); - } - return this.href; -}; +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} -Object.defineProperty(URL.prototype, "origin", { - get() { - return this[impl].origin; - }, - enumerable: true, - configurable: true -}); +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js -Object.defineProperty(URL.prototype, "protocol", { - get() { - return this[impl].protocol; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].protocol = V; - }, - enumerable: true, - configurable: true -}); +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ -Object.defineProperty(URL.prototype, "username", { - get() { - return this[impl].username; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].username = V; - }, - enumerable: true, - configurable: true -}); +const byteToHex = []; -Object.defineProperty(URL.prototype, "password", { - get() { - return this[impl].password; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].password = V; - }, - enumerable: true, - configurable: true -}); +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} -Object.defineProperty(URL.prototype, "host", { - get() { - return this[impl].host; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].host = V; - }, - enumerable: true, - configurable: true -}); +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields -Object.defineProperty(URL.prototype, "hostname", { - get() { - return this[impl].hostname; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].hostname = V; - }, - enumerable: true, - configurable: true -}); + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } -Object.defineProperty(URL.prototype, "port", { - get() { - return this[impl].port; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].port = V; - }, - enumerable: true, - configurable: true -}); + return uuid; +} -Object.defineProperty(URL.prototype, "pathname", { - get() { - return this[impl].pathname; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].pathname = V; - }, - enumerable: true, - configurable: true -}); +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js -Object.defineProperty(URL.prototype, "search", { - get() { - return this[impl].search; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].search = V; - }, - enumerable: true, - configurable: true -}); + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html -Object.defineProperty(URL.prototype, "hash", { - get() { - return this[impl].hash; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].hash = V; - }, - enumerable: true, - configurable: true -}); +let _nodeId; +let _clockseq; // Previous uuid creation time -module.exports = { - is(obj) { - return !!obj && obj[impl] instanceof Impl.implementation; - }, - create(constructorArgs, privateData) { - let obj = Object.create(URL.prototype); - this.setup(obj, constructorArgs, privateData); - return obj; - }, - setup(obj, constructorArgs, privateData) { - if (!privateData) privateData = {}; - privateData.wrapper = obj; - obj[impl] = new Impl.implementation(constructorArgs, privateData); - obj[impl][utils.wrapperSymbol] = obj; - }, - interface: URL, - expose: { - Window: { URL: URL }, - Worker: { URL: URL } - } -}; +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. -/***/ }), + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock -/***/ 8665: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) -"use strict"; + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval -exports.URL = __nccwpck_require__(3394).interface; -exports.serializeURL = __nccwpck_require__(2158).serializeURL; -exports.serializeURLOrigin = __nccwpck_require__(2158).serializeURLOrigin; -exports.basicURLParse = __nccwpck_require__(2158).basicURLParse; -exports.setTheUsername = __nccwpck_require__(2158).setTheUsername; -exports.setThePassword = __nccwpck_require__(2158).setThePassword; -exports.serializeHost = __nccwpck_require__(2158).serializeHost; -exports.serializeInteger = __nccwpck_require__(2158).serializeInteger; -exports.parseURL = __nccwpck_require__(2158).parseURL; + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested -/***/ }), -/***/ 2158: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } -"use strict"; + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch -const punycode = __nccwpck_require__(4213); -const tr46 = __nccwpck_require__(4256); - -const specialSchemes = { - ftp: 21, - file: null, - gopher: 70, - http: 80, - https: 443, - ws: 80, - wss: 443 -}; + msecs += 12219292800000; // `time_low` -const failure = Symbol("failure"); + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` -function countSymbols(str) { - return punycode.ucs2.decode(str).length; -} + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` -function at(input, idx) { - const c = input[idx]; - return isNaN(c) ? undefined : String.fromCodePoint(c); -} + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version -function isASCIIDigit(c) { - return c >= 0x30 && c <= 0x39; -} + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) -function isASCIIAlpha(c) { - return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A); -} + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` -function isASCIIAlphanumeric(c) { - return isASCIIAlpha(c) || isASCIIDigit(c); -} + b[i++] = clockseq & 0xff; // `node` -function isASCIIHex(c) { - return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66); -} + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } -function isSingleDot(buffer) { - return buffer === "." || buffer.toLowerCase() === "%2e"; + return buf || esm_node_stringify(b); } -function isDoubleDot(buffer) { - buffer = buffer.toLowerCase(); - return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; -} +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js -function isWindowsDriveLetterCodePoints(cp1, cp2) { - return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); -} -function isWindowsDriveLetterString(string) { - return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); -} +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } -function isNormalizedWindowsDriveLetterString(string) { - return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; -} + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ -function containsForbiddenHostCodePoint(string) { - return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; -} + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ -function containsForbiddenHostCodePointExcludingPercent(string) { - return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; -} + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ -function isSpecialScheme(scheme) { - return specialSchemes[scheme] !== undefined; -} + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ -function isSpecial(url) { - return isSpecialScheme(url.scheme); -} + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) -function defaultPort(scheme) { - return specialSchemes[scheme]; + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; } -function percentEncode(c) { - let hex = c.toString(16).toUpperCase(); - if (hex.length === 1) { - hex = "0" + hex; - } +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js - return "%" + hex; -} -function utf8PercentEncode(c) { - const buf = new Buffer(c); - let str = ""; +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape - for (let i = 0; i < buf.length; ++i) { - str += percentEncode(buf[i]); + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); } - return str; + return bytes; } -function utf8PercentDecode(str) { - const input = new Buffer(str); - const output = []; - for (let i = 0; i < input.length; ++i) { - if (input[i] !== 37) { - output.push(input[i]); - } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) { - output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16)); - i += 2; - } else { - output.push(input[i]); +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); } - } - return new Buffer(output).toString(); -} -function isC0ControlPercentEncode(c) { - return c <= 0x1F || c > 0x7E; -} + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } -const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); -function isPathPercentEncode(c) { - return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c); -} + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` -const extraUserinfoPercentEncodeSet = - new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); -function isUserinfoPercentEncode(c) { - return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c); -} -function percentEncodeChar(c, encodeSetPredicate) { - const cStr = String.fromCodePoint(c); + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; - if (encodeSetPredicate(c)) { - return utf8PercentEncode(cStr); - } + if (buf) { + offset = offset || 0; - return cStr; -} + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } -function parseIPv4Number(input) { - let R = 10; + return buf; + } - if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { - input = input.substring(2); - R = 16; - } else if (input.length >= 2 && input.charAt(0) === "0") { - input = input.substring(1); - R = 8; - } + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) - if (input === "") { - return 0; - } - const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/); - if (regex.test(input)) { - return failure; - } + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support - return parseInt(input, R); + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -function parseIPv4(input) { - const parts = input.split("."); - if (parts[parts.length - 1] === "") { - if (parts.length > 1) { - parts.pop(); - } - } - if (parts.length > 4) { - return input; +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - const numbers = []; - for (const part of parts) { - if (part === "") { - return input; - } - const n = parseIPv4Number(part); - if (n === failure) { - return input; - } + return external_crypto_default().createHash('md5').update(bytes).digest(); +} - numbers.push(n); - } +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js - for (let i = 0; i < numbers.length - 1; ++i) { - if (numbers[i] > 255) { - return failure; - } - } - if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { - return failure; - } - let ipv4 = numbers.pop(); - let counter = 0; +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js - for (const n of numbers) { - ipv4 += n * Math.pow(256, 3 - counter); - ++counter; - } - return ipv4; -} -function serializeIPv4(address) { - let output = ""; - let n = address; +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - for (let i = 1; i <= 4; ++i) { - output = String(n % 256) + output; - if (i !== 4) { - output = "." + output; + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } - n = Math.floor(n / 256); + + return buf; } - return output; + return esm_node_stringify(rnds); } -function parseIPv6(input) { - const address = [0, 0, 0, 0, 0, 0, 0, 0]; - let pieceIndex = 0; - let compress = null; - let pointer = 0; +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - input = punycode.ucs2.decode(input); - - if (input[pointer] === 58) { - if (input[pointer + 1] !== 58) { - return failure; - } - pointer += 2; - ++pieceIndex; - compress = pieceIndex; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - while (pointer < input.length) { - if (pieceIndex === 8) { - return failure; - } + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} - if (input[pointer] === 58) { - if (compress !== null) { - return failure; - } - ++pointer; - ++pieceIndex; - compress = pieceIndex; - continue; - } +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js - let value = 0; - let length = 0; - while (length < 4 && isASCIIHex(input[pointer])) { - value = value * 0x10 + parseInt(at(input, pointer), 16); - ++pointer; - ++length; - } +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js - if (input[pointer] === 46) { - if (length === 0) { - return failure; - } - pointer -= length; +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } - if (pieceIndex > 6) { - return failure; - } + return parseInt(uuid.substr(14, 1), 16); +} - let numbersSeen = 0; +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js - while (input[pointer] !== undefined) { - let ipv4Piece = null; - if (numbersSeen > 0) { - if (input[pointer] === 46 && numbersSeen < 4) { - ++pointer; - } else { - return failure; - } - } - if (!isASCIIDigit(input[pointer])) { - return failure; - } - while (isASCIIDigit(input[pointer])) { - const number = parseInt(at(input, pointer)); - if (ipv4Piece === null) { - ipv4Piece = number; - } else if (ipv4Piece === 0) { - return failure; - } else { - ipv4Piece = ipv4Piece * 10 + number; - } - if (ipv4Piece > 255) { - return failure; - } - ++pointer; - } - address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; - ++numbersSeen; - if (numbersSeen === 2 || numbersSeen === 4) { - ++pieceIndex; - } - } - if (numbersSeen !== 4) { - return failure; - } - break; - } else if (input[pointer] === 58) { - ++pointer; - if (input[pointer] === undefined) { - return failure; - } - } else if (input[pointer] !== undefined) { - return failure; - } - address[pieceIndex] = value; - ++pieceIndex; - } +/***/ }), - if (compress !== null) { - let swaps = pieceIndex - compress; - pieceIndex = 7; - while (pieceIndex !== 0 && swaps > 0) { - const temp = address[compress + swaps - 1]; - address[compress + swaps - 1] = address[pieceIndex]; - address[pieceIndex] = temp; - --pieceIndex; - --swaps; - } - } else if (compress === null && pieceIndex !== 8) { - return failure; - } +/***/ 4886: +/***/ ((module) => { + +"use strict"; - return address; -} -function serializeIPv6(address) { - let output = ""; - const seqResult = findLongestZeroSequence(address); - const compress = seqResult.idx; - let ignore0 = false; +var conversions = {}; +module.exports = conversions; + +function sign(x) { + return x < 0 ? -1 : 1; +} - for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { - if (ignore0 && address[pieceIndex] === 0) { - continue; - } else if (ignore0) { - ignore0 = false; +function evenRound(x) { + // Round x to the nearest integer, choosing the even integer if it lies halfway between two. + if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) + return Math.floor(x); + } else { + return Math.round(x); } +} - if (compress === pieceIndex) { - const separator = pieceIndex === 0 ? "::" : ":"; - output += separator; - ignore0 = true; - continue; +function createNumberConversion(bitLength, typeOpts) { + if (!typeOpts.unsigned) { + --bitLength; } + const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); + const upperBound = Math.pow(2, bitLength) - 1; - output += address[pieceIndex].toString(16); + const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); + const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); - if (pieceIndex !== 7) { - output += ":"; - } - } + return function(V, opts) { + if (!opts) opts = {}; - return output; -} + let x = +V; -function parseHost(input, isSpecialArg) { - if (input[0] === "[") { - if (input[input.length - 1] !== "]") { - return failure; - } + if (opts.enforceRange) { + if (!Number.isFinite(x)) { + throw new TypeError("Argument is not a finite number"); + } - return parseIPv6(input.substring(1, input.length - 1)); - } + x = sign(x) * Math.floor(Math.abs(x)); + if (x < lowerBound || x > upperBound) { + throw new TypeError("Argument is not in byte range"); + } - if (!isSpecialArg) { - return parseOpaqueHost(input); - } + return x; + } - const domain = utf8PercentDecode(input); - const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); - if (asciiDomain === null) { - return failure; - } + if (!isNaN(x) && opts.clamp) { + x = evenRound(x); - if (containsForbiddenHostCodePoint(asciiDomain)) { - return failure; - } + if (x < lowerBound) x = lowerBound; + if (x > upperBound) x = upperBound; + return x; + } - const ipv4Host = parseIPv4(asciiDomain); - if (typeof ipv4Host === "number" || ipv4Host === failure) { - return ipv4Host; - } + if (!Number.isFinite(x) || x === 0) { + return 0; + } - return asciiDomain; -} + x = sign(x) * Math.floor(Math.abs(x)); + x = x % moduloVal; -function parseOpaqueHost(input) { - if (containsForbiddenHostCodePointExcludingPercent(input)) { - return failure; - } + if (!typeOpts.unsigned && x >= moduloBound) { + return x - moduloVal; + } else if (typeOpts.unsigned) { + if (x < 0) { + x += moduloVal; + } else if (x === -0) { // don't return negative zero + return 0; + } + } - let output = ""; - const decoded = punycode.ucs2.decode(input); - for (let i = 0; i < decoded.length; ++i) { - output += percentEncodeChar(decoded[i], isC0ControlPercentEncode); - } - return output; + return x; + } } -function findLongestZeroSequence(arr) { - let maxIdx = null; - let maxLen = 1; // only find elements > 1 - let currStart = null; - let currLen = 0; +conversions["void"] = function () { + return undefined; +}; - for (let i = 0; i < arr.length; ++i) { - if (arr[i] !== 0) { - if (currLen > maxLen) { - maxIdx = currStart; - maxLen = currLen; - } +conversions["boolean"] = function (val) { + return !!val; +}; - currStart = null; - currLen = 0; - } else { - if (currStart === null) { - currStart = i; - } - ++currLen; - } - } +conversions["byte"] = createNumberConversion(8, { unsigned: false }); +conversions["octet"] = createNumberConversion(8, { unsigned: true }); - // if trailing zeros - if (currLen > maxLen) { - maxIdx = currStart; - maxLen = currLen; - } +conversions["short"] = createNumberConversion(16, { unsigned: false }); +conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); - return { - idx: maxIdx, - len: maxLen - }; -} +conversions["long"] = createNumberConversion(32, { unsigned: false }); +conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); -function serializeHost(host) { - if (typeof host === "number") { - return serializeIPv4(host); - } +conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); +conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); - // IPv6 serializer - if (host instanceof Array) { - return "[" + serializeIPv6(host) + "]"; - } +conversions["double"] = function (V) { + const x = +V; - return host; -} + if (!Number.isFinite(x)) { + throw new TypeError("Argument is not a finite floating-point value"); + } -function trimControlChars(url) { - return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); -} + return x; +}; -function trimTabAndNewline(url) { - return url.replace(/\u0009|\u000A|\u000D/g, ""); -} +conversions["unrestricted double"] = function (V) { + const x = +V; -function shortenPath(url) { - const path = url.path; - if (path.length === 0) { - return; - } - if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { - return; - } + if (isNaN(x)) { + throw new TypeError("Argument is NaN"); + } - path.pop(); -} + return x; +}; -function includesCredentials(url) { - return url.username !== "" || url.password !== ""; -} +// not quite valid, but good enough for JS +conversions["float"] = conversions["double"]; +conversions["unrestricted float"] = conversions["unrestricted double"]; -function cannotHaveAUsernamePasswordPort(url) { - return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; -} +conversions["DOMString"] = function (V, opts) { + if (!opts) opts = {}; -function isNormalizedWindowsDriveLetter(string) { - return /^[A-Za-z]:$/.test(string); -} + if (opts.treatNullAsEmptyString && V === null) { + return ""; + } -function URLStateMachine(input, base, encodingOverride, url, stateOverride) { - this.pointer = 0; - this.input = input; - this.base = base || null; - this.encodingOverride = encodingOverride || "utf-8"; - this.stateOverride = stateOverride; - this.url = url; - this.failure = false; - this.parseError = false; + return String(V); +}; - if (!this.url) { - this.url = { - scheme: "", - username: "", - password: "", - host: null, - port: null, - path: [], - query: null, - fragment: null, +conversions["ByteString"] = function (V, opts) { + const x = String(V); + let c = undefined; + for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { + if (c > 255) { + throw new TypeError("Argument is not a valid bytestring"); + } + } - cannotBeABaseURL: false - }; + return x; +}; - const res = trimControlChars(this.input); - if (res !== this.input) { - this.parseError = true; +conversions["USVString"] = function (V) { + const S = String(V); + const n = S.length; + const U = []; + for (let i = 0; i < n; ++i) { + const c = S.charCodeAt(i); + if (c < 0xD800 || c > 0xDFFF) { + U.push(String.fromCodePoint(c)); + } else if (0xDC00 <= c && c <= 0xDFFF) { + U.push(String.fromCodePoint(0xFFFD)); + } else { + if (i === n - 1) { + U.push(String.fromCodePoint(0xFFFD)); + } else { + const d = S.charCodeAt(i + 1); + if (0xDC00 <= d && d <= 0xDFFF) { + const a = c & 0x3FF; + const b = d & 0x3FF; + U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); + ++i; + } else { + U.push(String.fromCodePoint(0xFFFD)); + } + } + } } - this.input = res; - } - const res = trimTabAndNewline(this.input); - if (res !== this.input) { - this.parseError = true; - } - this.input = res; + return U.join(''); +}; - this.state = stateOverride || "scheme start"; +conversions["Date"] = function (V, opts) { + if (!(V instanceof Date)) { + throw new TypeError("Argument is not a Date object"); + } + if (isNaN(V)) { + return undefined; + } - this.buffer = ""; - this.atFlag = false; - this.arrFlag = false; - this.passwordTokenSeenFlag = false; + return V; +}; - this.input = punycode.ucs2.decode(this.input); +conversions["RegExp"] = function (V, opts) { + if (!(V instanceof RegExp)) { + V = new RegExp(V); + } - for (; this.pointer <= this.input.length; ++this.pointer) { - const c = this.input[this.pointer]; - const cStr = isNaN(c) ? undefined : String.fromCodePoint(c); + return V; +}; - // exec state machine - const ret = this["parse " + this.state](c, cStr); - if (!ret) { - break; // terminate algorithm - } else if (ret === failure) { - this.failure = true; - break; - } - } -} -URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) { - if (isASCIIAlpha(c)) { - this.buffer += cStr.toLowerCase(); - this.state = "scheme"; - } else if (!this.stateOverride) { - this.state = "no scheme"; - --this.pointer; - } else { - this.parseError = true; - return failure; - } +/***/ }), - return true; -}; +/***/ 7537: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) { - if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) { - this.buffer += cStr.toLowerCase(); - } else if (c === 58) { - if (this.stateOverride) { - if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { - return false; - } +"use strict"; - if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { - return false; - } +const usm = __nccwpck_require__(2158); - if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { - return false; - } +exports.implementation = class URLImpl { + constructor(constructorArgs) { + const url = constructorArgs[0]; + const base = constructorArgs[1]; - if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { - return false; + let parsedBase = null; + if (base !== undefined) { + parsedBase = usm.basicURLParse(base); + if (parsedBase === "failure") { + throw new TypeError("Invalid base URL"); } } - this.url.scheme = this.buffer; - this.buffer = ""; - if (this.stateOverride) { - return false; + + const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); + if (parsedURL === "failure") { + throw new TypeError("Invalid URL"); } - if (this.url.scheme === "file") { - if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { - this.parseError = true; - } - this.state = "file"; - } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { - this.state = "special relative or authority"; - } else if (isSpecial(this.url)) { - this.state = "special authority slashes"; - } else if (this.input[this.pointer + 1] === 47) { - this.state = "path or authority"; - ++this.pointer; - } else { - this.url.cannotBeABaseURL = true; - this.url.path.push(""); - this.state = "cannot-be-a-base-URL path"; - } - } else if (!this.stateOverride) { - this.buffer = ""; - this.state = "no scheme"; - this.pointer = -1; - } else { - this.parseError = true; - return failure; - } - return true; -}; + this._url = parsedURL; -URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) { - if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) { - return failure; - } else if (this.base.cannotBeABaseURL && c === 35) { - this.url.scheme = this.base.scheme; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.url.cannotBeABaseURL = true; - this.state = "fragment"; - } else if (this.base.scheme === "file") { - this.state = "file"; - --this.pointer; - } else { - this.state = "relative"; - --this.pointer; + // TODO: query stuff } - return true; -}; - -URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) { - if (c === 47 && this.input[this.pointer + 1] === 47) { - this.state = "special authority ignore slashes"; - ++this.pointer; - } else { - this.parseError = true; - this.state = "relative"; - --this.pointer; + get href() { + return usm.serializeURL(this._url); } - return true; -}; + set href(v) { + const parsedURL = usm.basicURLParse(v); + if (parsedURL === "failure") { + throw new TypeError("Invalid URL"); + } -URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) { - if (c === 47) { - this.state = "authority"; - } else { - this.state = "path"; - --this.pointer; + this._url = parsedURL; } - return true; -}; + get origin() { + return usm.serializeURLOrigin(this._url); + } -URLStateMachine.prototype["parse relative"] = function parseRelative(c) { - this.url.scheme = this.base.scheme; - if (isNaN(c)) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - } else if (c === 47) { - this.state = "relative slash"; - } else if (c === 63) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = ""; - this.state = "query"; - } else if (c === 35) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.state = "fragment"; - } else if (isSpecial(this.url) && c === 92) { - this.parseError = true; - this.state = "relative slash"; - } else { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(0, this.base.path.length - 1); + get protocol() { + return this._url.scheme + ":"; + } - this.state = "path"; - --this.pointer; + set protocol(v) { + usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" }); } - return true; -}; + get username() { + return this._url.username; + } -URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) { - if (isSpecial(this.url) && (c === 47 || c === 92)) { - if (c === 92) { - this.parseError = true; + set username(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; } - this.state = "special authority ignore slashes"; - } else if (c === 47) { - this.state = "authority"; - } else { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.state = "path"; - --this.pointer; - } - return true; -}; + usm.setTheUsername(this._url, v); + } -URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) { - if (c === 47 && this.input[this.pointer + 1] === 47) { - this.state = "special authority ignore slashes"; - ++this.pointer; - } else { - this.parseError = true; - this.state = "special authority ignore slashes"; - --this.pointer; + get password() { + return this._url.password; } - return true; -}; + set password(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } -URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) { - if (c !== 47 && c !== 92) { - this.state = "authority"; - --this.pointer; - } else { - this.parseError = true; + usm.setThePassword(this._url, v); } - return true; -}; + get host() { + const url = this._url; -URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) { - if (c === 64) { - this.parseError = true; - if (this.atFlag) { - this.buffer = "%40" + this.buffer; + if (url.host === null) { + return ""; } - this.atFlag = true; - - // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars - const len = countSymbols(this.buffer); - for (let pointer = 0; pointer < len; ++pointer) { - const codePoint = this.buffer.codePointAt(pointer); - if (codePoint === 58 && !this.passwordTokenSeenFlag) { - this.passwordTokenSeenFlag = true; - continue; - } - const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); - if (this.passwordTokenSeenFlag) { - this.url.password += encodedCodePoints; - } else { - this.url.username += encodedCodePoints; - } - } - this.buffer = ""; - } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || - (isSpecial(this.url) && c === 92)) { - if (this.atFlag && this.buffer === "") { - this.parseError = true; - return failure; + if (url.port === null) { + return usm.serializeHost(url.host); } - this.pointer -= countSymbols(this.buffer) + 1; - this.buffer = ""; - this.state = "host"; - } else { - this.buffer += cStr; - } - return true; -}; + return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); + } -URLStateMachine.prototype["parse hostname"] = -URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) { - if (this.stateOverride && this.url.scheme === "file") { - --this.pointer; - this.state = "file host"; - } else if (c === 58 && !this.arrFlag) { - if (this.buffer === "") { - this.parseError = true; - return failure; + set host(v) { + if (this._url.cannotBeABaseURL) { + return; } - const host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } + usm.basicURLParse(v, { url: this._url, stateOverride: "host" }); + } - this.url.host = host; - this.buffer = ""; - this.state = "port"; - if (this.stateOverride === "hostname") { - return false; - } - } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || - (isSpecial(this.url) && c === 92)) { - --this.pointer; - if (isSpecial(this.url) && this.buffer === "") { - this.parseError = true; - return failure; - } else if (this.stateOverride && this.buffer === "" && - (includesCredentials(this.url) || this.url.port !== null)) { - this.parseError = true; - return false; + get hostname() { + if (this._url.host === null) { + return ""; } - const host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } + return usm.serializeHost(this._url.host); + } - this.url.host = host; - this.buffer = ""; - this.state = "path start"; - if (this.stateOverride) { - return false; - } - } else { - if (c === 91) { - this.arrFlag = true; - } else if (c === 93) { - this.arrFlag = false; + set hostname(v) { + if (this._url.cannotBeABaseURL) { + return; } - this.buffer += cStr; - } - return true; -}; + usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" }); + } -URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) { - if (isASCIIDigit(c)) { - this.buffer += cStr; - } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || - (isSpecial(this.url) && c === 92) || - this.stateOverride) { - if (this.buffer !== "") { - const port = parseInt(this.buffer); - if (port > Math.pow(2, 16) - 1) { - this.parseError = true; - return failure; - } - this.url.port = port === defaultPort(this.url.scheme) ? null : port; - this.buffer = ""; - } - if (this.stateOverride) { - return false; + get port() { + if (this._url.port === null) { + return ""; } - this.state = "path start"; - --this.pointer; - } else { - this.parseError = true; - return failure; + + return usm.serializeInteger(this._url.port); } - return true; -}; + set port(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } -const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]); - -URLStateMachine.prototype["parse file"] = function parseFile(c) { - this.url.scheme = "file"; - - if (c === 47 || c === 92) { - if (c === 92) { - this.parseError = true; - } - this.state = "file slash"; - } else if (this.base !== null && this.base.scheme === "file") { - if (isNaN(c)) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - } else if (c === 63) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = ""; - this.state = "query"; - } else if (c === 35) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.state = "fragment"; + if (v === "") { + this._url.port = null; } else { - if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points - !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || - (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points - !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - shortenPath(this.url); - } else { - this.parseError = true; - } - - this.state = "path"; - --this.pointer; + usm.basicURLParse(v, { url: this._url, stateOverride: "port" }); } - } else { - this.state = "path"; - --this.pointer; } - return true; -}; - -URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) { - if (c === 47 || c === 92) { - if (c === 92) { - this.parseError = true; + get pathname() { + if (this._url.cannotBeABaseURL) { + return this._url.path[0]; } - this.state = "file host"; - } else { - if (this.base !== null && this.base.scheme === "file") { - if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { - this.url.path.push(this.base.path[0]); - } else { - this.url.host = this.base.host; - } + + if (this._url.path.length === 0) { + return ""; } - this.state = "path"; - --this.pointer; - } - return true; -}; + return "/" + this._url.path.join("/"); + } -URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) { - if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) { - --this.pointer; - if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { - this.parseError = true; - this.state = "path"; - } else if (this.buffer === "") { - this.url.host = ""; - if (this.stateOverride) { - return false; - } - this.state = "path start"; - } else { - let host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } - if (host === "localhost") { - host = ""; - } - this.url.host = host; + set pathname(v) { + if (this._url.cannotBeABaseURL) { + return; + } - if (this.stateOverride) { - return false; - } + this._url.path = []; + usm.basicURLParse(v, { url: this._url, stateOverride: "path start" }); + } - this.buffer = ""; - this.state = "path start"; + get search() { + if (this._url.query === null || this._url.query === "") { + return ""; } - } else { - this.buffer += cStr; + + return "?" + this._url.query; } - return true; -}; + set search(v) { + // TODO: query stuff -URLStateMachine.prototype["parse path start"] = function parsePathStart(c) { - if (isSpecial(this.url)) { - if (c === 92) { - this.parseError = true; - } - this.state = "path"; + const url = this._url; - if (c !== 47 && c !== 92) { - --this.pointer; - } - } else if (!this.stateOverride && c === 63) { - this.url.query = ""; - this.state = "query"; - } else if (!this.stateOverride && c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } else if (c !== undefined) { - this.state = "path"; - if (c !== 47) { - --this.pointer; + if (v === "") { + url.query = null; + return; } - } - return true; -}; + const input = v[0] === "?" ? v.substring(1) : v; + url.query = ""; + usm.basicURLParse(input, { url, stateOverride: "query" }); + } -URLStateMachine.prototype["parse path"] = function parsePath(c) { - if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) || - (!this.stateOverride && (c === 63 || c === 35))) { - if (isSpecial(this.url) && c === 92) { - this.parseError = true; + get hash() { + if (this._url.fragment === null || this._url.fragment === "") { + return ""; } - if (isDoubleDot(this.buffer)) { - shortenPath(this.url); - if (c !== 47 && !(isSpecial(this.url) && c === 92)) { - this.url.path.push(""); - } - } else if (isSingleDot(this.buffer) && c !== 47 && - !(isSpecial(this.url) && c === 92)) { - this.url.path.push(""); - } else if (!isSingleDot(this.buffer)) { - if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { - if (this.url.host !== "" && this.url.host !== null) { - this.parseError = true; - this.url.host = ""; - } - this.buffer = this.buffer[0] + ":"; - } - this.url.path.push(this.buffer); - } - this.buffer = ""; - if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) { - while (this.url.path.length > 1 && this.url.path[0] === "") { - this.parseError = true; - this.url.path.shift(); - } - } - if (c === 63) { - this.url.query = ""; - this.state = "query"; - } - if (c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } - } else { - // TODO: If c is not a URL code point and not "%", parse error. + return "#" + this._url.fragment; + } - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; + set hash(v) { + if (v === "") { + this._url.fragment = null; + return; } - this.buffer += percentEncodeChar(c, isPathPercentEncode); + const input = v[0] === "#" ? v.substring(1) : v; + this._url.fragment = ""; + usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); } - return true; + toJSON() { + return this.href; + } }; -URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) { - if (c === 63) { - this.url.query = ""; - this.state = "query"; - } else if (c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } else { - // TODO: Add: not a URL code point - if (!isNaN(c) && c !== 37) { - this.parseError = true; - } - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } +/***/ }), - if (!isNaN(c)) { - this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode); - } - } +/***/ 3394: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - return true; -}; +"use strict"; -URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) { - if (isNaN(c) || (!this.stateOverride && c === 35)) { - if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { - this.encodingOverride = "utf-8"; - } - const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead - for (let i = 0; i < buffer.length; ++i) { - if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || - buffer[i] === 0x3C || buffer[i] === 0x3E) { - this.url.query += percentEncode(buffer[i]); - } else { - this.url.query += String.fromCodePoint(buffer[i]); - } - } +const conversions = __nccwpck_require__(4886); +const utils = __nccwpck_require__(3185); +const Impl = __nccwpck_require__(7537); - this.buffer = ""; - if (c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } - } else { - // TODO: If c is not a URL code point and not "%", parse error. - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } +const impl = utils.implSymbol; - this.buffer += cStr; +function URL(url) { + if (!this || this[impl] || !(this instanceof URL)) { + throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); + } + if (arguments.length < 1) { + throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); + } + const args = []; + for (let i = 0; i < arguments.length && i < 2; ++i) { + args[i] = arguments[i]; + } + args[0] = conversions["USVString"](args[0]); + if (args[1] !== undefined) { + args[1] = conversions["USVString"](args[1]); } - return true; -}; - -URLStateMachine.prototype["parse fragment"] = function parseFragment(c) { - if (isNaN(c)) { // do nothing - } else if (c === 0x0) { - this.parseError = true; - } else { - // TODO: If c is not a URL code point and not "%", parse error. - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } + module.exports.setup(this, args); +} - this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode); +URL.prototype.toJSON = function toJSON() { + if (!this || !module.exports.is(this)) { + throw new TypeError("Illegal invocation"); + } + const args = []; + for (let i = 0; i < arguments.length && i < 0; ++i) { + args[i] = arguments[i]; } + return this[impl].toJSON.apply(this[impl], args); +}; +Object.defineProperty(URL.prototype, "href", { + get() { + return this[impl].href; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].href = V; + }, + enumerable: true, + configurable: true +}); - return true; +URL.prototype.toString = function () { + if (!this || !module.exports.is(this)) { + throw new TypeError("Illegal invocation"); + } + return this.href; }; -function serializeURL(url, excludeFragment) { - let output = url.scheme + ":"; - if (url.host !== null) { - output += "//"; +Object.defineProperty(URL.prototype, "origin", { + get() { + return this[impl].origin; + }, + enumerable: true, + configurable: true +}); - if (url.username !== "" || url.password !== "") { - output += url.username; - if (url.password !== "") { - output += ":" + url.password; - } - output += "@"; - } +Object.defineProperty(URL.prototype, "protocol", { + get() { + return this[impl].protocol; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].protocol = V; + }, + enumerable: true, + configurable: true +}); - output += serializeHost(url.host); +Object.defineProperty(URL.prototype, "username", { + get() { + return this[impl].username; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].username = V; + }, + enumerable: true, + configurable: true +}); - if (url.port !== null) { - output += ":" + url.port; - } - } else if (url.host === null && url.scheme === "file") { - output += "//"; - } +Object.defineProperty(URL.prototype, "password", { + get() { + return this[impl].password; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].password = V; + }, + enumerable: true, + configurable: true +}); - if (url.cannotBeABaseURL) { - output += url.path[0]; - } else { - for (const string of url.path) { - output += "/" + string; - } - } +Object.defineProperty(URL.prototype, "host", { + get() { + return this[impl].host; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].host = V; + }, + enumerable: true, + configurable: true +}); - if (url.query !== null) { - output += "?" + url.query; - } +Object.defineProperty(URL.prototype, "hostname", { + get() { + return this[impl].hostname; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].hostname = V; + }, + enumerable: true, + configurable: true +}); - if (!excludeFragment && url.fragment !== null) { - output += "#" + url.fragment; - } +Object.defineProperty(URL.prototype, "port", { + get() { + return this[impl].port; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].port = V; + }, + enumerable: true, + configurable: true +}); - return output; -} +Object.defineProperty(URL.prototype, "pathname", { + get() { + return this[impl].pathname; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].pathname = V; + }, + enumerable: true, + configurable: true +}); -function serializeOrigin(tuple) { - let result = tuple.scheme + "://"; - result += serializeHost(tuple.host); +Object.defineProperty(URL.prototype, "search", { + get() { + return this[impl].search; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].search = V; + }, + enumerable: true, + configurable: true +}); - if (tuple.port !== null) { - result += ":" + tuple.port; - } +Object.defineProperty(URL.prototype, "hash", { + get() { + return this[impl].hash; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].hash = V; + }, + enumerable: true, + configurable: true +}); - return result; -} -module.exports.serializeURL = serializeURL; +module.exports = { + is(obj) { + return !!obj && obj[impl] instanceof Impl.implementation; + }, + create(constructorArgs, privateData) { + let obj = Object.create(URL.prototype); + this.setup(obj, constructorArgs, privateData); + return obj; + }, + setup(obj, constructorArgs, privateData) { + if (!privateData) privateData = {}; + privateData.wrapper = obj; -module.exports.serializeURLOrigin = function (url) { - // https://url.spec.whatwg.org/#concept-url-origin - switch (url.scheme) { - case "blob": - try { - return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0])); - } catch (e) { - // serializing an opaque origin returns "null" - return "null"; - } - case "ftp": - case "gopher": - case "http": - case "https": - case "ws": - case "wss": - return serializeOrigin({ - scheme: url.scheme, - host: url.host, - port: url.port - }); - case "file": - // spec says "exercise to the reader", chrome says "file://" - return "file://"; - default: - // serializing an opaque origin returns "null" - return "null"; + obj[impl] = new Impl.implementation(constructorArgs, privateData); + obj[impl][utils.wrapperSymbol] = obj; + }, + interface: URL, + expose: { + Window: { URL: URL }, + Worker: { URL: URL } } }; -module.exports.basicURLParse = function (input, options) { - if (options === undefined) { - options = {}; - } - const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); - if (usm.failure) { - return "failure"; - } - return usm.url; -}; +/***/ }), -module.exports.setTheUsername = function (url, username) { - url.username = ""; - const decoded = punycode.ucs2.decode(username); - for (let i = 0; i < decoded.length; ++i) { - url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode); - } -}; +/***/ 8665: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; -module.exports.setThePassword = function (url, password) { - url.password = ""; - const decoded = punycode.ucs2.decode(password); - for (let i = 0; i < decoded.length; ++i) { - url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode); - } -}; -module.exports.serializeHost = serializeHost; +exports.URL = __nccwpck_require__(3394).interface; +exports.serializeURL = __nccwpck_require__(2158).serializeURL; +exports.serializeURLOrigin = __nccwpck_require__(2158).serializeURLOrigin; +exports.basicURLParse = __nccwpck_require__(2158).basicURLParse; +exports.setTheUsername = __nccwpck_require__(2158).setTheUsername; +exports.setThePassword = __nccwpck_require__(2158).setThePassword; +exports.serializeHost = __nccwpck_require__(2158).serializeHost; +exports.serializeInteger = __nccwpck_require__(2158).serializeInteger; +exports.parseURL = __nccwpck_require__(2158).parseURL; -module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; -module.exports.serializeInteger = function (integer) { - return String(integer); -}; +/***/ }), -module.exports.parseURL = function (input, options) { - if (options === undefined) { - options = {}; - } +/***/ 2158: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - // We don't handle blobs, so this just delegates: - return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); -}; +"use strict"; + +const punycode = __nccwpck_require__(4213); +const tr46 = __nccwpck_require__(4256); + +const specialSchemes = { + ftp: 21, + file: null, + gopher: 70, + http: 80, + https: 443, + ws: 80, + wss: 443 +}; + +const failure = Symbol("failure"); + +function countSymbols(str) { + return punycode.ucs2.decode(str).length; +} + +function at(input, idx) { + const c = input[idx]; + return isNaN(c) ? undefined : String.fromCodePoint(c); +} + +function isASCIIDigit(c) { + return c >= 0x30 && c <= 0x39; +} + +function isASCIIAlpha(c) { + return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A); +} + +function isASCIIAlphanumeric(c) { + return isASCIIAlpha(c) || isASCIIDigit(c); +} + +function isASCIIHex(c) { + return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66); +} + +function isSingleDot(buffer) { + return buffer === "." || buffer.toLowerCase() === "%2e"; +} + +function isDoubleDot(buffer) { + buffer = buffer.toLowerCase(); + return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; +} + +function isWindowsDriveLetterCodePoints(cp1, cp2) { + return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); +} + +function isWindowsDriveLetterString(string) { + return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); +} + +function isNormalizedWindowsDriveLetterString(string) { + return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; +} + +function containsForbiddenHostCodePoint(string) { + return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; +} + +function containsForbiddenHostCodePointExcludingPercent(string) { + return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; +} + +function isSpecialScheme(scheme) { + return specialSchemes[scheme] !== undefined; +} + +function isSpecial(url) { + return isSpecialScheme(url.scheme); +} + +function defaultPort(scheme) { + return specialSchemes[scheme]; +} + +function percentEncode(c) { + let hex = c.toString(16).toUpperCase(); + if (hex.length === 1) { + hex = "0" + hex; + } + + return "%" + hex; +} + +function utf8PercentEncode(c) { + const buf = new Buffer(c); + + let str = ""; + + for (let i = 0; i < buf.length; ++i) { + str += percentEncode(buf[i]); + } + + return str; +} + +function utf8PercentDecode(str) { + const input = new Buffer(str); + const output = []; + for (let i = 0; i < input.length; ++i) { + if (input[i] !== 37) { + output.push(input[i]); + } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) { + output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16)); + i += 2; + } else { + output.push(input[i]); + } + } + return new Buffer(output).toString(); +} + +function isC0ControlPercentEncode(c) { + return c <= 0x1F || c > 0x7E; +} + +const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); +function isPathPercentEncode(c) { + return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c); +} + +const extraUserinfoPercentEncodeSet = + new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); +function isUserinfoPercentEncode(c) { + return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c); +} + +function percentEncodeChar(c, encodeSetPredicate) { + const cStr = String.fromCodePoint(c); + + if (encodeSetPredicate(c)) { + return utf8PercentEncode(cStr); + } + + return cStr; +} + +function parseIPv4Number(input) { + let R = 10; + + if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { + input = input.substring(2); + R = 16; + } else if (input.length >= 2 && input.charAt(0) === "0") { + input = input.substring(1); + R = 8; + } + + if (input === "") { + return 0; + } + + const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/); + if (regex.test(input)) { + return failure; + } + + return parseInt(input, R); +} + +function parseIPv4(input) { + const parts = input.split("."); + if (parts[parts.length - 1] === "") { + if (parts.length > 1) { + parts.pop(); + } + } + + if (parts.length > 4) { + return input; + } + + const numbers = []; + for (const part of parts) { + if (part === "") { + return input; + } + const n = parseIPv4Number(part); + if (n === failure) { + return input; + } + + numbers.push(n); + } + + for (let i = 0; i < numbers.length - 1; ++i) { + if (numbers[i] > 255) { + return failure; + } + } + if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { + return failure; + } + + let ipv4 = numbers.pop(); + let counter = 0; + + for (const n of numbers) { + ipv4 += n * Math.pow(256, 3 - counter); + ++counter; + } + + return ipv4; +} + +function serializeIPv4(address) { + let output = ""; + let n = address; + + for (let i = 1; i <= 4; ++i) { + output = String(n % 256) + output; + if (i !== 4) { + output = "." + output; + } + n = Math.floor(n / 256); + } + + return output; +} + +function parseIPv6(input) { + const address = [0, 0, 0, 0, 0, 0, 0, 0]; + let pieceIndex = 0; + let compress = null; + let pointer = 0; + + input = punycode.ucs2.decode(input); + + if (input[pointer] === 58) { + if (input[pointer + 1] !== 58) { + return failure; + } + + pointer += 2; + ++pieceIndex; + compress = pieceIndex; + } + + while (pointer < input.length) { + if (pieceIndex === 8) { + return failure; + } + + if (input[pointer] === 58) { + if (compress !== null) { + return failure; + } + ++pointer; + ++pieceIndex; + compress = pieceIndex; + continue; + } + + let value = 0; + let length = 0; + + while (length < 4 && isASCIIHex(input[pointer])) { + value = value * 0x10 + parseInt(at(input, pointer), 16); + ++pointer; + ++length; + } + + if (input[pointer] === 46) { + if (length === 0) { + return failure; + } + + pointer -= length; + + if (pieceIndex > 6) { + return failure; + } + + let numbersSeen = 0; + + while (input[pointer] !== undefined) { + let ipv4Piece = null; + + if (numbersSeen > 0) { + if (input[pointer] === 46 && numbersSeen < 4) { + ++pointer; + } else { + return failure; + } + } + + if (!isASCIIDigit(input[pointer])) { + return failure; + } + + while (isASCIIDigit(input[pointer])) { + const number = parseInt(at(input, pointer)); + if (ipv4Piece === null) { + ipv4Piece = number; + } else if (ipv4Piece === 0) { + return failure; + } else { + ipv4Piece = ipv4Piece * 10 + number; + } + if (ipv4Piece > 255) { + return failure; + } + ++pointer; + } + + address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; + + ++numbersSeen; + + if (numbersSeen === 2 || numbersSeen === 4) { + ++pieceIndex; + } + } + + if (numbersSeen !== 4) { + return failure; + } + + break; + } else if (input[pointer] === 58) { + ++pointer; + if (input[pointer] === undefined) { + return failure; + } + } else if (input[pointer] !== undefined) { + return failure; + } + + address[pieceIndex] = value; + ++pieceIndex; + } + + if (compress !== null) { + let swaps = pieceIndex - compress; + pieceIndex = 7; + while (pieceIndex !== 0 && swaps > 0) { + const temp = address[compress + swaps - 1]; + address[compress + swaps - 1] = address[pieceIndex]; + address[pieceIndex] = temp; + --pieceIndex; + --swaps; + } + } else if (compress === null && pieceIndex !== 8) { + return failure; + } + + return address; +} + +function serializeIPv6(address) { + let output = ""; + const seqResult = findLongestZeroSequence(address); + const compress = seqResult.idx; + let ignore0 = false; + + for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { + if (ignore0 && address[pieceIndex] === 0) { + continue; + } else if (ignore0) { + ignore0 = false; + } + + if (compress === pieceIndex) { + const separator = pieceIndex === 0 ? "::" : ":"; + output += separator; + ignore0 = true; + continue; + } + + output += address[pieceIndex].toString(16); + + if (pieceIndex !== 7) { + output += ":"; + } + } + + return output; +} + +function parseHost(input, isSpecialArg) { + if (input[0] === "[") { + if (input[input.length - 1] !== "]") { + return failure; + } + + return parseIPv6(input.substring(1, input.length - 1)); + } + + if (!isSpecialArg) { + return parseOpaqueHost(input); + } + + const domain = utf8PercentDecode(input); + const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); + if (asciiDomain === null) { + return failure; + } + + if (containsForbiddenHostCodePoint(asciiDomain)) { + return failure; + } + + const ipv4Host = parseIPv4(asciiDomain); + if (typeof ipv4Host === "number" || ipv4Host === failure) { + return ipv4Host; + } + + return asciiDomain; +} + +function parseOpaqueHost(input) { + if (containsForbiddenHostCodePointExcludingPercent(input)) { + return failure; + } + + let output = ""; + const decoded = punycode.ucs2.decode(input); + for (let i = 0; i < decoded.length; ++i) { + output += percentEncodeChar(decoded[i], isC0ControlPercentEncode); + } + return output; +} + +function findLongestZeroSequence(arr) { + let maxIdx = null; + let maxLen = 1; // only find elements > 1 + let currStart = null; + let currLen = 0; + + for (let i = 0; i < arr.length; ++i) { + if (arr[i] !== 0) { + if (currLen > maxLen) { + maxIdx = currStart; + maxLen = currLen; + } + + currStart = null; + currLen = 0; + } else { + if (currStart === null) { + currStart = i; + } + ++currLen; + } + } + + // if trailing zeros + if (currLen > maxLen) { + maxIdx = currStart; + maxLen = currLen; + } + + return { + idx: maxIdx, + len: maxLen + }; +} + +function serializeHost(host) { + if (typeof host === "number") { + return serializeIPv4(host); + } + + // IPv6 serializer + if (host instanceof Array) { + return "[" + serializeIPv6(host) + "]"; + } + + return host; +} + +function trimControlChars(url) { + return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); +} + +function trimTabAndNewline(url) { + return url.replace(/\u0009|\u000A|\u000D/g, ""); +} + +function shortenPath(url) { + const path = url.path; + if (path.length === 0) { + return; + } + if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { + return; + } + + path.pop(); +} + +function includesCredentials(url) { + return url.username !== "" || url.password !== ""; +} + +function cannotHaveAUsernamePasswordPort(url) { + return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; +} + +function isNormalizedWindowsDriveLetter(string) { + return /^[A-Za-z]:$/.test(string); +} + +function URLStateMachine(input, base, encodingOverride, url, stateOverride) { + this.pointer = 0; + this.input = input; + this.base = base || null; + this.encodingOverride = encodingOverride || "utf-8"; + this.stateOverride = stateOverride; + this.url = url; + this.failure = false; + this.parseError = false; + + if (!this.url) { + this.url = { + scheme: "", + username: "", + password: "", + host: null, + port: null, + path: [], + query: null, + fragment: null, + + cannotBeABaseURL: false + }; + + const res = trimControlChars(this.input); + if (res !== this.input) { + this.parseError = true; + } + this.input = res; + } + + const res = trimTabAndNewline(this.input); + if (res !== this.input) { + this.parseError = true; + } + this.input = res; + + this.state = stateOverride || "scheme start"; + + this.buffer = ""; + this.atFlag = false; + this.arrFlag = false; + this.passwordTokenSeenFlag = false; + + this.input = punycode.ucs2.decode(this.input); + + for (; this.pointer <= this.input.length; ++this.pointer) { + const c = this.input[this.pointer]; + const cStr = isNaN(c) ? undefined : String.fromCodePoint(c); + + // exec state machine + const ret = this["parse " + this.state](c, cStr); + if (!ret) { + break; // terminate algorithm + } else if (ret === failure) { + this.failure = true; + break; + } + } +} + +URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) { + if (isASCIIAlpha(c)) { + this.buffer += cStr.toLowerCase(); + this.state = "scheme"; + } else if (!this.stateOverride) { + this.state = "no scheme"; + --this.pointer; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) { + if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) { + this.buffer += cStr.toLowerCase(); + } else if (c === 58) { + if (this.stateOverride) { + if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { + return false; + } + + if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { + return false; + } + + if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { + return false; + } + + if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { + return false; + } + } + this.url.scheme = this.buffer; + this.buffer = ""; + if (this.stateOverride) { + return false; + } + if (this.url.scheme === "file") { + if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { + this.parseError = true; + } + this.state = "file"; + } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { + this.state = "special relative or authority"; + } else if (isSpecial(this.url)) { + this.state = "special authority slashes"; + } else if (this.input[this.pointer + 1] === 47) { + this.state = "path or authority"; + ++this.pointer; + } else { + this.url.cannotBeABaseURL = true; + this.url.path.push(""); + this.state = "cannot-be-a-base-URL path"; + } + } else if (!this.stateOverride) { + this.buffer = ""; + this.state = "no scheme"; + this.pointer = -1; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) { + if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) { + return failure; + } else if (this.base.cannotBeABaseURL && c === 35) { + this.url.scheme = this.base.scheme; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.url.cannotBeABaseURL = true; + this.state = "fragment"; + } else if (this.base.scheme === "file") { + this.state = "file"; + --this.pointer; + } else { + this.state = "relative"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) { + if (c === 47 && this.input[this.pointer + 1] === 47) { + this.state = "special authority ignore slashes"; + ++this.pointer; + } else { + this.parseError = true; + this.state = "relative"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) { + if (c === 47) { + this.state = "authority"; + } else { + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse relative"] = function parseRelative(c) { + this.url.scheme = this.base.scheme; + if (isNaN(c)) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + } else if (c === 47) { + this.state = "relative slash"; + } else if (c === 63) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.state = "fragment"; + } else if (isSpecial(this.url) && c === 92) { + this.parseError = true; + this.state = "relative slash"; + } else { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(0, this.base.path.length - 1); + + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) { + if (isSpecial(this.url) && (c === 47 || c === 92)) { + if (c === 92) { + this.parseError = true; + } + this.state = "special authority ignore slashes"; + } else if (c === 47) { + this.state = "authority"; + } else { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) { + if (c === 47 && this.input[this.pointer + 1] === 47) { + this.state = "special authority ignore slashes"; + ++this.pointer; + } else { + this.parseError = true; + this.state = "special authority ignore slashes"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) { + if (c !== 47 && c !== 92) { + this.state = "authority"; + --this.pointer; + } else { + this.parseError = true; + } + + return true; +}; + +URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) { + if (c === 64) { + this.parseError = true; + if (this.atFlag) { + this.buffer = "%40" + this.buffer; + } + this.atFlag = true; + + // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars + const len = countSymbols(this.buffer); + for (let pointer = 0; pointer < len; ++pointer) { + const codePoint = this.buffer.codePointAt(pointer); + + if (codePoint === 58 && !this.passwordTokenSeenFlag) { + this.passwordTokenSeenFlag = true; + continue; + } + const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); + if (this.passwordTokenSeenFlag) { + this.url.password += encodedCodePoints; + } else { + this.url.username += encodedCodePoints; + } + } + this.buffer = ""; + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92)) { + if (this.atFlag && this.buffer === "") { + this.parseError = true; + return failure; + } + this.pointer -= countSymbols(this.buffer) + 1; + this.buffer = ""; + this.state = "host"; + } else { + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse hostname"] = +URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) { + if (this.stateOverride && this.url.scheme === "file") { + --this.pointer; + this.state = "file host"; + } else if (c === 58 && !this.arrFlag) { + if (this.buffer === "") { + this.parseError = true; + return failure; + } + + const host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + + this.url.host = host; + this.buffer = ""; + this.state = "port"; + if (this.stateOverride === "hostname") { + return false; + } + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92)) { + --this.pointer; + if (isSpecial(this.url) && this.buffer === "") { + this.parseError = true; + return failure; + } else if (this.stateOverride && this.buffer === "" && + (includesCredentials(this.url) || this.url.port !== null)) { + this.parseError = true; + return false; + } + + const host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + + this.url.host = host; + this.buffer = ""; + this.state = "path start"; + if (this.stateOverride) { + return false; + } + } else { + if (c === 91) { + this.arrFlag = true; + } else if (c === 93) { + this.arrFlag = false; + } + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) { + if (isASCIIDigit(c)) { + this.buffer += cStr; + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92) || + this.stateOverride) { + if (this.buffer !== "") { + const port = parseInt(this.buffer); + if (port > Math.pow(2, 16) - 1) { + this.parseError = true; + return failure; + } + this.url.port = port === defaultPort(this.url.scheme) ? null : port; + this.buffer = ""; + } + if (this.stateOverride) { + return false; + } + this.state = "path start"; + --this.pointer; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]); + +URLStateMachine.prototype["parse file"] = function parseFile(c) { + this.url.scheme = "file"; + + if (c === 47 || c === 92) { + if (c === 92) { + this.parseError = true; + } + this.state = "file slash"; + } else if (this.base !== null && this.base.scheme === "file") { + if (isNaN(c)) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + } else if (c === 63) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.state = "fragment"; + } else { + if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points + !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || + (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points + !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + shortenPath(this.url); + } else { + this.parseError = true; + } + + this.state = "path"; + --this.pointer; + } + } else { + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) { + if (c === 47 || c === 92) { + if (c === 92) { + this.parseError = true; + } + this.state = "file host"; + } else { + if (this.base !== null && this.base.scheme === "file") { + if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { + this.url.path.push(this.base.path[0]); + } else { + this.url.host = this.base.host; + } + } + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) { + if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) { + --this.pointer; + if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { + this.parseError = true; + this.state = "path"; + } else if (this.buffer === "") { + this.url.host = ""; + if (this.stateOverride) { + return false; + } + this.state = "path start"; + } else { + let host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + if (host === "localhost") { + host = ""; + } + this.url.host = host; + + if (this.stateOverride) { + return false; + } + + this.buffer = ""; + this.state = "path start"; + } + } else { + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse path start"] = function parsePathStart(c) { + if (isSpecial(this.url)) { + if (c === 92) { + this.parseError = true; + } + this.state = "path"; + + if (c !== 47 && c !== 92) { + --this.pointer; + } + } else if (!this.stateOverride && c === 63) { + this.url.query = ""; + this.state = "query"; + } else if (!this.stateOverride && c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } else if (c !== undefined) { + this.state = "path"; + if (c !== 47) { + --this.pointer; + } + } + + return true; +}; + +URLStateMachine.prototype["parse path"] = function parsePath(c) { + if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) || + (!this.stateOverride && (c === 63 || c === 35))) { + if (isSpecial(this.url) && c === 92) { + this.parseError = true; + } + + if (isDoubleDot(this.buffer)) { + shortenPath(this.url); + if (c !== 47 && !(isSpecial(this.url) && c === 92)) { + this.url.path.push(""); + } + } else if (isSingleDot(this.buffer) && c !== 47 && + !(isSpecial(this.url) && c === 92)) { + this.url.path.push(""); + } else if (!isSingleDot(this.buffer)) { + if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { + if (this.url.host !== "" && this.url.host !== null) { + this.parseError = true; + this.url.host = ""; + } + this.buffer = this.buffer[0] + ":"; + } + this.url.path.push(this.buffer); + } + this.buffer = ""; + if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) { + while (this.url.path.length > 1 && this.url.path[0] === "") { + this.parseError = true; + this.url.path.shift(); + } + } + if (c === 63) { + this.url.query = ""; + this.state = "query"; + } + if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } + } else { + // TODO: If c is not a URL code point and not "%", parse error. + + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.buffer += percentEncodeChar(c, isPathPercentEncode); + } + + return true; +}; + +URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) { + if (c === 63) { + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } else { + // TODO: Add: not a URL code point + if (!isNaN(c) && c !== 37) { + this.parseError = true; + } + + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + if (!isNaN(c)) { + this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode); + } + } + + return true; +}; + +URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) { + if (isNaN(c) || (!this.stateOverride && c === 35)) { + if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { + this.encodingOverride = "utf-8"; + } + + const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead + for (let i = 0; i < buffer.length; ++i) { + if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || + buffer[i] === 0x3C || buffer[i] === 0x3E) { + this.url.query += percentEncode(buffer[i]); + } else { + this.url.query += String.fromCodePoint(buffer[i]); + } + } + + this.buffer = ""; + if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } + } else { + // TODO: If c is not a URL code point and not "%", parse error. + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse fragment"] = function parseFragment(c) { + if (isNaN(c)) { // do nothing + } else if (c === 0x0) { + this.parseError = true; + } else { + // TODO: If c is not a URL code point and not "%", parse error. + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode); + } + + return true; +}; + +function serializeURL(url, excludeFragment) { + let output = url.scheme + ":"; + if (url.host !== null) { + output += "//"; + + if (url.username !== "" || url.password !== "") { + output += url.username; + if (url.password !== "") { + output += ":" + url.password; + } + output += "@"; + } + + output += serializeHost(url.host); + + if (url.port !== null) { + output += ":" + url.port; + } + } else if (url.host === null && url.scheme === "file") { + output += "//"; + } + + if (url.cannotBeABaseURL) { + output += url.path[0]; + } else { + for (const string of url.path) { + output += "/" + string; + } + } + + if (url.query !== null) { + output += "?" + url.query; + } + + if (!excludeFragment && url.fragment !== null) { + output += "#" + url.fragment; + } + + return output; +} + +function serializeOrigin(tuple) { + let result = tuple.scheme + "://"; + result += serializeHost(tuple.host); + + if (tuple.port !== null) { + result += ":" + tuple.port; + } + + return result; +} + +module.exports.serializeURL = serializeURL; + +module.exports.serializeURLOrigin = function (url) { + // https://url.spec.whatwg.org/#concept-url-origin + switch (url.scheme) { + case "blob": + try { + return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0])); + } catch (e) { + // serializing an opaque origin returns "null" + return "null"; + } + case "ftp": + case "gopher": + case "http": + case "https": + case "ws": + case "wss": + return serializeOrigin({ + scheme: url.scheme, + host: url.host, + port: url.port + }); + case "file": + // spec says "exercise to the reader", chrome says "file://" + return "file://"; + default: + // serializing an opaque origin returns "null" + return "null"; + } +}; + +module.exports.basicURLParse = function (input, options) { + if (options === undefined) { + options = {}; + } + + const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); + if (usm.failure) { + return "failure"; + } + + return usm.url; +}; + +module.exports.setTheUsername = function (url, username) { + url.username = ""; + const decoded = punycode.ucs2.decode(username); + for (let i = 0; i < decoded.length; ++i) { + url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode); + } +}; + +module.exports.setThePassword = function (url, password) { + url.password = ""; + const decoded = punycode.ucs2.decode(password); + for (let i = 0; i < decoded.length; ++i) { + url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode); + } +}; + +module.exports.serializeHost = serializeHost; + +module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; + +module.exports.serializeInteger = function (integer) { + return String(integer); +}; + +module.exports.parseURL = function (input, options) { + if (options === undefined) { + options = {}; + } + + // We don't handle blobs, so this just delegates: + return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); +}; /***/ }), @@ -28152,6 +29613,46 @@ module.exports = require("zlib");; /******/ } /******/ /************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nccwpck_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => module['default'] : +/******/ () => module; +/******/ __nccwpck_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __nccwpck_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__nccwpck_require__.o(definition, key) && !__nccwpck_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __nccwpck_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __nccwpck_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ /******/ /* webpack/runtime/compat */ /******/ /******/ __nccwpck_require__.ab = __dirname + "/";/************************************************************************/ diff --git a/dist/index.js.map b/dist/index.js.map index 2d8de1b..e33576f 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../webpack://match-label-action/./index.js","../webpack://match-label-action/./match.js","../webpack://match-label-action/./node_modules/@actions/core/lib/command.js","../webpack://match-label-action/./node_modules/@actions/core/lib/core.js","../webpack://match-label-action/./node_modules/@actions/core/lib/file-command.js","../webpack://match-label-action/./node_modules/@actions/core/lib/oidc-utils.js","../webpack://match-label-action/./node_modules/@actions/core/lib/utils.js","../webpack://match-label-action/./node_modules/@actions/github/lib/context.js","../webpack://match-label-action/./node_modules/@actions/github/lib/github.js","../webpack://match-label-action/./node_modules/@actions/http-client/auth.js","../webpack://match-label-action/./node_modules/@actions/http-client/index.js","../webpack://match-label-action/./node_modules/@actions/http-client/proxy.js","../webpack://match-label-action/./node_modules/@octokit/auth-token/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/endpoint/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/graphql/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/plugin-request-log/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/request-error/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/request/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/constructor.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/core.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/factory.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/parse-client-options.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/register-plugin.js","../webpack://match-label-action/./node_modules/@octokit/rest/node_modules/@octokit/request-error/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/authenticate.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/before-request.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/request-error.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/before-request.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/request-error.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/validate.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/with-authorization-prefix.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/pagination/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/validate/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/validate/validate.js","../webpack://match-label-action/./node_modules/atob-lite/atob-node.js","../webpack://match-label-action/./node_modules/before-after-hook/index.js","../webpack://match-label-action/./node_modules/before-after-hook/lib/add.js","../webpack://match-label-action/./node_modules/before-after-hook/lib/register.js","../webpack://match-label-action/./node_modules/before-after-hook/lib/remove.js","../webpack://match-label-action/./node_modules/btoa-lite/btoa-node.js","../webpack://match-label-action/./node_modules/deprecation/dist-node/index.js","../webpack://match-label-action/./node_modules/end-of-stream/index.js","../webpack://match-label-action/./node_modules/get-stream/buffer-stream.js","../webpack://match-label-action/./node_modules/get-stream/index.js","../webpack://match-label-action/./node_modules/is-plain-object/dist/is-plain-object.js","../webpack://match-label-action/./node_modules/isexe/index.js","../webpack://match-label-action/./node_modules/isexe/mode.js","../webpack://match-label-action/./node_modules/isexe/windows.js","../webpack://match-label-action/./node_modules/lodash.get/index.js","../webpack://match-label-action/./node_modules/lodash.set/index.js","../webpack://match-label-action/./node_modules/lodash.uniq/index.js","../webpack://match-label-action/./node_modules/macos-release/index.js","../webpack://match-label-action/./node_modules/nice-try/src/index.js","../webpack://match-label-action/./node_modules/node-fetch/lib/index.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/index.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/deprecate.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-first-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-last-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-next-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-page-links.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-previous-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-first-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-last-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-next-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-previous-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/http-error.js","../webpack://match-label-action/./node_modules/once/once.js","../webpack://match-label-action/./node_modules/os-name/index.js","../webpack://match-label-action/./node_modules/p-finally/index.js","../webpack://match-label-action/./node_modules/pump/index.js","../webpack://match-label-action/./node_modules/signal-exit/index.js","../webpack://match-label-action/./node_modules/signal-exit/signals.js","../webpack://match-label-action/./node_modules/strip-eof/index.js","../webpack://match-label-action/./node_modules/tr46/index.js","../webpack://match-label-action/./node_modules/tunnel/index.js","../webpack://match-label-action/./node_modules/tunnel/lib/tunnel.js","../webpack://match-label-action/./node_modules/universal-user-agent/dist-node/index.js","../webpack://match-label-action/./node_modules/webidl-conversions/lib/index.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/URL-impl.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/URL.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/public-api.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/url-state-machine.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/utils.js","../webpack://match-label-action/./node_modules/windows-release/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/enoent.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/parse.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/util/escape.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/util/readShebang.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/util/resolveCommand.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/execa/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/execa/lib/errname.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/execa/lib/stdio.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/is-stream/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/npm-run-path/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/path-key/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/semver/semver.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/shebang-command/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/shebang-regex/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/which/which.js","../webpack://match-label-action/./node_modules/wrappy/wrappy.js","../webpack://match-label-action/./node_modules/@vercel/ncc/dist/ncc/@@notfound.js","../webpack://match-label-action/external \"assert\"","../webpack://match-label-action/external \"child_process\"","../webpack://match-label-action/external \"events\"","../webpack://match-label-action/external \"fs\"","../webpack://match-label-action/external \"http\"","../webpack://match-label-action/external \"https\"","../webpack://match-label-action/external \"net\"","../webpack://match-label-action/external \"os\"","../webpack://match-label-action/external \"path\"","../webpack://match-label-action/external \"punycode\"","../webpack://match-label-action/external \"stream\"","../webpack://match-label-action/external \"tls\"","../webpack://match-label-action/external \"url\"","../webpack://match-label-action/external \"util\"","../webpack://match-label-action/external \"zlib\"","../webpack://match-label-action/webpack/bootstrap","../webpack://match-label-action/webpack/runtime/compat","../webpack://match-label-action/webpack/startup"],"sourcesContent":["const core = require('@actions/core')\nconst {context} = require('@actions/github')\nconst match = require('./match.js')\n\nfunction run() {\n try {\n const pr = context.payload.pull_request || {}\n const labels = pr.labels || []\n const labelNames = labels.map((label) => label.name)\n const allowedLabels = match.parseAllowed(core.getInput('allowed'))\n const allowedMultipleLabels = match.parseAllowed(\n core.getInput('allowed_multiple')\n )\n const defaultMatch = core.getInput('default_match')\n let matchingLabel\n if (allowedLabels.length > 0) {\n matchingLabel = match.findMatching(\n labelNames,\n allowedLabels,\n false,\n defaultMatch\n )\n } else if (allowedMultipleLabels.length > 0) {\n matchingLabel = match.findMatching(\n labelNames,\n allowedMultipleLabels,\n true,\n defaultMatch\n )\n } else {\n return core.setFailed(\n 'You must provide either `allowed` or `allowed_multiple` as input.'\n )\n }\n\n core.setOutput('match', matchingLabel.join(', '))\n } catch (error) {\n core.setFailed(error.message)\n }\n}\n\nrun()\n","function parseAllowed(allowed) {\n return allowed.split(/\\r?\\n/).flatMap((line) =>\n line\n .split(/,\\s*/)\n .map((label) => label.trim())\n .filter((label) => label)\n )\n}\n\nfunction findMatching(\n labelNames,\n allowedLabels,\n isMultipleAllowed,\n defaultMatch\n) {\n const allowedLabelsSet = new Set(allowedLabels)\n const matchingLabels = labelNames.filter((labelName) =>\n allowedLabelsSet.has(labelName)\n )\n if (\n matchingLabels.length === 0 &&\n defaultMatch !== undefined &&\n defaultMatch !== ''\n ) {\n return [defaultMatch]\n }\n\n if (\n isMultipleAllowed\n ? matchingLabels.length === 0\n : matchingLabels.length !== 1\n ) {\n const quantifier = isMultipleAllowed ? 'at least' : 'exactly'\n throw new Error(\n `Could not find ${quantifier} one of the appropriate labels on the PR.`\n )\n }\n\n return matchingLabels\n}\n\nmodule.exports = {parseAllowed, findMatching}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.issue = exports.issueCommand = void 0;\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\nconst oidc_utils_1 = require(\"./oidc-utils\");\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n const delimiter = '_GitHubActionsFileCommandDelimeter_';\n const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;\n file_command_1.issueCommand('ENV', commandValue);\n }\n else {\n command_1.issueCommand('set-env', { name }, convertedVal);\n }\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input.\n * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.\n * Returns an empty string if the value is not defined.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n if (options && options.trimWhitespace === false) {\n return val;\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Gets the values of an multiline input. Each value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string[]\n *\n */\nfunction getMultilineInput(name, options) {\n const inputs = getInput(name, options)\n .split('\\n')\n .filter(x => x !== '');\n return inputs;\n}\nexports.getMultilineInput = getMultilineInput;\n/**\n * Gets the input value of the boolean type in the YAML 1.2 \"core schema\" specification.\n * Support boolean input list: `true | True | TRUE | false | False | FALSE` .\n * The return value is also in boolean type.\n * ref: https://yaml.org/spec/1.2/spec.html#id2804923\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns boolean\n */\nfunction getBooleanInput(name, options) {\n const trueValue = ['true', 'True', 'TRUE'];\n const falseValue = ['false', 'False', 'FALSE'];\n const val = getInput(name, options);\n if (trueValue.includes(val))\n return true;\n if (falseValue.includes(val))\n return false;\n throw new TypeError(`Input does not meet YAML 1.2 \"Core Schema\" specification: ${name}\\n` +\n `Support boolean input list: \\`true | True | TRUE | false | False | FALSE\\``);\n}\nexports.getBooleanInput = getBooleanInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n process.stdout.write(os.EOL);\n command_1.issueCommand('set-output', { name }, value);\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction error(message, properties = {}) {\n command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds a warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction warning(message, properties = {}) {\n command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Adds a notice issue\n * @param message notice issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction notice(message, properties = {}) {\n command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.notice = notice;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n command_1.issueCommand('save-state', { name }, value);\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\nfunction getIDToken(aud) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield oidc_utils_1.OidcClient.getIDToken(aud);\n });\n}\nexports.getIDToken = getIDToken;\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.issueCommand = void 0;\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\nfunction issueCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueCommand = issueCommand;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OidcClient = void 0;\nconst http_client_1 = require(\"@actions/http-client\");\nconst auth_1 = require(\"@actions/http-client/auth\");\nconst core_1 = require(\"./core\");\nclass OidcClient {\n static createHttpClient(allowRetry = true, maxRetry = 10) {\n const requestOptions = {\n allowRetries: allowRetry,\n maxRetries: maxRetry\n };\n return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);\n }\n static getRequestToken() {\n const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];\n if (!token) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');\n }\n return token;\n }\n static getIDTokenUrl() {\n const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];\n if (!runtimeUrl) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');\n }\n return runtimeUrl;\n }\n static getCall(id_token_url) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const httpclient = OidcClient.createHttpClient();\n const res = yield httpclient\n .getJson(id_token_url)\n .catch(error => {\n throw new Error(`Failed to get ID Token. \\n \n Error Code : ${error.statusCode}\\n \n Error Message: ${error.result.message}`);\n });\n const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;\n if (!id_token) {\n throw new Error('Response json body do not have ID Token field');\n }\n return id_token;\n });\n }\n static getIDToken(audience) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n // New ID Token is requested from action service\n let id_token_url = OidcClient.getIDTokenUrl();\n if (audience) {\n const encodedAudience = encodeURIComponent(audience);\n id_token_url = `${id_token_url}&audience=${encodedAudience}`;\n }\n core_1.debug(`ID token url is ${id_token_url}`);\n const id_token = yield OidcClient.getCall(id_token_url);\n core_1.setSecret(id_token);\n return id_token;\n }\n catch (error) {\n throw new Error(`Error message: ${error.message}`);\n }\n });\n }\n}\nexports.OidcClient = OidcClient;\n//# sourceMappingURL=oidc-utils.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCommandProperties = exports.toCommandValue = void 0;\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n/**\n *\n * @param annotationProperties\n * @returns The command properties to send with the actual annotation command\n * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646\n */\nfunction toCommandProperties(annotationProperties) {\n if (!Object.keys(annotationProperties).length) {\n return {};\n }\n return {\n title: annotationProperties.title,\n file: annotationProperties.file,\n line: annotationProperties.startLine,\n endLine: annotationProperties.endLine,\n col: annotationProperties.startColumn,\n endColumn: annotationProperties.endColumn\n };\n}\nexports.toCommandProperties = toCommandProperties;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = require(\"fs\");\nconst os_1 = require(\"os\");\nclass Context {\n /**\n * Hydrate the context from the environment\n */\n constructor() {\n this.payload = {};\n if (process.env.GITHUB_EVENT_PATH) {\n if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {\n this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));\n }\n else {\n const path = process.env.GITHUB_EVENT_PATH;\n process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);\n }\n }\n this.eventName = process.env.GITHUB_EVENT_NAME;\n this.sha = process.env.GITHUB_SHA;\n this.ref = process.env.GITHUB_REF;\n this.workflow = process.env.GITHUB_WORKFLOW;\n this.action = process.env.GITHUB_ACTION;\n this.actor = process.env.GITHUB_ACTOR;\n }\n get issue() {\n const payload = this.payload;\n return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });\n }\n get repo() {\n if (process.env.GITHUB_REPOSITORY) {\n const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');\n return { owner, repo };\n }\n if (this.payload.repository) {\n return {\n owner: this.payload.repository.owner.login,\n repo: this.payload.repository.name\n };\n }\n throw new Error(\"context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'\");\n }\n}\nexports.Context = Context;\n//# sourceMappingURL=context.js.map","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts\nconst graphql_1 = require(\"@octokit/graphql\");\nconst rest_1 = require(\"@octokit/rest\");\nconst Context = __importStar(require(\"./context\"));\nconst httpClient = __importStar(require(\"@actions/http-client\"));\n// We need this in order to extend Octokit\nrest_1.Octokit.prototype = new rest_1.Octokit();\nexports.context = new Context.Context();\nclass GitHub extends rest_1.Octokit {\n constructor(token, opts) {\n super(GitHub.getOctokitOptions(GitHub.disambiguate(token, opts)));\n this.graphql = GitHub.getGraphQL(GitHub.disambiguate(token, opts));\n }\n /**\n * Disambiguates the constructor overload parameters\n */\n static disambiguate(token, opts) {\n return [\n typeof token === 'string' ? token : '',\n typeof token === 'object' ? token : opts || {}\n ];\n }\n static getOctokitOptions(args) {\n const token = args[0];\n const options = Object.assign({}, args[1]); // Shallow clone - don't mutate the object provided by the caller\n // Base URL - GHES or Dotcom\n options.baseUrl = options.baseUrl || this.getApiBaseUrl();\n // Auth\n const auth = GitHub.getAuthString(token, options);\n if (auth) {\n options.auth = auth;\n }\n // Proxy\n const agent = GitHub.getProxyAgent(options.baseUrl, options);\n if (agent) {\n // Shallow clone - don't mutate the object provided by the caller\n options.request = options.request ? Object.assign({}, options.request) : {};\n // Set the agent\n options.request.agent = agent;\n }\n return options;\n }\n static getGraphQL(args) {\n const defaults = {};\n defaults.baseUrl = this.getGraphQLBaseUrl();\n const token = args[0];\n const options = args[1];\n // Authorization\n const auth = this.getAuthString(token, options);\n if (auth) {\n defaults.headers = {\n authorization: auth\n };\n }\n // Proxy\n const agent = GitHub.getProxyAgent(defaults.baseUrl, options);\n if (agent) {\n defaults.request = { agent };\n }\n return graphql_1.graphql.defaults(defaults);\n }\n static getAuthString(token, options) {\n // Validate args\n if (!token && !options.auth) {\n throw new Error('Parameter token or opts.auth is required');\n }\n else if (token && options.auth) {\n throw new Error('Parameters token and opts.auth may not both be specified');\n }\n return typeof options.auth === 'string' ? options.auth : `token ${token}`;\n }\n static getProxyAgent(destinationUrl, options) {\n var _a;\n if (!((_a = options.request) === null || _a === void 0 ? void 0 : _a.agent)) {\n if (httpClient.getProxyUrl(destinationUrl)) {\n const hc = new httpClient.HttpClient();\n return hc.getAgent(destinationUrl);\n }\n }\n return undefined;\n }\n static getApiBaseUrl() {\n return process.env['GITHUB_API_URL'] || 'https://api.github.com';\n }\n static getGraphQLBaseUrl() {\n let url = process.env['GITHUB_GRAPHQL_URL'] || 'https://api.github.com/graphql';\n // Shouldn't be a trailing slash, but remove if so\n if (url.endsWith('/')) {\n url = url.substr(0, url.length - 1);\n }\n // Remove trailing \"/graphql\"\n if (url.toUpperCase().endsWith('/GRAPHQL')) {\n url = url.substr(0, url.length - '/graphql'.length);\n }\n return url;\n }\n}\nexports.GitHub = GitHub;\n//# sourceMappingURL=github.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass BasicCredentialHandler {\n constructor(username, password) {\n this.username = username;\n this.password = password;\n }\n prepareRequest(options) {\n options.headers['Authorization'] =\n 'Basic ' +\n Buffer.from(this.username + ':' + this.password).toString('base64');\n }\n // This handler cannot handle 401\n canHandleAuthentication(response) {\n return false;\n }\n handleAuthentication(httpClient, requestInfo, objs) {\n return null;\n }\n}\nexports.BasicCredentialHandler = BasicCredentialHandler;\nclass BearerCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n options.headers['Authorization'] = 'Bearer ' + this.token;\n }\n // This handler cannot handle 401\n canHandleAuthentication(response) {\n return false;\n }\n handleAuthentication(httpClient, requestInfo, objs) {\n return null;\n }\n}\nexports.BearerCredentialHandler = BearerCredentialHandler;\nclass PersonalAccessTokenCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n options.headers['Authorization'] =\n 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');\n }\n // This handler cannot handle 401\n canHandleAuthentication(response) {\n return false;\n }\n handleAuthentication(httpClient, requestInfo, objs) {\n return null;\n }\n}\nexports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst https = require(\"https\");\nconst pm = require(\"./proxy\");\nlet tunnel;\nvar HttpCodes;\n(function (HttpCodes) {\n HttpCodes[HttpCodes[\"OK\"] = 200] = \"OK\";\n HttpCodes[HttpCodes[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpCodes[HttpCodes[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpCodes[HttpCodes[\"ResourceMoved\"] = 302] = \"ResourceMoved\";\n HttpCodes[HttpCodes[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpCodes[HttpCodes[\"NotModified\"] = 304] = \"NotModified\";\n HttpCodes[HttpCodes[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpCodes[HttpCodes[\"SwitchProxy\"] = 306] = \"SwitchProxy\";\n HttpCodes[HttpCodes[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpCodes[HttpCodes[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpCodes[HttpCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpCodes[HttpCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpCodes[HttpCodes[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpCodes[HttpCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpCodes[HttpCodes[\"NotFound\"] = 404] = \"NotFound\";\n HttpCodes[HttpCodes[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpCodes[HttpCodes[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpCodes[HttpCodes[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpCodes[HttpCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpCodes[HttpCodes[\"Conflict\"] = 409] = \"Conflict\";\n HttpCodes[HttpCodes[\"Gone\"] = 410] = \"Gone\";\n HttpCodes[HttpCodes[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpCodes[HttpCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpCodes[HttpCodes[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpCodes[HttpCodes[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpCodes[HttpCodes[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpCodes[HttpCodes[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));\nvar Headers;\n(function (Headers) {\n Headers[\"Accept\"] = \"accept\";\n Headers[\"ContentType\"] = \"content-type\";\n})(Headers = exports.Headers || (exports.Headers = {}));\nvar MediaTypes;\n(function (MediaTypes) {\n MediaTypes[\"ApplicationJson\"] = \"application/json\";\n})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));\n/**\n * Returns the proxy URL, depending upon the supplied url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\nfunction getProxyUrl(serverUrl) {\n let proxyUrl = pm.getProxyUrl(new URL(serverUrl));\n return proxyUrl ? proxyUrl.href : '';\n}\nexports.getProxyUrl = getProxyUrl;\nconst HttpRedirectCodes = [\n HttpCodes.MovedPermanently,\n HttpCodes.ResourceMoved,\n HttpCodes.SeeOther,\n HttpCodes.TemporaryRedirect,\n HttpCodes.PermanentRedirect\n];\nconst HttpResponseRetryCodes = [\n HttpCodes.BadGateway,\n HttpCodes.ServiceUnavailable,\n HttpCodes.GatewayTimeout\n];\nconst RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];\nconst ExponentialBackoffCeiling = 10;\nconst ExponentialBackoffTimeSlice = 5;\nclass HttpClientError extends Error {\n constructor(message, statusCode) {\n super(message);\n this.name = 'HttpClientError';\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n}\nexports.HttpClientError = HttpClientError;\nclass HttpClientResponse {\n constructor(message) {\n this.message = message;\n }\n readBody() {\n return new Promise(async (resolve, reject) => {\n let output = Buffer.alloc(0);\n this.message.on('data', (chunk) => {\n output = Buffer.concat([output, chunk]);\n });\n this.message.on('end', () => {\n resolve(output.toString());\n });\n });\n }\n}\nexports.HttpClientResponse = HttpClientResponse;\nfunction isHttps(requestUrl) {\n let parsedUrl = new URL(requestUrl);\n return parsedUrl.protocol === 'https:';\n}\nexports.isHttps = isHttps;\nclass HttpClient {\n constructor(userAgent, handlers, requestOptions) {\n this._ignoreSslError = false;\n this._allowRedirects = true;\n this._allowRedirectDowngrade = false;\n this._maxRedirects = 50;\n this._allowRetries = false;\n this._maxRetries = 1;\n this._keepAlive = false;\n this._disposed = false;\n this.userAgent = userAgent;\n this.handlers = handlers || [];\n this.requestOptions = requestOptions;\n if (requestOptions) {\n if (requestOptions.ignoreSslError != null) {\n this._ignoreSslError = requestOptions.ignoreSslError;\n }\n this._socketTimeout = requestOptions.socketTimeout;\n if (requestOptions.allowRedirects != null) {\n this._allowRedirects = requestOptions.allowRedirects;\n }\n if (requestOptions.allowRedirectDowngrade != null) {\n this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;\n }\n if (requestOptions.maxRedirects != null) {\n this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);\n }\n if (requestOptions.keepAlive != null) {\n this._keepAlive = requestOptions.keepAlive;\n }\n if (requestOptions.allowRetries != null) {\n this._allowRetries = requestOptions.allowRetries;\n }\n if (requestOptions.maxRetries != null) {\n this._maxRetries = requestOptions.maxRetries;\n }\n }\n }\n options(requestUrl, additionalHeaders) {\n return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});\n }\n get(requestUrl, additionalHeaders) {\n return this.request('GET', requestUrl, null, additionalHeaders || {});\n }\n del(requestUrl, additionalHeaders) {\n return this.request('DELETE', requestUrl, null, additionalHeaders || {});\n }\n post(requestUrl, data, additionalHeaders) {\n return this.request('POST', requestUrl, data, additionalHeaders || {});\n }\n patch(requestUrl, data, additionalHeaders) {\n return this.request('PATCH', requestUrl, data, additionalHeaders || {});\n }\n put(requestUrl, data, additionalHeaders) {\n return this.request('PUT', requestUrl, data, additionalHeaders || {});\n }\n head(requestUrl, additionalHeaders) {\n return this.request('HEAD', requestUrl, null, additionalHeaders || {});\n }\n sendStream(verb, requestUrl, stream, additionalHeaders) {\n return this.request(verb, requestUrl, stream, additionalHeaders);\n }\n /**\n * Gets a typed object from an endpoint\n * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise\n */\n async getJson(requestUrl, additionalHeaders = {}) {\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n let res = await this.get(requestUrl, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async postJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.post(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async putJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.put(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async patchJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.patch(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n /**\n * Makes a raw http request.\n * All other methods such as get, post, patch, and request ultimately call this.\n * Prefer get, del, post and patch\n */\n async request(verb, requestUrl, data, headers) {\n if (this._disposed) {\n throw new Error('Client has already been disposed.');\n }\n let parsedUrl = new URL(requestUrl);\n let info = this._prepareRequest(verb, parsedUrl, headers);\n // Only perform retries on reads since writes may not be idempotent.\n let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1\n ? this._maxRetries + 1\n : 1;\n let numTries = 0;\n let response;\n while (numTries < maxTries) {\n response = await this.requestRaw(info, data);\n // Check if it's an authentication challenge\n if (response &&\n response.message &&\n response.message.statusCode === HttpCodes.Unauthorized) {\n let authenticationHandler;\n for (let i = 0; i < this.handlers.length; i++) {\n if (this.handlers[i].canHandleAuthentication(response)) {\n authenticationHandler = this.handlers[i];\n break;\n }\n }\n if (authenticationHandler) {\n return authenticationHandler.handleAuthentication(this, info, data);\n }\n else {\n // We have received an unauthorized response but have no handlers to handle it.\n // Let the response return to the caller.\n return response;\n }\n }\n let redirectsRemaining = this._maxRedirects;\n while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&\n this._allowRedirects &&\n redirectsRemaining > 0) {\n const redirectUrl = response.message.headers['location'];\n if (!redirectUrl) {\n // if there's no location to redirect to, we won't\n break;\n }\n let parsedRedirectUrl = new URL(redirectUrl);\n if (parsedUrl.protocol == 'https:' &&\n parsedUrl.protocol != parsedRedirectUrl.protocol &&\n !this._allowRedirectDowngrade) {\n 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.');\n }\n // we need to finish reading the response before reassigning response\n // which will leak the open socket.\n await response.readBody();\n // strip authorization header if redirected to a different hostname\n if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {\n for (let header in headers) {\n // header names are case insensitive\n if (header.toLowerCase() === 'authorization') {\n delete headers[header];\n }\n }\n }\n // let's make the request with the new redirectUrl\n info = this._prepareRequest(verb, parsedRedirectUrl, headers);\n response = await this.requestRaw(info, data);\n redirectsRemaining--;\n }\n if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {\n // If not a retry code, return immediately instead of retrying\n return response;\n }\n numTries += 1;\n if (numTries < maxTries) {\n await response.readBody();\n await this._performExponentialBackoff(numTries);\n }\n }\n return response;\n }\n /**\n * Needs to be called if keepAlive is set to true in request options.\n */\n dispose() {\n if (this._agent) {\n this._agent.destroy();\n }\n this._disposed = true;\n }\n /**\n * Raw request.\n * @param info\n * @param data\n */\n requestRaw(info, data) {\n return new Promise((resolve, reject) => {\n let callbackForResult = function (err, res) {\n if (err) {\n reject(err);\n }\n resolve(res);\n };\n this.requestRawWithCallback(info, data, callbackForResult);\n });\n }\n /**\n * Raw request with callback.\n * @param info\n * @param data\n * @param onResult\n */\n requestRawWithCallback(info, data, onResult) {\n let socket;\n if (typeof data === 'string') {\n info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');\n }\n let callbackCalled = false;\n let handleResult = (err, res) => {\n if (!callbackCalled) {\n callbackCalled = true;\n onResult(err, res);\n }\n };\n let req = info.httpModule.request(info.options, (msg) => {\n let res = new HttpClientResponse(msg);\n handleResult(null, res);\n });\n req.on('socket', sock => {\n socket = sock;\n });\n // If we ever get disconnected, we want the socket to timeout eventually\n req.setTimeout(this._socketTimeout || 3 * 60000, () => {\n if (socket) {\n socket.end();\n }\n handleResult(new Error('Request timeout: ' + info.options.path), null);\n });\n req.on('error', function (err) {\n // err has statusCode property\n // res should have headers\n handleResult(err, null);\n });\n if (data && typeof data === 'string') {\n req.write(data, 'utf8');\n }\n if (data && typeof data !== 'string') {\n data.on('close', function () {\n req.end();\n });\n data.pipe(req);\n }\n else {\n req.end();\n }\n }\n /**\n * Gets an http agent. This function is useful when you need an http agent that handles\n * routing through a proxy server - depending upon the url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\n getAgent(serverUrl) {\n let parsedUrl = new URL(serverUrl);\n return this._getAgent(parsedUrl);\n }\n _prepareRequest(method, requestUrl, headers) {\n const info = {};\n info.parsedUrl = requestUrl;\n const usingSsl = info.parsedUrl.protocol === 'https:';\n info.httpModule = usingSsl ? https : http;\n const defaultPort = usingSsl ? 443 : 80;\n info.options = {};\n info.options.host = info.parsedUrl.hostname;\n info.options.port = info.parsedUrl.port\n ? parseInt(info.parsedUrl.port)\n : defaultPort;\n info.options.path =\n (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');\n info.options.method = method;\n info.options.headers = this._mergeHeaders(headers);\n if (this.userAgent != null) {\n info.options.headers['user-agent'] = this.userAgent;\n }\n info.options.agent = this._getAgent(info.parsedUrl);\n // gives handlers an opportunity to participate\n if (this.handlers) {\n this.handlers.forEach(handler => {\n handler.prepareRequest(info.options);\n });\n }\n return info;\n }\n _mergeHeaders(headers) {\n const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n if (this.requestOptions && this.requestOptions.headers) {\n return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));\n }\n return lowercaseKeys(headers || {});\n }\n _getExistingOrDefaultHeader(additionalHeaders, header, _default) {\n const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n let clientHeader;\n if (this.requestOptions && this.requestOptions.headers) {\n clientHeader = lowercaseKeys(this.requestOptions.headers)[header];\n }\n return additionalHeaders[header] || clientHeader || _default;\n }\n _getAgent(parsedUrl) {\n let agent;\n let proxyUrl = pm.getProxyUrl(parsedUrl);\n let useProxy = proxyUrl && proxyUrl.hostname;\n if (this._keepAlive && useProxy) {\n agent = this._proxyAgent;\n }\n if (this._keepAlive && !useProxy) {\n agent = this._agent;\n }\n // if agent is already assigned use that agent.\n if (!!agent) {\n return agent;\n }\n const usingSsl = parsedUrl.protocol === 'https:';\n let maxSockets = 100;\n if (!!this.requestOptions) {\n maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;\n }\n if (useProxy) {\n // If using proxy, need tunnel\n if (!tunnel) {\n tunnel = require('tunnel');\n }\n const agentOptions = {\n maxSockets: maxSockets,\n keepAlive: this._keepAlive,\n proxy: {\n ...((proxyUrl.username || proxyUrl.password) && {\n proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`\n }),\n host: proxyUrl.hostname,\n port: proxyUrl.port\n }\n };\n let tunnelAgent;\n const overHttps = proxyUrl.protocol === 'https:';\n if (usingSsl) {\n tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;\n }\n else {\n tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;\n }\n agent = tunnelAgent(agentOptions);\n this._proxyAgent = agent;\n }\n // if reusing agent across request and tunneling agent isn't assigned create a new agent\n if (this._keepAlive && !agent) {\n const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };\n agent = usingSsl ? new https.Agent(options) : new http.Agent(options);\n this._agent = agent;\n }\n // if not using private agent and tunnel agent isn't setup then use global agent\n if (!agent) {\n agent = usingSsl ? https.globalAgent : http.globalAgent;\n }\n if (usingSsl && this._ignoreSslError) {\n // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process\n // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options\n // we have to cast it to any and change it directly\n agent.options = Object.assign(agent.options || {}, {\n rejectUnauthorized: false\n });\n }\n return agent;\n }\n _performExponentialBackoff(retryNumber) {\n retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);\n const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);\n return new Promise(resolve => setTimeout(() => resolve(), ms));\n }\n static dateTimeDeserializer(key, value) {\n if (typeof value === 'string') {\n let a = new Date(value);\n if (!isNaN(a.valueOf())) {\n return a;\n }\n }\n return value;\n }\n async _processResponse(res, options) {\n return new Promise(async (resolve, reject) => {\n const statusCode = res.message.statusCode;\n const response = {\n statusCode: statusCode,\n result: null,\n headers: {}\n };\n // not found leads to null obj returned\n if (statusCode == HttpCodes.NotFound) {\n resolve(response);\n }\n let obj;\n let contents;\n // get the result from the body\n try {\n contents = await res.readBody();\n if (contents && contents.length > 0) {\n if (options && options.deserializeDates) {\n obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);\n }\n else {\n obj = JSON.parse(contents);\n }\n response.result = obj;\n }\n response.headers = res.message.headers;\n }\n catch (err) {\n // Invalid resource (contents not json); leaving result obj null\n }\n // note that 3xx redirects are handled by the http layer.\n if (statusCode > 299) {\n let msg;\n // if exception/error in body, attempt to get better error\n if (obj && obj.message) {\n msg = obj.message;\n }\n else if (contents && contents.length > 0) {\n // it may be the case that the exception is in the body message as string\n msg = contents;\n }\n else {\n msg = 'Failed request: (' + statusCode + ')';\n }\n let err = new HttpClientError(msg, statusCode);\n err.result = response.result;\n reject(err);\n }\n else {\n resolve(response);\n }\n });\n }\n}\nexports.HttpClient = HttpClient;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction getProxyUrl(reqUrl) {\n let usingSsl = reqUrl.protocol === 'https:';\n let proxyUrl;\n if (checkBypass(reqUrl)) {\n return proxyUrl;\n }\n let proxyVar;\n if (usingSsl) {\n proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];\n }\n else {\n proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];\n }\n if (proxyVar) {\n proxyUrl = new URL(proxyVar);\n }\n return proxyUrl;\n}\nexports.getProxyUrl = getProxyUrl;\nfunction checkBypass(reqUrl) {\n if (!reqUrl.hostname) {\n return false;\n }\n let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';\n if (!noProxy) {\n return false;\n }\n // Determine the request port\n let reqPort;\n if (reqUrl.port) {\n reqPort = Number(reqUrl.port);\n }\n else if (reqUrl.protocol === 'http:') {\n reqPort = 80;\n }\n else if (reqUrl.protocol === 'https:') {\n reqPort = 443;\n }\n // Format the request hostname and hostname with port\n let upperReqHosts = [reqUrl.hostname.toUpperCase()];\n if (typeof reqPort === 'number') {\n upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);\n }\n // Compare request host against noproxy\n for (let upperNoProxyItem of noProxy\n .split(',')\n .map(x => x.trim().toUpperCase())\n .filter(x => x)) {\n if (upperReqHosts.some(x => x === upperNoProxyItem)) {\n return true;\n }\n }\n return false;\n}\nexports.checkBypass = checkBypass;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst REGEX_IS_INSTALLATION_LEGACY = /^v1\\./;\nconst REGEX_IS_INSTALLATION = /^ghs_/;\nconst REGEX_IS_USER_TO_SERVER = /^ghu_/;\nasync function auth(token) {\n const isApp = token.split(/\\./).length === 3;\n const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);\n const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);\n const tokenType = isApp ? \"app\" : isInstallation ? \"installation\" : isUserToServer ? \"user-to-server\" : \"oauth\";\n return {\n type: \"token\",\n token: token,\n tokenType\n };\n}\n\n/**\n * Prefix token for usage in the Authorization header\n *\n * @param token OAuth token or JSON Web Token\n */\nfunction withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n\n return `token ${token}`;\n}\n\nasync function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(route, parameters);\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n\nconst createTokenAuth = function createTokenAuth(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n\n if (typeof token !== \"string\") {\n throw new Error(\"[@octokit/auth-token] Token passed to createTokenAuth is not a string\");\n }\n\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\n\nexports.createTokenAuth = createTokenAuth;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isPlainObject = require('is-plain-object');\nvar universalUserAgent = require('universal-user-agent');\n\nfunction lowercaseKeys(object) {\n if (!object) {\n return {};\n }\n\n return Object.keys(object).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = object[key];\n return newObj;\n }, {});\n}\n\nfunction mergeDeep(defaults, options) {\n const result = Object.assign({}, defaults);\n Object.keys(options).forEach(key => {\n if (isPlainObject.isPlainObject(options[key])) {\n if (!(key in defaults)) Object.assign(result, {\n [key]: options[key]\n });else result[key] = mergeDeep(defaults[key], options[key]);\n } else {\n Object.assign(result, {\n [key]: options[key]\n });\n }\n });\n return result;\n}\n\nfunction removeUndefinedProperties(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n\n return obj;\n}\n\nfunction merge(defaults, route, options) {\n if (typeof route === \"string\") {\n let [method, url] = route.split(\" \");\n options = Object.assign(url ? {\n method,\n url\n } : {\n url: method\n }, options);\n } else {\n options = Object.assign({}, route);\n } // lowercase header names before merging with defaults to avoid duplicates\n\n\n options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging\n\n removeUndefinedProperties(options);\n removeUndefinedProperties(options.headers);\n const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten\n\n if (defaults && defaults.mediaType.previews.length) {\n mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);\n }\n\n mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, \"\"));\n return mergedOptions;\n}\n\nfunction addQueryParameters(url, parameters) {\n const separator = /\\?/.test(url) ? \"&\" : \"?\";\n const names = Object.keys(parameters);\n\n if (names.length === 0) {\n return url;\n }\n\n return url + separator + names.map(name => {\n if (name === \"q\") {\n return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n }\n\n return `${name}=${encodeURIComponent(parameters[name])}`;\n }).join(\"&\");\n}\n\nconst urlVariableRegex = /\\{[^}]+\\}/g;\n\nfunction removeNonChars(variableName) {\n return variableName.replace(/^\\W+|\\W+$/g, \"\").split(/,/);\n}\n\nfunction extractUrlVariableNames(url) {\n const matches = url.match(urlVariableRegex);\n\n if (!matches) {\n return [];\n }\n\n return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\nfunction omit(object, keysToOmit) {\n return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {\n obj[key] = object[key];\n return obj;\n }, {});\n}\n\n// Based on https://github.com/bramstein/url-template, licensed under BSD\n// TODO: create separate package.\n//\n// Copyright (c) 2012-2014, Bram Stein\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n// 1. Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// 3. The name of the author may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\n// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/* istanbul ignore file */\nfunction encodeReserved(str) {\n return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {\n if (!/%[0-9A-Fa-f]/.test(part)) {\n part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n }\n\n return part;\n }).join(\"\");\n}\n\nfunction encodeUnreserved(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\nfunction encodeValue(operator, value, key) {\n value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n\n if (key) {\n return encodeUnreserved(key) + \"=\" + value;\n } else {\n return value;\n }\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nfunction isKeyOperator(operator) {\n return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\n\nfunction getValues(context, operator, key, modifier) {\n var value = context[key],\n result = [];\n\n if (isDefined(value) && value !== \"\") {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n value = value.toString();\n\n if (modifier && modifier !== \"*\") {\n value = value.substring(0, parseInt(modifier, 10));\n }\n\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n } else {\n if (modifier === \"*\") {\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n result.push(encodeValue(operator, value[k], k));\n }\n });\n }\n } else {\n const tmp = [];\n\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n tmp.push(encodeValue(operator, value));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n tmp.push(encodeUnreserved(k));\n tmp.push(encodeValue(operator, value[k].toString()));\n }\n });\n }\n\n if (isKeyOperator(operator)) {\n result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n } else if (tmp.length !== 0) {\n result.push(tmp.join(\",\"));\n }\n }\n }\n } else {\n if (operator === \";\") {\n if (isDefined(value)) {\n result.push(encodeUnreserved(key));\n }\n } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n result.push(encodeUnreserved(key) + \"=\");\n } else if (value === \"\") {\n result.push(\"\");\n }\n }\n\n return result;\n}\n\nfunction parseUrl(template) {\n return {\n expand: expand.bind(null, template)\n };\n}\n\nfunction expand(template, context) {\n var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n return template.replace(/\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g, function (_, expression, literal) {\n if (expression) {\n let operator = \"\";\n const values = [];\n\n if (operators.indexOf(expression.charAt(0)) !== -1) {\n operator = expression.charAt(0);\n expression = expression.substr(1);\n }\n\n expression.split(/,/g).forEach(function (variable) {\n var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n });\n\n if (operator && operator !== \"+\") {\n var separator = \",\";\n\n if (operator === \"?\") {\n separator = \"&\";\n } else if (operator !== \"#\") {\n separator = operator;\n }\n\n return (values.length !== 0 ? operator : \"\") + values.join(separator);\n } else {\n return values.join(\",\");\n }\n } else {\n return encodeReserved(literal);\n }\n });\n}\n\nfunction parse(options) {\n // https://fetch.spec.whatwg.org/#methods\n let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible\n\n let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n let headers = Object.assign({}, options.headers);\n let body;\n let parameters = omit(options, [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"mediaType\"]); // extract variable names from URL to calculate remaining variables later\n\n const urlVariableNames = extractUrlVariableNames(url);\n url = parseUrl(url).expand(parameters);\n\n if (!/^http/.test(url)) {\n url = options.baseUrl + url;\n }\n\n const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat(\"baseUrl\");\n const remainingParameters = omit(parameters, omittedParameters);\n const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n\n if (!isBinaryRequest) {\n if (options.mediaType.format) {\n // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw\n headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(\",\");\n }\n\n if (options.mediaType.previews.length) {\n const previewsFromAcceptHeader = headers.accept.match(/[\\w-]+(?=-preview)/g) || [];\n headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {\n const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n return `application/vnd.github.${preview}-preview${format}`;\n }).join(\",\");\n }\n } // for GET/HEAD requests, set URL query parameters from remaining parameters\n // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters\n\n\n if ([\"GET\", \"HEAD\"].includes(method)) {\n url = addQueryParameters(url, remainingParameters);\n } else {\n if (\"data\" in remainingParameters) {\n body = remainingParameters.data;\n } else {\n if (Object.keys(remainingParameters).length) {\n body = remainingParameters;\n } else {\n headers[\"content-length\"] = 0;\n }\n }\n } // default content-type for JSON if body is set\n\n\n if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json; charset=utf-8\";\n } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.\n // fetch does not allow to set `content-length` header, but we can set body to an empty string\n\n\n if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n body = \"\";\n } // Only return body/request keys if present\n\n\n return Object.assign({\n method,\n url,\n headers\n }, typeof body !== \"undefined\" ? {\n body\n } : null, options.request ? {\n request: options.request\n } : null);\n}\n\nfunction endpointWithDefaults(defaults, route, options) {\n return parse(merge(defaults, route, options));\n}\n\nfunction withDefaults(oldDefaults, newDefaults) {\n const DEFAULTS = merge(oldDefaults, newDefaults);\n const endpoint = endpointWithDefaults.bind(null, DEFAULTS);\n return Object.assign(endpoint, {\n DEFAULTS,\n defaults: withDefaults.bind(null, DEFAULTS),\n merge: merge.bind(null, DEFAULTS),\n parse\n });\n}\n\nconst VERSION = \"6.0.12\";\n\nconst userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.\n// So we use RequestParameters and add method as additional required property.\n\nconst DEFAULTS = {\n method: \"GET\",\n baseUrl: \"https://api.github.com\",\n headers: {\n accept: \"application/vnd.github.v3+json\",\n \"user-agent\": userAgent\n },\n mediaType: {\n format: \"\",\n previews: []\n }\n};\n\nconst endpoint = withDefaults(null, DEFAULTS);\n\nexports.endpoint = endpoint;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar request = require('@octokit/request');\nvar universalUserAgent = require('universal-user-agent');\n\nconst VERSION = \"4.8.0\";\n\nfunction _buildMessageForResponseErrors(data) {\n return `Request failed due to following response errors:\\n` + data.errors.map(e => ` - ${e.message}`).join(\"\\n\");\n}\n\nclass GraphqlResponseError extends Error {\n constructor(request, headers, response) {\n super(_buildMessageForResponseErrors(response));\n this.request = request;\n this.headers = headers;\n this.response = response;\n this.name = \"GraphqlResponseError\"; // Expose the errors and response data in their shorthand properties.\n\n this.errors = response.errors;\n this.data = response.data; // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n}\n\nconst NON_VARIABLE_OPTIONS = [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"query\", \"mediaType\"];\nconst FORBIDDEN_VARIABLE_OPTIONS = [\"query\", \"method\", \"url\"];\nconst GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request, query, options) {\n if (options) {\n if (typeof query === \"string\" && \"query\" in options) {\n return Promise.reject(new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`));\n }\n\n for (const key in options) {\n if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;\n return Promise.reject(new Error(`[@octokit/graphql] \"${key}\" cannot be used as variable name`));\n }\n }\n\n const parsedOptions = typeof query === \"string\" ? Object.assign({\n query\n }, options) : query;\n const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {\n if (NON_VARIABLE_OPTIONS.includes(key)) {\n result[key] = parsedOptions[key];\n return result;\n }\n\n if (!result.variables) {\n result.variables = {};\n }\n\n result.variables[key] = parsedOptions[key];\n return result;\n }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix\n // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451\n\n const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl;\n\n if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n }\n\n return request(requestOptions).then(response => {\n if (response.data.errors) {\n const headers = {};\n\n for (const key of Object.keys(response.headers)) {\n headers[key] = response.headers[key];\n }\n\n throw new GraphqlResponseError(requestOptions, headers, response.data);\n }\n\n return response.data.data;\n });\n}\n\nfunction withDefaults(request$1, newDefaults) {\n const newRequest = request$1.defaults(newDefaults);\n\n const newApi = (query, options) => {\n return graphql(newRequest, query, options);\n };\n\n return Object.assign(newApi, {\n defaults: withDefaults.bind(null, newRequest),\n endpoint: request.request.endpoint\n });\n}\n\nconst graphql$1 = withDefaults(request.request, {\n headers: {\n \"user-agent\": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n },\n method: \"POST\",\n url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n return withDefaults(customRequest, {\n method: \"POST\",\n url: \"/graphql\"\n });\n}\n\nexports.GraphqlResponseError = GraphqlResponseError;\nexports.graphql = graphql$1;\nexports.withCustomRequest = withCustomRequest;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst VERSION = \"1.1.2\";\n\n/**\n * Some “list” response that can be paginated have a different response structure\n *\n * They have a `total_count` key in the response (search also has `incomplete_results`,\n * /installation/repositories also has `repository_selection`), as well as a key with\n * the list of the items which name varies from endpoint to endpoint:\n *\n * - https://developer.github.com/v3/search/#example (key `items`)\n * - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`)\n * - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`)\n * - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`)\n * - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`)\n *\n * Octokit normalizes these responses so that paginated results are always returned following\n * the same structure. One challenge is that if the list response has only one page, no Link\n * header is provided, so this header alone is not sufficient to check wether a response is\n * paginated or not. For the exceptions with the namespace, a fallback check for the route\n * paths has to be added in order to normalize the response. We cannot check for the total_count\n * property because it also exists in the response of Get the combined status for a specific ref.\n */\nconst REGEX = [/^\\/search\\//, /^\\/repos\\/[^/]+\\/[^/]+\\/commits\\/[^/]+\\/(check-runs|check-suites)([^/]|$)/, /^\\/installation\\/repositories([^/]|$)/, /^\\/user\\/installations([^/]|$)/, /^\\/repos\\/[^/]+\\/[^/]+\\/actions\\/secrets([^/]|$)/, /^\\/repos\\/[^/]+\\/[^/]+\\/actions\\/workflows(\\/[^/]+\\/runs)?([^/]|$)/, /^\\/repos\\/[^/]+\\/[^/]+\\/actions\\/runs(\\/[^/]+\\/(artifacts|jobs))?([^/]|$)/];\nfunction normalizePaginatedListResponse(octokit, url, response) {\n const path = url.replace(octokit.request.endpoint.DEFAULTS.baseUrl, \"\");\n const responseNeedsNormalization = REGEX.find(regex => regex.test(path));\n if (!responseNeedsNormalization) return; // keep the additional properties intact as there is currently no other way\n // to retrieve the same information.\n\n const incompleteResults = response.data.incomplete_results;\n const repositorySelection = response.data.repository_selection;\n const totalCount = response.data.total_count;\n delete response.data.incomplete_results;\n delete response.data.repository_selection;\n delete response.data.total_count;\n const namespaceKey = Object.keys(response.data)[0];\n const data = response.data[namespaceKey];\n response.data = data;\n\n if (typeof incompleteResults !== \"undefined\") {\n response.data.incomplete_results = incompleteResults;\n }\n\n if (typeof repositorySelection !== \"undefined\") {\n response.data.repository_selection = repositorySelection;\n }\n\n response.data.total_count = totalCount;\n Object.defineProperty(response.data, namespaceKey, {\n get() {\n octokit.log.warn(`[@octokit/paginate-rest] \"response.data.${namespaceKey}\" is deprecated for \"GET ${path}\". Get the results directly from \"response.data\"`);\n return Array.from(data);\n }\n\n });\n}\n\nfunction iterator(octokit, route, parameters) {\n const options = octokit.request.endpoint(route, parameters);\n const method = options.method;\n const headers = options.headers;\n let url = options.url;\n return {\n [Symbol.asyncIterator]: () => ({\n next() {\n if (!url) {\n return Promise.resolve({\n done: true\n });\n }\n\n return octokit.request({\n method,\n url,\n headers\n }).then(response => {\n normalizePaginatedListResponse(octokit, url, response); // `response.headers.link` format:\n // '; rel=\"next\", ; rel=\"last\"'\n // sets `url` to undefined if \"next\" URL is not present or `link` header is not set\n\n url = ((response.headers.link || \"\").match(/<([^>]+)>;\\s*rel=\"next\"/) || [])[1];\n return {\n value: response\n };\n });\n }\n\n })\n };\n}\n\nfunction paginate(octokit, route, parameters, mapFn) {\n if (typeof parameters === \"function\") {\n mapFn = parameters;\n parameters = undefined;\n }\n\n return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);\n}\n\nfunction gather(octokit, results, iterator, mapFn) {\n return iterator.next().then(result => {\n if (result.done) {\n return results;\n }\n\n let earlyExit = false;\n\n function done() {\n earlyExit = true;\n }\n\n results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);\n\n if (earlyExit) {\n return results;\n }\n\n return gather(octokit, results, iterator, mapFn);\n });\n}\n\n/**\n * @param octokit Octokit instance\n * @param options Options passed to Octokit constructor\n */\n\nfunction paginateRest(octokit) {\n return {\n paginate: Object.assign(paginate.bind(null, octokit), {\n iterator: iterator.bind(null, octokit)\n })\n };\n}\npaginateRest.VERSION = VERSION;\n\nexports.paginateRest = paginateRest;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst VERSION = \"1.0.4\";\n\n/**\n * @param octokit Octokit instance\n * @param options Options passed to Octokit constructor\n */\n\nfunction requestLog(octokit) {\n octokit.hook.wrap(\"request\", (request, options) => {\n octokit.log.debug(\"request\", options);\n const start = Date.now();\n const requestOptions = octokit.request.endpoint.parse(options);\n const path = requestOptions.url.replace(options.baseUrl, \"\");\n return request(options).then(response => {\n octokit.log.info(`${requestOptions.method} ${path} - ${response.status} in ${Date.now() - start}ms`);\n return response;\n }).catch(error => {\n octokit.log.info(`${requestOptions.method} ${path} - ${error.status} in ${Date.now() - start}ms`);\n throw error;\n });\n });\n}\nrequestLog.VERSION = VERSION;\n\nexports.requestLog = requestLog;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar deprecation = require('deprecation');\n\nvar endpointsByScope = {\n actions: {\n cancelWorkflowRun: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/cancel\"\n },\n createOrUpdateSecretForRepo: {\n method: \"PUT\",\n params: {\n encrypted_value: {\n type: \"string\"\n },\n key_id: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/:name\"\n },\n createRegistrationToken: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/registration-token\"\n },\n createRemoveToken: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/remove-token\"\n },\n deleteArtifact: {\n method: \"DELETE\",\n params: {\n artifact_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/artifacts/:artifact_id\"\n },\n deleteSecretFromRepo: {\n method: \"DELETE\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/:name\"\n },\n downloadArtifact: {\n method: \"GET\",\n params: {\n archive_format: {\n required: true,\n type: \"string\"\n },\n artifact_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/artifacts/:artifact_id/:archive_format\"\n },\n getArtifact: {\n method: \"GET\",\n params: {\n artifact_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/artifacts/:artifact_id\"\n },\n getPublicKey: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/public-key\"\n },\n getSecret: {\n method: \"GET\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/:name\"\n },\n getSelfHostedRunner: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n runner_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/:runner_id\"\n },\n getWorkflow: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n workflow_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/workflows/:workflow_id\"\n },\n getWorkflowJob: {\n method: \"GET\",\n params: {\n job_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/jobs/:job_id\"\n },\n getWorkflowRun: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id\"\n },\n listDownloadsForSelfHostedRunnerApplication: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/downloads\"\n },\n listJobsForWorkflowRun: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/jobs\"\n },\n listRepoWorkflowRuns: {\n method: \"GET\",\n params: {\n actor: {\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n event: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"completed\", \"status\", \"conclusion\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs\"\n },\n listRepoWorkflows: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/workflows\"\n },\n listSecretsForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets\"\n },\n listSelfHostedRunnersForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners\"\n },\n listWorkflowJobLogs: {\n method: \"GET\",\n params: {\n job_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/jobs/:job_id/logs\"\n },\n listWorkflowRunArtifacts: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/artifacts\"\n },\n listWorkflowRunLogs: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/logs\"\n },\n listWorkflowRuns: {\n method: \"GET\",\n params: {\n actor: {\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n event: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"completed\", \"status\", \"conclusion\"],\n type: \"string\"\n },\n workflow_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/workflows/:workflow_id/runs\"\n },\n reRunWorkflow: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/rerun\"\n },\n removeSelfHostedRunner: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n runner_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/:runner_id\"\n }\n },\n activity: {\n checkStarringRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/starred/:owner/:repo\"\n },\n deleteRepoSubscription: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/subscription\"\n },\n deleteThreadSubscription: {\n method: \"DELETE\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id/subscription\"\n },\n getRepoSubscription: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/subscription\"\n },\n getThread: {\n method: \"GET\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id\"\n },\n getThreadSubscription: {\n method: \"GET\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id/subscription\"\n },\n listEventsForOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/events/orgs/:org\"\n },\n listEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/events\"\n },\n listFeeds: {\n method: \"GET\",\n params: {},\n url: \"/feeds\"\n },\n listNotifications: {\n method: \"GET\",\n params: {\n all: {\n type: \"boolean\"\n },\n before: {\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n participating: {\n type: \"boolean\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/notifications\"\n },\n listNotificationsForRepo: {\n method: \"GET\",\n params: {\n all: {\n type: \"boolean\"\n },\n before: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n participating: {\n type: \"boolean\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/notifications\"\n },\n listPublicEvents: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/events\"\n },\n listPublicEventsForOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/events\"\n },\n listPublicEventsForRepoNetwork: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/networks/:owner/:repo/events\"\n },\n listPublicEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/events/public\"\n },\n listReceivedEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/received_events\"\n },\n listReceivedPublicEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/received_events/public\"\n },\n listRepoEvents: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/events\"\n },\n listReposStarredByAuthenticatedUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/user/starred\"\n },\n listReposStarredByUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/starred\"\n },\n listReposWatchedByUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/subscriptions\"\n },\n listStargazersForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stargazers\"\n },\n listWatchedReposForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/subscriptions\"\n },\n listWatchersForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/subscribers\"\n },\n markAsRead: {\n method: \"PUT\",\n params: {\n last_read_at: {\n type: \"string\"\n }\n },\n url: \"/notifications\"\n },\n markNotificationsAsReadForRepo: {\n method: \"PUT\",\n params: {\n last_read_at: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/notifications\"\n },\n markThreadAsRead: {\n method: \"PATCH\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id\"\n },\n setRepoSubscription: {\n method: \"PUT\",\n params: {\n ignored: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n subscribed: {\n type: \"boolean\"\n }\n },\n url: \"/repos/:owner/:repo/subscription\"\n },\n setThreadSubscription: {\n method: \"PUT\",\n params: {\n ignored: {\n type: \"boolean\"\n },\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id/subscription\"\n },\n starRepo: {\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/starred/:owner/:repo\"\n },\n unstarRepo: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/starred/:owner/:repo\"\n }\n },\n apps: {\n addRepoToInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"PUT\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n repository_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/installations/:installation_id/repositories/:repository_id\"\n },\n checkAccountIsAssociatedWithAny: {\n method: \"GET\",\n params: {\n account_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/accounts/:account_id\"\n },\n checkAccountIsAssociatedWithAnyStubbed: {\n method: \"GET\",\n params: {\n account_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/stubbed/accounts/:account_id\"\n },\n checkAuthorization: {\n deprecated: \"octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization\",\n method: \"GET\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n checkToken: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"POST\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/token\"\n },\n createContentAttachment: {\n headers: {\n accept: \"application/vnd.github.corsair-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n content_reference_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/content_references/:content_reference_id/attachments\"\n },\n createFromManifest: {\n headers: {\n accept: \"application/vnd.github.fury-preview+json\"\n },\n method: \"POST\",\n params: {\n code: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/app-manifests/:code/conversions\"\n },\n createInstallationToken: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"POST\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n permissions: {\n type: \"object\"\n },\n repository_ids: {\n type: \"integer[]\"\n }\n },\n url: \"/app/installations/:installation_id/access_tokens\"\n },\n deleteAuthorization: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"DELETE\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/grant\"\n },\n deleteInstallation: {\n headers: {\n accept: \"application/vnd.github.gambit-preview+json,application/vnd.github.machine-man-preview+json\"\n },\n method: \"DELETE\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/app/installations/:installation_id\"\n },\n deleteToken: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"DELETE\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/token\"\n },\n findOrgInstallation: {\n deprecated: \"octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)\",\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/installation\"\n },\n findRepoInstallation: {\n deprecated: \"octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)\",\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/installation\"\n },\n findUserInstallation: {\n deprecated: \"octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)\",\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/installation\"\n },\n getAuthenticated: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {},\n url: \"/app\"\n },\n getBySlug: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n app_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/apps/:app_slug\"\n },\n getInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/app/installations/:installation_id\"\n },\n getOrgInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/installation\"\n },\n getRepoInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/installation\"\n },\n getUserInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/installation\"\n },\n listAccountsUserOrOrgOnPlan: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n plan_id: {\n required: true,\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/marketplace_listing/plans/:plan_id/accounts\"\n },\n listAccountsUserOrOrgOnPlanStubbed: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n plan_id: {\n required: true,\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/marketplace_listing/stubbed/plans/:plan_id/accounts\"\n },\n listInstallationReposForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/installations/:installation_id/repositories\"\n },\n listInstallations: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/app/installations\"\n },\n listInstallationsForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/installations\"\n },\n listMarketplacePurchasesForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/marketplace_purchases\"\n },\n listMarketplacePurchasesForAuthenticatedUserStubbed: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/marketplace_purchases/stubbed\"\n },\n listPlans: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/plans\"\n },\n listPlansStubbed: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/stubbed/plans\"\n },\n listRepos: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/installation/repositories\"\n },\n removeRepoFromInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"DELETE\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n repository_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/installations/:installation_id/repositories/:repository_id\"\n },\n resetAuthorization: {\n deprecated: \"octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization\",\n method: \"POST\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n resetToken: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"PATCH\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/token\"\n },\n revokeAuthorizationForApplication: {\n deprecated: \"octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n revokeGrantForApplication: {\n deprecated: \"octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/grants/:access_token\"\n },\n revokeInstallationToken: {\n headers: {\n accept: \"application/vnd.github.gambit-preview+json\"\n },\n method: \"DELETE\",\n params: {},\n url: \"/installation/token\"\n }\n },\n checks: {\n create: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"POST\",\n params: {\n actions: {\n type: \"object[]\"\n },\n \"actions[].description\": {\n required: true,\n type: \"string\"\n },\n \"actions[].identifier\": {\n required: true,\n type: \"string\"\n },\n \"actions[].label\": {\n required: true,\n type: \"string\"\n },\n completed_at: {\n type: \"string\"\n },\n conclusion: {\n enum: [\"success\", \"failure\", \"neutral\", \"cancelled\", \"timed_out\", \"action_required\"],\n type: \"string\"\n },\n details_url: {\n type: \"string\"\n },\n external_id: {\n type: \"string\"\n },\n head_sha: {\n required: true,\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n output: {\n type: \"object\"\n },\n \"output.annotations\": {\n type: \"object[]\"\n },\n \"output.annotations[].annotation_level\": {\n enum: [\"notice\", \"warning\", \"failure\"],\n required: true,\n type: \"string\"\n },\n \"output.annotations[].end_column\": {\n type: \"integer\"\n },\n \"output.annotations[].end_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].message\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].path\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].raw_details\": {\n type: \"string\"\n },\n \"output.annotations[].start_column\": {\n type: \"integer\"\n },\n \"output.annotations[].start_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].title\": {\n type: \"string\"\n },\n \"output.images\": {\n type: \"object[]\"\n },\n \"output.images[].alt\": {\n required: true,\n type: \"string\"\n },\n \"output.images[].caption\": {\n type: \"string\"\n },\n \"output.images[].image_url\": {\n required: true,\n type: \"string\"\n },\n \"output.summary\": {\n required: true,\n type: \"string\"\n },\n \"output.text\": {\n type: \"string\"\n },\n \"output.title\": {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n started_at: {\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs\"\n },\n createSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"POST\",\n params: {\n head_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites\"\n },\n get: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_run_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs/:check_run_id\"\n },\n getSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_suite_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/:check_suite_id\"\n },\n listAnnotations: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_run_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs/:check_run_id/annotations\"\n },\n listForRef: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_name: {\n type: \"string\"\n },\n filter: {\n enum: [\"latest\", \"all\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/check-runs\"\n },\n listForSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_name: {\n type: \"string\"\n },\n check_suite_id: {\n required: true,\n type: \"integer\"\n },\n filter: {\n enum: [\"latest\", \"all\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/:check_suite_id/check-runs\"\n },\n listSuitesForRef: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n app_id: {\n type: \"integer\"\n },\n check_name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/check-suites\"\n },\n rerequestSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"POST\",\n params: {\n check_suite_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/:check_suite_id/rerequest\"\n },\n setSuitesPreferences: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"PATCH\",\n params: {\n auto_trigger_checks: {\n type: \"object[]\"\n },\n \"auto_trigger_checks[].app_id\": {\n required: true,\n type: \"integer\"\n },\n \"auto_trigger_checks[].setting\": {\n required: true,\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/preferences\"\n },\n update: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"PATCH\",\n params: {\n actions: {\n type: \"object[]\"\n },\n \"actions[].description\": {\n required: true,\n type: \"string\"\n },\n \"actions[].identifier\": {\n required: true,\n type: \"string\"\n },\n \"actions[].label\": {\n required: true,\n type: \"string\"\n },\n check_run_id: {\n required: true,\n type: \"integer\"\n },\n completed_at: {\n type: \"string\"\n },\n conclusion: {\n enum: [\"success\", \"failure\", \"neutral\", \"cancelled\", \"timed_out\", \"action_required\"],\n type: \"string\"\n },\n details_url: {\n type: \"string\"\n },\n external_id: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n output: {\n type: \"object\"\n },\n \"output.annotations\": {\n type: \"object[]\"\n },\n \"output.annotations[].annotation_level\": {\n enum: [\"notice\", \"warning\", \"failure\"],\n required: true,\n type: \"string\"\n },\n \"output.annotations[].end_column\": {\n type: \"integer\"\n },\n \"output.annotations[].end_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].message\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].path\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].raw_details\": {\n type: \"string\"\n },\n \"output.annotations[].start_column\": {\n type: \"integer\"\n },\n \"output.annotations[].start_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].title\": {\n type: \"string\"\n },\n \"output.images\": {\n type: \"object[]\"\n },\n \"output.images[].alt\": {\n required: true,\n type: \"string\"\n },\n \"output.images[].caption\": {\n type: \"string\"\n },\n \"output.images[].image_url\": {\n required: true,\n type: \"string\"\n },\n \"output.summary\": {\n required: true,\n type: \"string\"\n },\n \"output.text\": {\n type: \"string\"\n },\n \"output.title\": {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n started_at: {\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs/:check_run_id\"\n }\n },\n codesOfConduct: {\n getConductCode: {\n headers: {\n accept: \"application/vnd.github.scarlet-witch-preview+json\"\n },\n method: \"GET\",\n params: {\n key: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/codes_of_conduct/:key\"\n },\n getForRepo: {\n headers: {\n accept: \"application/vnd.github.scarlet-witch-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/community/code_of_conduct\"\n },\n listConductCodes: {\n headers: {\n accept: \"application/vnd.github.scarlet-witch-preview+json\"\n },\n method: \"GET\",\n params: {},\n url: \"/codes_of_conduct\"\n }\n },\n emojis: {\n get: {\n method: \"GET\",\n params: {},\n url: \"/emojis\"\n }\n },\n gists: {\n checkIsStarred: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/star\"\n },\n create: {\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n files: {\n required: true,\n type: \"object\"\n },\n \"files.content\": {\n type: \"string\"\n },\n public: {\n type: \"boolean\"\n }\n },\n url: \"/gists\"\n },\n createComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments\"\n },\n delete: {\n method: \"DELETE\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id\"\n },\n deleteComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments/:comment_id\"\n },\n fork: {\n method: \"POST\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/forks\"\n },\n get: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id\"\n },\n getComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments/:comment_id\"\n },\n getRevision: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/:sha\"\n },\n list: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/gists\"\n },\n listComments: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/gists/:gist_id/comments\"\n },\n listCommits: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/gists/:gist_id/commits\"\n },\n listForks: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/gists/:gist_id/forks\"\n },\n listPublic: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/gists/public\"\n },\n listPublicForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/gists\"\n },\n listStarred: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/gists/starred\"\n },\n star: {\n method: \"PUT\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/star\"\n },\n unstar: {\n method: \"DELETE\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/star\"\n },\n update: {\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n files: {\n type: \"object\"\n },\n \"files.content\": {\n type: \"string\"\n },\n \"files.filename\": {\n type: \"string\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id\"\n },\n updateComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments/:comment_id\"\n }\n },\n git: {\n createBlob: {\n method: \"POST\",\n params: {\n content: {\n required: true,\n type: \"string\"\n },\n encoding: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/blobs\"\n },\n createCommit: {\n method: \"POST\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.date\": {\n type: \"string\"\n },\n \"author.email\": {\n type: \"string\"\n },\n \"author.name\": {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.date\": {\n type: \"string\"\n },\n \"committer.email\": {\n type: \"string\"\n },\n \"committer.name\": {\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n parents: {\n required: true,\n type: \"string[]\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n signature: {\n type: \"string\"\n },\n tree: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/commits\"\n },\n createRef: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs\"\n },\n createTag: {\n method: \"POST\",\n params: {\n message: {\n required: true,\n type: \"string\"\n },\n object: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag: {\n required: true,\n type: \"string\"\n },\n tagger: {\n type: \"object\"\n },\n \"tagger.date\": {\n type: \"string\"\n },\n \"tagger.email\": {\n type: \"string\"\n },\n \"tagger.name\": {\n type: \"string\"\n },\n type: {\n enum: [\"commit\", \"tree\", \"blob\"],\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/tags\"\n },\n createTree: {\n method: \"POST\",\n params: {\n base_tree: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tree: {\n required: true,\n type: \"object[]\"\n },\n \"tree[].content\": {\n type: \"string\"\n },\n \"tree[].mode\": {\n enum: [\"100644\", \"100755\", \"040000\", \"160000\", \"120000\"],\n type: \"string\"\n },\n \"tree[].path\": {\n type: \"string\"\n },\n \"tree[].sha\": {\n allowNull: true,\n type: \"string\"\n },\n \"tree[].type\": {\n enum: [\"blob\", \"tree\", \"commit\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/trees\"\n },\n deleteRef: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs/:ref\"\n },\n getBlob: {\n method: \"GET\",\n params: {\n file_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/blobs/:file_sha\"\n },\n getCommit: {\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/commits/:commit_sha\"\n },\n getRef: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/ref/:ref\"\n },\n getTag: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag_sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/tags/:tag_sha\"\n },\n getTree: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n recursive: {\n enum: [\"1\"],\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tree_sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/trees/:tree_sha\"\n },\n listMatchingRefs: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/matching-refs/:ref\"\n },\n listRefs: {\n method: \"GET\",\n params: {\n namespace: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs/:namespace\"\n },\n updateRef: {\n method: \"PATCH\",\n params: {\n force: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs/:ref\"\n }\n },\n gitignore: {\n getTemplate: {\n method: \"GET\",\n params: {\n name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gitignore/templates/:name\"\n },\n listTemplates: {\n method: \"GET\",\n params: {},\n url: \"/gitignore/templates\"\n }\n },\n interactions: {\n addOrUpdateRestrictionsForOrg: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"PUT\",\n params: {\n limit: {\n enum: [\"existing_users\", \"contributors_only\", \"collaborators_only\"],\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/interaction-limits\"\n },\n addOrUpdateRestrictionsForRepo: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"PUT\",\n params: {\n limit: {\n enum: [\"existing_users\", \"contributors_only\", \"collaborators_only\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/interaction-limits\"\n },\n getRestrictionsForOrg: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/interaction-limits\"\n },\n getRestrictionsForRepo: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/interaction-limits\"\n },\n removeRestrictionsForOrg: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/interaction-limits\"\n },\n removeRestrictionsForRepo: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/interaction-limits\"\n }\n },\n issues: {\n addAssignees: {\n method: \"POST\",\n params: {\n assignees: {\n type: \"string[]\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/assignees\"\n },\n addLabels: {\n method: \"POST\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n labels: {\n required: true,\n type: \"string[]\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n checkAssignee: {\n method: \"GET\",\n params: {\n assignee: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/assignees/:assignee\"\n },\n create: {\n method: \"POST\",\n params: {\n assignee: {\n type: \"string\"\n },\n assignees: {\n type: \"string[]\"\n },\n body: {\n type: \"string\"\n },\n labels: {\n type: \"string[]\"\n },\n milestone: {\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues\"\n },\n createComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/comments\"\n },\n createLabel: {\n method: \"POST\",\n params: {\n color: {\n required: true,\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels\"\n },\n createMilestone: {\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n due_on: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones\"\n },\n deleteComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id\"\n },\n deleteLabel: {\n method: \"DELETE\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels/:name\"\n },\n deleteMilestone: {\n method: \"DELETE\",\n params: {\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number\"\n },\n get: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number\"\n },\n getComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id\"\n },\n getEvent: {\n method: \"GET\",\n params: {\n event_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/events/:event_id\"\n },\n getLabel: {\n method: \"GET\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels/:name\"\n },\n getMilestone: {\n method: \"GET\",\n params: {\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number\"\n },\n list: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n filter: {\n enum: [\"assigned\", \"created\", \"mentioned\", \"subscribed\", \"all\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/issues\"\n },\n listAssignees: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/assignees\"\n },\n listComments: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/comments\"\n },\n listCommentsForRepo: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments\"\n },\n listEvents: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/events\"\n },\n listEventsForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/events\"\n },\n listEventsForTimeline: {\n headers: {\n accept: \"application/vnd.github.mockingbird-preview+json\"\n },\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/timeline\"\n },\n listForAuthenticatedUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n filter: {\n enum: [\"assigned\", \"created\", \"mentioned\", \"subscribed\", \"all\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/user/issues\"\n },\n listForOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n filter: {\n enum: [\"assigned\", \"created\", \"mentioned\", \"subscribed\", \"all\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/issues\"\n },\n listForRepo: {\n method: \"GET\",\n params: {\n assignee: {\n type: \"string\"\n },\n creator: {\n type: \"string\"\n },\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n mentioned: {\n type: \"string\"\n },\n milestone: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues\"\n },\n listLabelsForMilestone: {\n method: \"GET\",\n params: {\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number/labels\"\n },\n listLabelsForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels\"\n },\n listLabelsOnIssue: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n listMilestonesForRepo: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"due_on\", \"completeness\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones\"\n },\n lock: {\n method: \"PUT\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n lock_reason: {\n enum: [\"off-topic\", \"too heated\", \"resolved\", \"spam\"],\n type: \"string\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/lock\"\n },\n removeAssignees: {\n method: \"DELETE\",\n params: {\n assignees: {\n type: \"string[]\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/assignees\"\n },\n removeLabel: {\n method: \"DELETE\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels/:name\"\n },\n removeLabels: {\n method: \"DELETE\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n replaceLabels: {\n method: \"PUT\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n labels: {\n type: \"string[]\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n unlock: {\n method: \"DELETE\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/lock\"\n },\n update: {\n method: \"PATCH\",\n params: {\n assignee: {\n type: \"string\"\n },\n assignees: {\n type: \"string[]\"\n },\n body: {\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n labels: {\n type: \"string[]\"\n },\n milestone: {\n allowNull: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number\"\n },\n updateComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id\"\n },\n updateLabel: {\n method: \"PATCH\",\n params: {\n color: {\n type: \"string\"\n },\n current_name: {\n required: true,\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels/:current_name\"\n },\n updateMilestone: {\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n due_on: {\n type: \"string\"\n },\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number\"\n }\n },\n licenses: {\n get: {\n method: \"GET\",\n params: {\n license: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/licenses/:license\"\n },\n getForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/license\"\n },\n list: {\n deprecated: \"octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)\",\n method: \"GET\",\n params: {},\n url: \"/licenses\"\n },\n listCommonlyUsed: {\n method: \"GET\",\n params: {},\n url: \"/licenses\"\n }\n },\n markdown: {\n render: {\n method: \"POST\",\n params: {\n context: {\n type: \"string\"\n },\n mode: {\n enum: [\"markdown\", \"gfm\"],\n type: \"string\"\n },\n text: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/markdown\"\n },\n renderRaw: {\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\"\n },\n method: \"POST\",\n params: {\n data: {\n mapTo: \"data\",\n required: true,\n type: \"string\"\n }\n },\n url: \"/markdown/raw\"\n }\n },\n meta: {\n get: {\n method: \"GET\",\n params: {},\n url: \"/meta\"\n }\n },\n migrations: {\n cancelImport: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n },\n deleteArchiveForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/migrations/:migration_id/archive\"\n },\n deleteArchiveForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/archive\"\n },\n downloadArchiveForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/archive\"\n },\n getArchiveForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/migrations/:migration_id/archive\"\n },\n getArchiveForOrg: {\n deprecated: \"octokit.migrations.getArchiveForOrg() has been renamed to octokit.migrations.downloadArchiveForOrg() (2020-01-27)\",\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/archive\"\n },\n getCommitAuthors: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/authors\"\n },\n getImportProgress: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n },\n getLargeFiles: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/large_files\"\n },\n getStatusForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/migrations/:migration_id\"\n },\n getStatusForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id\"\n },\n listForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/migrations\"\n },\n listForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/migrations\"\n },\n listReposForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/repositories\"\n },\n listReposForUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/:migration_id/repositories\"\n },\n mapCommitAuthor: {\n method: \"PATCH\",\n params: {\n author_id: {\n required: true,\n type: \"integer\"\n },\n email: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/authors/:author_id\"\n },\n setLfsPreference: {\n method: \"PATCH\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n use_lfs: {\n enum: [\"opt_in\", \"opt_out\"],\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/lfs\"\n },\n startForAuthenticatedUser: {\n method: \"POST\",\n params: {\n exclude_attachments: {\n type: \"boolean\"\n },\n lock_repositories: {\n type: \"boolean\"\n },\n repositories: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/user/migrations\"\n },\n startForOrg: {\n method: \"POST\",\n params: {\n exclude_attachments: {\n type: \"boolean\"\n },\n lock_repositories: {\n type: \"boolean\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n repositories: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/orgs/:org/migrations\"\n },\n startImport: {\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tfvc_project: {\n type: \"string\"\n },\n vcs: {\n enum: [\"subversion\", \"git\", \"mercurial\", \"tfvc\"],\n type: \"string\"\n },\n vcs_password: {\n type: \"string\"\n },\n vcs_url: {\n required: true,\n type: \"string\"\n },\n vcs_username: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n },\n unlockRepoForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n repo_name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/migrations/:migration_id/repos/:repo_name/lock\"\n },\n unlockRepoForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n repo_name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/repos/:repo_name/lock\"\n },\n updateImport: {\n method: \"PATCH\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n vcs_password: {\n type: \"string\"\n },\n vcs_username: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n }\n },\n oauthAuthorizations: {\n checkAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)\",\n method: \"GET\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n createAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization\",\n method: \"POST\",\n params: {\n client_id: {\n type: \"string\"\n },\n client_secret: {\n type: \"string\"\n },\n fingerprint: {\n type: \"string\"\n },\n note: {\n required: true,\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations\"\n },\n deleteAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization\",\n method: \"DELETE\",\n params: {\n authorization_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/authorizations/:authorization_id\"\n },\n deleteGrant: {\n deprecated: \"octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant\",\n method: \"DELETE\",\n params: {\n grant_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/applications/grants/:grant_id\"\n },\n getAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization\",\n method: \"GET\",\n params: {\n authorization_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/authorizations/:authorization_id\"\n },\n getGrant: {\n deprecated: \"octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant\",\n method: \"GET\",\n params: {\n grant_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/applications/grants/:grant_id\"\n },\n getOrCreateAuthorizationForApp: {\n deprecated: \"octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app\",\n method: \"PUT\",\n params: {\n client_id: {\n required: true,\n type: \"string\"\n },\n client_secret: {\n required: true,\n type: \"string\"\n },\n fingerprint: {\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/clients/:client_id\"\n },\n getOrCreateAuthorizationForAppAndFingerprint: {\n deprecated: \"octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint\",\n method: \"PUT\",\n params: {\n client_id: {\n required: true,\n type: \"string\"\n },\n client_secret: {\n required: true,\n type: \"string\"\n },\n fingerprint: {\n required: true,\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/clients/:client_id/:fingerprint\"\n },\n getOrCreateAuthorizationForAppFingerprint: {\n deprecated: \"octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() has been renamed to octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() (2018-12-27)\",\n method: \"PUT\",\n params: {\n client_id: {\n required: true,\n type: \"string\"\n },\n client_secret: {\n required: true,\n type: \"string\"\n },\n fingerprint: {\n required: true,\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/clients/:client_id/:fingerprint\"\n },\n listAuthorizations: {\n deprecated: \"octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/authorizations\"\n },\n listGrants: {\n deprecated: \"octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/applications/grants\"\n },\n resetAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)\",\n method: \"POST\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n revokeAuthorizationForApplication: {\n deprecated: \"octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n revokeGrantForApplication: {\n deprecated: \"octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/grants/:access_token\"\n },\n updateAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization\",\n method: \"PATCH\",\n params: {\n add_scopes: {\n type: \"string[]\"\n },\n authorization_id: {\n required: true,\n type: \"integer\"\n },\n fingerprint: {\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n remove_scopes: {\n type: \"string[]\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/:authorization_id\"\n }\n },\n orgs: {\n addOrUpdateMembership: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n role: {\n enum: [\"admin\", \"member\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/memberships/:username\"\n },\n blockUser: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks/:username\"\n },\n checkBlockedUser: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks/:username\"\n },\n checkMembership: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/members/:username\"\n },\n checkPublicMembership: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/public_members/:username\"\n },\n concealMembership: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/public_members/:username\"\n },\n convertMemberToOutsideCollaborator: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/outside_collaborators/:username\"\n },\n createHook: {\n method: \"POST\",\n params: {\n active: {\n type: \"boolean\"\n },\n config: {\n required: true,\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks\"\n },\n createInvitation: {\n method: \"POST\",\n params: {\n email: {\n type: \"string\"\n },\n invitee_id: {\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n role: {\n enum: [\"admin\", \"direct_member\", \"billing_manager\"],\n type: \"string\"\n },\n team_ids: {\n type: \"integer[]\"\n }\n },\n url: \"/orgs/:org/invitations\"\n },\n deleteHook: {\n method: \"DELETE\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id\"\n },\n get: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org\"\n },\n getHook: {\n method: \"GET\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id\"\n },\n getMembership: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/memberships/:username\"\n },\n getMembershipForAuthenticatedUser: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/memberships/orgs/:org\"\n },\n list: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"integer\"\n }\n },\n url: \"/organizations\"\n },\n listBlockedUsers: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks\"\n },\n listForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/orgs\"\n },\n listForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/orgs\"\n },\n listHooks: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/hooks\"\n },\n listInstallations: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/installations\"\n },\n listInvitationTeams: {\n method: \"GET\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/invitations/:invitation_id/teams\"\n },\n listMembers: {\n method: \"GET\",\n params: {\n filter: {\n enum: [\"2fa_disabled\", \"all\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"all\", \"admin\", \"member\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/members\"\n },\n listMemberships: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n state: {\n enum: [\"active\", \"pending\"],\n type: \"string\"\n }\n },\n url: \"/user/memberships/orgs\"\n },\n listOutsideCollaborators: {\n method: \"GET\",\n params: {\n filter: {\n enum: [\"2fa_disabled\", \"all\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/outside_collaborators\"\n },\n listPendingInvitations: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/invitations\"\n },\n listPublicMembers: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/public_members\"\n },\n pingHook: {\n method: \"POST\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id/pings\"\n },\n publicizeMembership: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/public_members/:username\"\n },\n removeMember: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/members/:username\"\n },\n removeMembership: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/memberships/:username\"\n },\n removeOutsideCollaborator: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/outside_collaborators/:username\"\n },\n unblockUser: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks/:username\"\n },\n update: {\n method: \"PATCH\",\n params: {\n billing_email: {\n type: \"string\"\n },\n company: {\n type: \"string\"\n },\n default_repository_permission: {\n enum: [\"read\", \"write\", \"admin\", \"none\"],\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n email: {\n type: \"string\"\n },\n has_organization_projects: {\n type: \"boolean\"\n },\n has_repository_projects: {\n type: \"boolean\"\n },\n location: {\n type: \"string\"\n },\n members_allowed_repository_creation_type: {\n enum: [\"all\", \"private\", \"none\"],\n type: \"string\"\n },\n members_can_create_internal_repositories: {\n type: \"boolean\"\n },\n members_can_create_private_repositories: {\n type: \"boolean\"\n },\n members_can_create_public_repositories: {\n type: \"boolean\"\n },\n members_can_create_repositories: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org\"\n },\n updateHook: {\n method: \"PATCH\",\n params: {\n active: {\n type: \"boolean\"\n },\n config: {\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id\"\n },\n updateMembership: {\n method: \"PATCH\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"active\"],\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/memberships/orgs/:org\"\n }\n },\n projects: {\n addCollaborator: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/:project_id/collaborators/:username\"\n },\n createCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n },\n content_id: {\n type: \"integer\"\n },\n content_type: {\n type: \"string\"\n },\n note: {\n type: \"string\"\n }\n },\n url: \"/projects/columns/:column_id/cards\"\n },\n createColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id/columns\"\n },\n createForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/projects\"\n },\n createForOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/projects\"\n },\n createForRepo: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/projects\"\n },\n delete: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id\"\n },\n deleteCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n card_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/cards/:card_id\"\n },\n deleteColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/:column_id\"\n },\n get: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id\"\n },\n getCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n card_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/cards/:card_id\"\n },\n getColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/:column_id\"\n },\n listCards: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n archived_state: {\n enum: [\"all\", \"archived\", \"not_archived\"],\n type: \"string\"\n },\n column_id: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/projects/columns/:column_id/cards\"\n },\n listCollaborators: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n affiliation: {\n enum: [\"outside\", \"direct\", \"all\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id/collaborators\"\n },\n listColumns: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id/columns\"\n },\n listForOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/projects\"\n },\n listForRepo: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/projects\"\n },\n listForUser: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/projects\"\n },\n moveCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n card_id: {\n required: true,\n type: \"integer\"\n },\n column_id: {\n type: \"integer\"\n },\n position: {\n required: true,\n type: \"string\",\n validation: \"^(top|bottom|after:\\\\d+)$\"\n }\n },\n url: \"/projects/columns/cards/:card_id/moves\"\n },\n moveColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n },\n position: {\n required: true,\n type: \"string\",\n validation: \"^(first|last|after:\\\\d+)$\"\n }\n },\n url: \"/projects/columns/:column_id/moves\"\n },\n removeCollaborator: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/:project_id/collaborators/:username\"\n },\n reviewUserPermissionLevel: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/:project_id/collaborators/:username/permission\"\n },\n update: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n organization_permission: {\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n }\n },\n url: \"/projects/:project_id\"\n },\n updateCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PATCH\",\n params: {\n archived: {\n type: \"boolean\"\n },\n card_id: {\n required: true,\n type: \"integer\"\n },\n note: {\n type: \"string\"\n }\n },\n url: \"/projects/columns/cards/:card_id\"\n },\n updateColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PATCH\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n },\n name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/columns/:column_id\"\n }\n },\n pulls: {\n checkIfMerged: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/merge\"\n },\n create: {\n method: \"POST\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n body: {\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n maintainer_can_modify: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls\"\n },\n createComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n commit_id: {\n required: true,\n type: \"string\"\n },\n in_reply_to: {\n deprecated: true,\n description: \"The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.\",\n type: \"integer\"\n },\n line: {\n type: \"integer\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n position: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n side: {\n enum: [\"LEFT\", \"RIGHT\"],\n type: \"string\"\n },\n start_line: {\n type: \"integer\"\n },\n start_side: {\n enum: [\"LEFT\", \"RIGHT\", \"side\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments\"\n },\n createCommentReply: {\n deprecated: \"octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n commit_id: {\n required: true,\n type: \"string\"\n },\n in_reply_to: {\n deprecated: true,\n description: \"The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.\",\n type: \"integer\"\n },\n line: {\n type: \"integer\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n position: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n side: {\n enum: [\"LEFT\", \"RIGHT\"],\n type: \"string\"\n },\n start_line: {\n type: \"integer\"\n },\n start_side: {\n enum: [\"LEFT\", \"RIGHT\", \"side\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments\"\n },\n createFromIssue: {\n deprecated: \"octokit.pulls.createFromIssue() is deprecated, see https://developer.github.com/v3/pulls/#create-a-pull-request\",\n method: \"POST\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n issue: {\n required: true,\n type: \"integer\"\n },\n maintainer_can_modify: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls\"\n },\n createReview: {\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n comments: {\n type: \"object[]\"\n },\n \"comments[].body\": {\n required: true,\n type: \"string\"\n },\n \"comments[].path\": {\n required: true,\n type: \"string\"\n },\n \"comments[].position\": {\n required: true,\n type: \"integer\"\n },\n commit_id: {\n type: \"string\"\n },\n event: {\n enum: [\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"],\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews\"\n },\n createReviewCommentReply: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies\"\n },\n createReviewRequest: {\n method: \"POST\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n reviewers: {\n type: \"string[]\"\n },\n team_reviewers: {\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/requested_reviewers\"\n },\n deleteComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id\"\n },\n deletePendingReview: {\n method: \"DELETE\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id\"\n },\n deleteReviewRequest: {\n method: \"DELETE\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n reviewers: {\n type: \"string[]\"\n },\n team_reviewers: {\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/requested_reviewers\"\n },\n dismissReview: {\n method: \"PUT\",\n params: {\n message: {\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals\"\n },\n get: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number\"\n },\n getComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id\"\n },\n getCommentsForReview: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments\"\n },\n getReview: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id\"\n },\n list: {\n method: \"GET\",\n params: {\n base: {\n type: \"string\"\n },\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n head: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"popularity\", \"long-running\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls\"\n },\n listComments: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments\"\n },\n listCommentsForRepo: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments\"\n },\n listCommits: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/commits\"\n },\n listFiles: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/files\"\n },\n listReviewRequests: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/requested_reviewers\"\n },\n listReviews: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews\"\n },\n merge: {\n method: \"PUT\",\n params: {\n commit_message: {\n type: \"string\"\n },\n commit_title: {\n type: \"string\"\n },\n merge_method: {\n enum: [\"merge\", \"squash\", \"rebase\"],\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/merge\"\n },\n submitReview: {\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n event: {\n enum: [\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"],\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events\"\n },\n update: {\n method: \"PATCH\",\n params: {\n base: {\n type: \"string\"\n },\n body: {\n type: \"string\"\n },\n maintainer_can_modify: {\n type: \"boolean\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number\"\n },\n updateBranch: {\n headers: {\n accept: \"application/vnd.github.lydian-preview+json\"\n },\n method: \"PUT\",\n params: {\n expected_head_sha: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/update-branch\"\n },\n updateComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id\"\n },\n updateReview: {\n method: \"PUT\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id\"\n }\n },\n rateLimit: {\n get: {\n method: \"GET\",\n params: {},\n url: \"/rate_limit\"\n }\n },\n reactions: {\n createForCommitComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id/reactions\"\n },\n createForIssue: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/reactions\"\n },\n createForIssueComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id/reactions\"\n },\n createForPullRequestReviewComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id/reactions\"\n },\n createForTeamDiscussion: {\n deprecated: \"octokit.reactions.createForTeamDiscussion() has been renamed to octokit.reactions.createForTeamDiscussionLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n },\n createForTeamDiscussionComment: {\n deprecated: \"octokit.reactions.createForTeamDiscussionComment() has been renamed to octokit.reactions.createForTeamDiscussionCommentLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n createForTeamDiscussionCommentInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n createForTeamDiscussionCommentLegacy: {\n deprecated: \"octokit.reactions.createForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-comment-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n createForTeamDiscussionInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions\"\n },\n createForTeamDiscussionLegacy: {\n deprecated: \"octokit.reactions.createForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n },\n delete: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"DELETE\",\n params: {\n reaction_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/reactions/:reaction_id\"\n },\n listForCommitComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id/reactions\"\n },\n listForIssue: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/reactions\"\n },\n listForIssueComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id/reactions\"\n },\n listForPullRequestReviewComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id/reactions\"\n },\n listForTeamDiscussion: {\n deprecated: \"octokit.reactions.listForTeamDiscussion() has been renamed to octokit.reactions.listForTeamDiscussionLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n },\n listForTeamDiscussionComment: {\n deprecated: \"octokit.reactions.listForTeamDiscussionComment() has been renamed to octokit.reactions.listForTeamDiscussionCommentLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n listForTeamDiscussionCommentInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n listForTeamDiscussionCommentLegacy: {\n deprecated: \"octokit.reactions.listForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-comment-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n listForTeamDiscussionInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions\"\n },\n listForTeamDiscussionLegacy: {\n deprecated: \"octokit.reactions.listForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n }\n },\n repos: {\n acceptInvitation: {\n method: \"PATCH\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/repository_invitations/:invitation_id\"\n },\n addCollaborator: {\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username\"\n },\n addDeployKey: {\n method: \"POST\",\n params: {\n key: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n read_only: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys\"\n },\n addProtectedBranchAdminEnforcement: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/enforce_admins\"\n },\n addProtectedBranchAppRestrictions: {\n method: \"POST\",\n params: {\n apps: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n addProtectedBranchRequiredSignatures: {\n headers: {\n accept: \"application/vnd.github.zzzax-preview+json\"\n },\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_signatures\"\n },\n addProtectedBranchRequiredStatusChecksContexts: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n addProtectedBranchTeamRestrictions: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n teams: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n addProtectedBranchUserRestrictions: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n users: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n checkCollaborator: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username\"\n },\n checkVulnerabilityAlerts: {\n headers: {\n accept: \"application/vnd.github.dorian-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/vulnerability-alerts\"\n },\n compareCommits: {\n method: \"GET\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/compare/:base...:head\"\n },\n createCommitComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n commit_sha: {\n required: true,\n type: \"string\"\n },\n line: {\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n type: \"string\"\n },\n position: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n alias: \"commit_sha\",\n deprecated: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/comments\"\n },\n createDeployment: {\n method: \"POST\",\n params: {\n auto_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n environment: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n payload: {\n type: \"string\"\n },\n production_environment: {\n type: \"boolean\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n required_contexts: {\n type: \"string[]\"\n },\n task: {\n type: \"string\"\n },\n transient_environment: {\n type: \"boolean\"\n }\n },\n url: \"/repos/:owner/:repo/deployments\"\n },\n createDeploymentStatus: {\n method: \"POST\",\n params: {\n auto_inactive: {\n type: \"boolean\"\n },\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n description: {\n type: \"string\"\n },\n environment: {\n enum: [\"production\", \"staging\", \"qa\"],\n type: \"string\"\n },\n environment_url: {\n type: \"string\"\n },\n log_url: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"error\", \"failure\", \"inactive\", \"in_progress\", \"queued\", \"pending\", \"success\"],\n required: true,\n type: \"string\"\n },\n target_url: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id/statuses\"\n },\n createDispatchEvent: {\n method: \"POST\",\n params: {\n client_payload: {\n type: \"object\"\n },\n event_type: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/dispatches\"\n },\n createFile: {\n deprecated: \"octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)\",\n method: \"PUT\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n required: true,\n type: \"string\"\n },\n \"author.name\": {\n required: true,\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n required: true,\n type: \"string\"\n },\n \"committer.name\": {\n required: true,\n type: \"string\"\n },\n content: {\n required: true,\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n createForAuthenticatedUser: {\n method: \"POST\",\n params: {\n allow_merge_commit: {\n type: \"boolean\"\n },\n allow_rebase_merge: {\n type: \"boolean\"\n },\n allow_squash_merge: {\n type: \"boolean\"\n },\n auto_init: {\n type: \"boolean\"\n },\n delete_branch_on_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n gitignore_template: {\n type: \"string\"\n },\n has_issues: {\n type: \"boolean\"\n },\n has_projects: {\n type: \"boolean\"\n },\n has_wiki: {\n type: \"boolean\"\n },\n homepage: {\n type: \"string\"\n },\n is_template: {\n type: \"boolean\"\n },\n license_template: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n type: \"integer\"\n },\n visibility: {\n enum: [\"public\", \"private\", \"visibility\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/user/repos\"\n },\n createFork: {\n method: \"POST\",\n params: {\n organization: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/forks\"\n },\n createHook: {\n method: \"POST\",\n params: {\n active: {\n type: \"boolean\"\n },\n config: {\n required: true,\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks\"\n },\n createInOrg: {\n method: \"POST\",\n params: {\n allow_merge_commit: {\n type: \"boolean\"\n },\n allow_rebase_merge: {\n type: \"boolean\"\n },\n allow_squash_merge: {\n type: \"boolean\"\n },\n auto_init: {\n type: \"boolean\"\n },\n delete_branch_on_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n gitignore_template: {\n type: \"string\"\n },\n has_issues: {\n type: \"boolean\"\n },\n has_projects: {\n type: \"boolean\"\n },\n has_wiki: {\n type: \"boolean\"\n },\n homepage: {\n type: \"string\"\n },\n is_template: {\n type: \"boolean\"\n },\n license_template: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n type: \"integer\"\n },\n visibility: {\n enum: [\"public\", \"private\", \"visibility\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/repos\"\n },\n createOrUpdateFile: {\n method: \"PUT\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n required: true,\n type: \"string\"\n },\n \"author.name\": {\n required: true,\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n required: true,\n type: \"string\"\n },\n \"committer.name\": {\n required: true,\n type: \"string\"\n },\n content: {\n required: true,\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n createRelease: {\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n prerelease: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag_name: {\n required: true,\n type: \"string\"\n },\n target_commitish: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases\"\n },\n createStatus: {\n method: \"POST\",\n params: {\n context: {\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"error\", \"failure\", \"pending\", \"success\"],\n required: true,\n type: \"string\"\n },\n target_url: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/statuses/:sha\"\n },\n createUsingTemplate: {\n headers: {\n accept: \"application/vnd.github.baptiste-preview+json\"\n },\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n template_owner: {\n required: true,\n type: \"string\"\n },\n template_repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:template_owner/:template_repo/generate\"\n },\n declineInvitation: {\n method: \"DELETE\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/repository_invitations/:invitation_id\"\n },\n delete: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo\"\n },\n deleteCommitComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id\"\n },\n deleteDownload: {\n method: \"DELETE\",\n params: {\n download_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/downloads/:download_id\"\n },\n deleteFile: {\n method: \"DELETE\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n type: \"string\"\n },\n \"author.name\": {\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n type: \"string\"\n },\n \"committer.name\": {\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n deleteHook: {\n method: \"DELETE\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id\"\n },\n deleteInvitation: {\n method: \"DELETE\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/invitations/:invitation_id\"\n },\n deleteRelease: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id\"\n },\n deleteReleaseAsset: {\n method: \"DELETE\",\n params: {\n asset_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/assets/:asset_id\"\n },\n disableAutomatedSecurityFixes: {\n headers: {\n accept: \"application/vnd.github.london-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/automated-security-fixes\"\n },\n disablePagesSite: {\n headers: {\n accept: \"application/vnd.github.switcheroo-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n disableVulnerabilityAlerts: {\n headers: {\n accept: \"application/vnd.github.dorian-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/vulnerability-alerts\"\n },\n enableAutomatedSecurityFixes: {\n headers: {\n accept: \"application/vnd.github.london-preview+json\"\n },\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/automated-security-fixes\"\n },\n enablePagesSite: {\n headers: {\n accept: \"application/vnd.github.switcheroo-preview+json\"\n },\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n source: {\n type: \"object\"\n },\n \"source.branch\": {\n enum: [\"master\", \"gh-pages\"],\n type: \"string\"\n },\n \"source.path\": {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n enableVulnerabilityAlerts: {\n headers: {\n accept: \"application/vnd.github.dorian-preview+json\"\n },\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/vulnerability-alerts\"\n },\n get: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo\"\n },\n getAppsWithAccessToProtectedBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n getArchiveLink: {\n method: \"GET\",\n params: {\n archive_format: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/:archive_format/:ref\"\n },\n getBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch\"\n },\n getBranchProtection: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection\"\n },\n getClones: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n per: {\n enum: [\"day\", \"week\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/clones\"\n },\n getCodeFrequencyStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/code_frequency\"\n },\n getCollaboratorPermissionLevel: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username/permission\"\n },\n getCombinedStatusForRef: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/status\"\n },\n getCommit: {\n method: \"GET\",\n params: {\n commit_sha: {\n alias: \"ref\",\n deprecated: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n alias: \"ref\",\n deprecated: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref\"\n },\n getCommitActivityStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/commit_activity\"\n },\n getCommitComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id\"\n },\n getCommitRefSha: {\n deprecated: \"octokit.repos.getCommitRefSha() is deprecated, see https://developer.github.com/v3/repos/commits/#get-a-single-commit\",\n headers: {\n accept: \"application/vnd.github.v3.sha\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref\"\n },\n getContents: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n ref: {\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n getContributorsStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/contributors\"\n },\n getDeployKey: {\n method: \"GET\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys/:key_id\"\n },\n getDeployment: {\n method: \"GET\",\n params: {\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id\"\n },\n getDeploymentStatus: {\n method: \"GET\",\n params: {\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id\"\n },\n getDownload: {\n method: \"GET\",\n params: {\n download_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/downloads/:download_id\"\n },\n getHook: {\n method: \"GET\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id\"\n },\n getLatestPagesBuild: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds/latest\"\n },\n getLatestRelease: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/latest\"\n },\n getPages: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n getPagesBuild: {\n method: \"GET\",\n params: {\n build_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds/:build_id\"\n },\n getParticipationStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/participation\"\n },\n getProtectedBranchAdminEnforcement: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/enforce_admins\"\n },\n getProtectedBranchPullRequestReviewEnforcement: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews\"\n },\n getProtectedBranchRequiredSignatures: {\n headers: {\n accept: \"application/vnd.github.zzzax-preview+json\"\n },\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_signatures\"\n },\n getProtectedBranchRequiredStatusChecks: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks\"\n },\n getProtectedBranchRestrictions: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions\"\n },\n getPunchCardStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/punch_card\"\n },\n getReadme: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/readme\"\n },\n getRelease: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id\"\n },\n getReleaseAsset: {\n method: \"GET\",\n params: {\n asset_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/assets/:asset_id\"\n },\n getReleaseByTag: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/tags/:tag\"\n },\n getTeamsWithAccessToProtectedBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n getTopPaths: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/popular/paths\"\n },\n getTopReferrers: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/popular/referrers\"\n },\n getUsersWithAccessToProtectedBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n getViews: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n per: {\n enum: [\"day\", \"week\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/views\"\n },\n list: {\n method: \"GET\",\n params: {\n affiliation: {\n type: \"string\"\n },\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"pushed\", \"full_name\"],\n type: \"string\"\n },\n type: {\n enum: [\"all\", \"owner\", \"public\", \"private\", \"member\"],\n type: \"string\"\n },\n visibility: {\n enum: [\"all\", \"public\", \"private\"],\n type: \"string\"\n }\n },\n url: \"/user/repos\"\n },\n listAppsWithAccessToProtectedBranch: {\n deprecated: \"octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n listAssetsForRelease: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id/assets\"\n },\n listBranches: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n protected: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches\"\n },\n listBranchesForHeadCommit: {\n headers: {\n accept: \"application/vnd.github.groot-preview+json\"\n },\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/branches-where-head\"\n },\n listCollaborators: {\n method: \"GET\",\n params: {\n affiliation: {\n enum: [\"outside\", \"direct\", \"all\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators\"\n },\n listCommentsForCommit: {\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n alias: \"commit_sha\",\n deprecated: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/comments\"\n },\n listCommitComments: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments\"\n },\n listCommits: {\n method: \"GET\",\n params: {\n author: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n path: {\n type: \"string\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n until: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits\"\n },\n listContributors: {\n method: \"GET\",\n params: {\n anon: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contributors\"\n },\n listDeployKeys: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys\"\n },\n listDeploymentStatuses: {\n method: \"GET\",\n params: {\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id/statuses\"\n },\n listDeployments: {\n method: \"GET\",\n params: {\n environment: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n },\n task: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments\"\n },\n listDownloads: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/downloads\"\n },\n listForOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"pushed\", \"full_name\"],\n type: \"string\"\n },\n type: {\n enum: [\"all\", \"public\", \"private\", \"forks\", \"sources\", \"member\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/repos\"\n },\n listForUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"pushed\", \"full_name\"],\n type: \"string\"\n },\n type: {\n enum: [\"all\", \"owner\", \"member\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/repos\"\n },\n listForks: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"newest\", \"oldest\", \"stargazers\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/forks\"\n },\n listHooks: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks\"\n },\n listInvitations: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/invitations\"\n },\n listInvitationsForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/repository_invitations\"\n },\n listLanguages: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/languages\"\n },\n listPagesBuilds: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds\"\n },\n listProtectedBranchRequiredStatusChecksContexts: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n listProtectedBranchTeamRestrictions: {\n deprecated: \"octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n listProtectedBranchUserRestrictions: {\n deprecated: \"octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n listPublic: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"integer\"\n }\n },\n url: \"/repositories\"\n },\n listPullRequestsAssociatedWithCommit: {\n headers: {\n accept: \"application/vnd.github.groot-preview+json\"\n },\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/pulls\"\n },\n listReleases: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases\"\n },\n listStatusesForRef: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/statuses\"\n },\n listTags: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/tags\"\n },\n listTeams: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/teams\"\n },\n listTeamsWithAccessToProtectedBranch: {\n deprecated: \"octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n listTopics: {\n headers: {\n accept: \"application/vnd.github.mercy-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/topics\"\n },\n listUsersWithAccessToProtectedBranch: {\n deprecated: \"octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n merge: {\n method: \"POST\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n commit_message: {\n type: \"string\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/merges\"\n },\n pingHook: {\n method: \"POST\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id/pings\"\n },\n removeBranchProtection: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection\"\n },\n removeCollaborator: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username\"\n },\n removeDeployKey: {\n method: \"DELETE\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys/:key_id\"\n },\n removeProtectedBranchAdminEnforcement: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/enforce_admins\"\n },\n removeProtectedBranchAppRestrictions: {\n method: \"DELETE\",\n params: {\n apps: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n removeProtectedBranchPullRequestReviewEnforcement: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews\"\n },\n removeProtectedBranchRequiredSignatures: {\n headers: {\n accept: \"application/vnd.github.zzzax-preview+json\"\n },\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_signatures\"\n },\n removeProtectedBranchRequiredStatusChecks: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks\"\n },\n removeProtectedBranchRequiredStatusChecksContexts: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n removeProtectedBranchRestrictions: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions\"\n },\n removeProtectedBranchTeamRestrictions: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n teams: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n removeProtectedBranchUserRestrictions: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n users: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n replaceProtectedBranchAppRestrictions: {\n method: \"PUT\",\n params: {\n apps: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n replaceProtectedBranchRequiredStatusChecksContexts: {\n method: \"PUT\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n replaceProtectedBranchTeamRestrictions: {\n method: \"PUT\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n teams: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n replaceProtectedBranchUserRestrictions: {\n method: \"PUT\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n users: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n replaceTopics: {\n headers: {\n accept: \"application/vnd.github.mercy-preview+json\"\n },\n method: \"PUT\",\n params: {\n names: {\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/topics\"\n },\n requestPageBuild: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds\"\n },\n retrieveCommunityProfileMetrics: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/community/profile\"\n },\n testPushHook: {\n method: \"POST\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id/tests\"\n },\n transfer: {\n method: \"POST\",\n params: {\n new_owner: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_ids: {\n type: \"integer[]\"\n }\n },\n url: \"/repos/:owner/:repo/transfer\"\n },\n update: {\n method: \"PATCH\",\n params: {\n allow_merge_commit: {\n type: \"boolean\"\n },\n allow_rebase_merge: {\n type: \"boolean\"\n },\n allow_squash_merge: {\n type: \"boolean\"\n },\n archived: {\n type: \"boolean\"\n },\n default_branch: {\n type: \"string\"\n },\n delete_branch_on_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n has_issues: {\n type: \"boolean\"\n },\n has_projects: {\n type: \"boolean\"\n },\n has_wiki: {\n type: \"boolean\"\n },\n homepage: {\n type: \"string\"\n },\n is_template: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n visibility: {\n enum: [\"public\", \"private\", \"visibility\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo\"\n },\n updateBranchProtection: {\n method: \"PUT\",\n params: {\n allow_deletions: {\n type: \"boolean\"\n },\n allow_force_pushes: {\n allowNull: true,\n type: \"boolean\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n enforce_admins: {\n allowNull: true,\n required: true,\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n required_linear_history: {\n type: \"boolean\"\n },\n required_pull_request_reviews: {\n allowNull: true,\n required: true,\n type: \"object\"\n },\n \"required_pull_request_reviews.dismiss_stale_reviews\": {\n type: \"boolean\"\n },\n \"required_pull_request_reviews.dismissal_restrictions\": {\n type: \"object\"\n },\n \"required_pull_request_reviews.dismissal_restrictions.teams\": {\n type: \"string[]\"\n },\n \"required_pull_request_reviews.dismissal_restrictions.users\": {\n type: \"string[]\"\n },\n \"required_pull_request_reviews.require_code_owner_reviews\": {\n type: \"boolean\"\n },\n \"required_pull_request_reviews.required_approving_review_count\": {\n type: \"integer\"\n },\n required_status_checks: {\n allowNull: true,\n required: true,\n type: \"object\"\n },\n \"required_status_checks.contexts\": {\n required: true,\n type: \"string[]\"\n },\n \"required_status_checks.strict\": {\n required: true,\n type: \"boolean\"\n },\n restrictions: {\n allowNull: true,\n required: true,\n type: \"object\"\n },\n \"restrictions.apps\": {\n type: \"string[]\"\n },\n \"restrictions.teams\": {\n required: true,\n type: \"string[]\"\n },\n \"restrictions.users\": {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection\"\n },\n updateCommitComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id\"\n },\n updateFile: {\n deprecated: \"octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)\",\n method: \"PUT\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n required: true,\n type: \"string\"\n },\n \"author.name\": {\n required: true,\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n required: true,\n type: \"string\"\n },\n \"committer.name\": {\n required: true,\n type: \"string\"\n },\n content: {\n required: true,\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n updateHook: {\n method: \"PATCH\",\n params: {\n active: {\n type: \"boolean\"\n },\n add_events: {\n type: \"string[]\"\n },\n config: {\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n remove_events: {\n type: \"string[]\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id\"\n },\n updateInformationAboutPagesSite: {\n method: \"PUT\",\n params: {\n cname: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n source: {\n enum: ['\"gh-pages\"', '\"master\"', '\"master /docs\"'],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n updateInvitation: {\n method: \"PATCH\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n permissions: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/invitations/:invitation_id\"\n },\n updateProtectedBranchPullRequestReviewEnforcement: {\n method: \"PATCH\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n dismiss_stale_reviews: {\n type: \"boolean\"\n },\n dismissal_restrictions: {\n type: \"object\"\n },\n \"dismissal_restrictions.teams\": {\n type: \"string[]\"\n },\n \"dismissal_restrictions.users\": {\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n require_code_owner_reviews: {\n type: \"boolean\"\n },\n required_approving_review_count: {\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews\"\n },\n updateProtectedBranchRequiredStatusChecks: {\n method: \"PATCH\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n strict: {\n type: \"boolean\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks\"\n },\n updateRelease: {\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n prerelease: {\n type: \"boolean\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag_name: {\n type: \"string\"\n },\n target_commitish: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id\"\n },\n updateReleaseAsset: {\n method: \"PATCH\",\n params: {\n asset_id: {\n required: true,\n type: \"integer\"\n },\n label: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/assets/:asset_id\"\n },\n uploadReleaseAsset: {\n method: \"POST\",\n params: {\n data: {\n mapTo: \"data\",\n required: true,\n type: \"string | object\"\n },\n file: {\n alias: \"data\",\n deprecated: true,\n type: \"string | object\"\n },\n headers: {\n required: true,\n type: \"object\"\n },\n \"headers.content-length\": {\n required: true,\n type: \"integer\"\n },\n \"headers.content-type\": {\n required: true,\n type: \"string\"\n },\n label: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n url: {\n required: true,\n type: \"string\"\n }\n },\n url: \":url\"\n }\n },\n search: {\n code: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"indexed\"],\n type: \"string\"\n }\n },\n url: \"/search/code\"\n },\n commits: {\n headers: {\n accept: \"application/vnd.github.cloak-preview+json\"\n },\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"author-date\", \"committer-date\"],\n type: \"string\"\n }\n },\n url: \"/search/commits\"\n },\n issues: {\n deprecated: \"octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)\",\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"comments\", \"reactions\", \"reactions-+1\", \"reactions--1\", \"reactions-smile\", \"reactions-thinking_face\", \"reactions-heart\", \"reactions-tada\", \"interactions\", \"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/issues\"\n },\n issuesAndPullRequests: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"comments\", \"reactions\", \"reactions-+1\", \"reactions--1\", \"reactions-smile\", \"reactions-thinking_face\", \"reactions-heart\", \"reactions-tada\", \"interactions\", \"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/issues\"\n },\n labels: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n repository_id: {\n required: true,\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/labels\"\n },\n repos: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"stars\", \"forks\", \"help-wanted-issues\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/repositories\"\n },\n topics: {\n method: \"GET\",\n params: {\n q: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/search/topics\"\n },\n users: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"followers\", \"repositories\", \"joined\"],\n type: \"string\"\n }\n },\n url: \"/search/users\"\n }\n },\n teams: {\n addMember: {\n deprecated: \"octokit.teams.addMember() has been renamed to octokit.teams.addMemberLegacy() (2020-01-16)\",\n method: \"PUT\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n addMemberLegacy: {\n deprecated: \"octokit.teams.addMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member-legacy\",\n method: \"PUT\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n addOrUpdateMembership: {\n deprecated: \"octokit.teams.addOrUpdateMembership() has been renamed to octokit.teams.addOrUpdateMembershipLegacy() (2020-01-16)\",\n method: \"PUT\",\n params: {\n role: {\n enum: [\"member\", \"maintainer\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n addOrUpdateMembershipInOrg: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n role: {\n enum: [\"member\", \"maintainer\"],\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/memberships/:username\"\n },\n addOrUpdateMembershipLegacy: {\n deprecated: \"octokit.teams.addOrUpdateMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-or-update-team-membership-legacy\",\n method: \"PUT\",\n params: {\n role: {\n enum: [\"member\", \"maintainer\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n addOrUpdateProject: {\n deprecated: \"octokit.teams.addOrUpdateProject() has been renamed to octokit.teams.addOrUpdateProjectLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n addOrUpdateProjectInOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects/:project_id\"\n },\n addOrUpdateProjectLegacy: {\n deprecated: \"octokit.teams.addOrUpdateProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-project-legacy\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n addOrUpdateRepo: {\n deprecated: \"octokit.teams.addOrUpdateRepo() has been renamed to octokit.teams.addOrUpdateRepoLegacy() (2020-01-16)\",\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n addOrUpdateRepoInOrg: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos/:owner/:repo\"\n },\n addOrUpdateRepoLegacy: {\n deprecated: \"octokit.teams.addOrUpdateRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-repository-legacy\",\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n checkManagesRepo: {\n deprecated: \"octokit.teams.checkManagesRepo() has been renamed to octokit.teams.checkManagesRepoLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n checkManagesRepoInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos/:owner/:repo\"\n },\n checkManagesRepoLegacy: {\n deprecated: \"octokit.teams.checkManagesRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository-legacy\",\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n create: {\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n maintainers: {\n type: \"string[]\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n repo_names: {\n type: \"string[]\"\n }\n },\n url: \"/orgs/:org/teams\"\n },\n createDiscussion: {\n deprecated: \"octokit.teams.createDiscussion() has been renamed to octokit.teams.createDiscussionLegacy() (2020-01-16)\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n createDiscussionComment: {\n deprecated: \"octokit.teams.createDiscussionComment() has been renamed to octokit.teams.createDiscussionCommentLegacy() (2020-01-16)\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n createDiscussionCommentInOrg: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments\"\n },\n createDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.createDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#create-a-comment-legacy\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n createDiscussionInOrg: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions\"\n },\n createDiscussionLegacy: {\n deprecated: \"octokit.teams.createDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#create-a-discussion-legacy\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n delete: {\n deprecated: \"octokit.teams.delete() has been renamed to octokit.teams.deleteLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n deleteDiscussion: {\n deprecated: \"octokit.teams.deleteDiscussion() has been renamed to octokit.teams.deleteDiscussionLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n deleteDiscussionComment: {\n deprecated: \"octokit.teams.deleteDiscussionComment() has been renamed to octokit.teams.deleteDiscussionCommentLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n deleteDiscussionCommentInOrg: {\n method: \"DELETE\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number\"\n },\n deleteDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.deleteDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment-legacy\",\n method: \"DELETE\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n deleteDiscussionInOrg: {\n method: \"DELETE\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number\"\n },\n deleteDiscussionLegacy: {\n deprecated: \"octokit.teams.deleteDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#delete-a-discussion-legacy\",\n method: \"DELETE\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n deleteInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug\"\n },\n deleteLegacy: {\n deprecated: \"octokit.teams.deleteLegacy() is deprecated, see https://developer.github.com/v3/teams/#delete-team-legacy\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n get: {\n deprecated: \"octokit.teams.get() has been renamed to octokit.teams.getLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n getByName: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug\"\n },\n getDiscussion: {\n deprecated: \"octokit.teams.getDiscussion() has been renamed to octokit.teams.getDiscussionLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n getDiscussionComment: {\n deprecated: \"octokit.teams.getDiscussionComment() has been renamed to octokit.teams.getDiscussionCommentLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n getDiscussionCommentInOrg: {\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number\"\n },\n getDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.getDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment-legacy\",\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n getDiscussionInOrg: {\n method: \"GET\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number\"\n },\n getDiscussionLegacy: {\n deprecated: \"octokit.teams.getDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#get-a-single-discussion-legacy\",\n method: \"GET\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n getLegacy: {\n deprecated: \"octokit.teams.getLegacy() is deprecated, see https://developer.github.com/v3/teams/#get-team-legacy\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n getMember: {\n deprecated: \"octokit.teams.getMember() has been renamed to octokit.teams.getMemberLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n getMemberLegacy: {\n deprecated: \"octokit.teams.getMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member-legacy\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n getMembership: {\n deprecated: \"octokit.teams.getMembership() has been renamed to octokit.teams.getMembershipLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n getMembershipInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/memberships/:username\"\n },\n getMembershipLegacy: {\n deprecated: \"octokit.teams.getMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-membership-legacy\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n list: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/teams\"\n },\n listChild: {\n deprecated: \"octokit.teams.listChild() has been renamed to octokit.teams.listChildLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/teams\"\n },\n listChildInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/teams\"\n },\n listChildLegacy: {\n deprecated: \"octokit.teams.listChildLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-child-teams-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/teams\"\n },\n listDiscussionComments: {\n deprecated: \"octokit.teams.listDiscussionComments() has been renamed to octokit.teams.listDiscussionCommentsLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n listDiscussionCommentsInOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments\"\n },\n listDiscussionCommentsLegacy: {\n deprecated: \"octokit.teams.listDiscussionCommentsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#list-comments-legacy\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n listDiscussions: {\n deprecated: \"octokit.teams.listDiscussions() has been renamed to octokit.teams.listDiscussionsLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n listDiscussionsInOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions\"\n },\n listDiscussionsLegacy: {\n deprecated: \"octokit.teams.listDiscussionsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#list-discussions-legacy\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n listForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/teams\"\n },\n listMembers: {\n deprecated: \"octokit.teams.listMembers() has been renamed to octokit.teams.listMembersLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"member\", \"maintainer\", \"all\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/members\"\n },\n listMembersInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"member\", \"maintainer\", \"all\"],\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/members\"\n },\n listMembersLegacy: {\n deprecated: \"octokit.teams.listMembersLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-team-members-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"member\", \"maintainer\", \"all\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/members\"\n },\n listPendingInvitations: {\n deprecated: \"octokit.teams.listPendingInvitations() has been renamed to octokit.teams.listPendingInvitationsLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/invitations\"\n },\n listPendingInvitationsInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/invitations\"\n },\n listPendingInvitationsLegacy: {\n deprecated: \"octokit.teams.listPendingInvitationsLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-pending-team-invitations-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/invitations\"\n },\n listProjects: {\n deprecated: \"octokit.teams.listProjects() has been renamed to octokit.teams.listProjectsLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects\"\n },\n listProjectsInOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects\"\n },\n listProjectsLegacy: {\n deprecated: \"octokit.teams.listProjectsLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-projects-legacy\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects\"\n },\n listRepos: {\n deprecated: \"octokit.teams.listRepos() has been renamed to octokit.teams.listReposLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos\"\n },\n listReposInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos\"\n },\n listReposLegacy: {\n deprecated: \"octokit.teams.listReposLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-repos-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos\"\n },\n removeMember: {\n deprecated: \"octokit.teams.removeMember() has been renamed to octokit.teams.removeMemberLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n removeMemberLegacy: {\n deprecated: \"octokit.teams.removeMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member-legacy\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n removeMembership: {\n deprecated: \"octokit.teams.removeMembership() has been renamed to octokit.teams.removeMembershipLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n removeMembershipInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/memberships/:username\"\n },\n removeMembershipLegacy: {\n deprecated: \"octokit.teams.removeMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-membership-legacy\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n removeProject: {\n deprecated: \"octokit.teams.removeProject() has been renamed to octokit.teams.removeProjectLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n removeProjectInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects/:project_id\"\n },\n removeProjectLegacy: {\n deprecated: \"octokit.teams.removeProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-project-legacy\",\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n removeRepo: {\n deprecated: \"octokit.teams.removeRepo() has been renamed to octokit.teams.removeRepoLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n removeRepoInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos/:owner/:repo\"\n },\n removeRepoLegacy: {\n deprecated: \"octokit.teams.removeRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-repository-legacy\",\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n reviewProject: {\n deprecated: \"octokit.teams.reviewProject() has been renamed to octokit.teams.reviewProjectLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n reviewProjectInOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects/:project_id\"\n },\n reviewProjectLegacy: {\n deprecated: \"octokit.teams.reviewProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#review-a-team-project-legacy\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n update: {\n deprecated: \"octokit.teams.update() has been renamed to octokit.teams.updateLegacy() (2020-01-16)\",\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n updateDiscussion: {\n deprecated: \"octokit.teams.updateDiscussion() has been renamed to octokit.teams.updateDiscussionLegacy() (2020-01-16)\",\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n updateDiscussionComment: {\n deprecated: \"octokit.teams.updateDiscussionComment() has been renamed to octokit.teams.updateDiscussionCommentLegacy() (2020-01-16)\",\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n updateDiscussionCommentInOrg: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number\"\n },\n updateDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.updateDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment-legacy\",\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n updateDiscussionInOrg: {\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number\"\n },\n updateDiscussionLegacy: {\n deprecated: \"octokit.teams.updateDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#edit-a-discussion-legacy\",\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n updateInOrg: {\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug\"\n },\n updateLegacy: {\n deprecated: \"octokit.teams.updateLegacy() is deprecated, see https://developer.github.com/v3/teams/#edit-team-legacy\",\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n }\n },\n users: {\n addEmails: {\n method: \"POST\",\n params: {\n emails: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/user/emails\"\n },\n block: {\n method: \"PUT\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/blocks/:username\"\n },\n checkBlocked: {\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/blocks/:username\"\n },\n checkFollowing: {\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/following/:username\"\n },\n checkFollowingForUser: {\n method: \"GET\",\n params: {\n target_user: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/following/:target_user\"\n },\n createGpgKey: {\n method: \"POST\",\n params: {\n armored_public_key: {\n type: \"string\"\n }\n },\n url: \"/user/gpg_keys\"\n },\n createPublicKey: {\n method: \"POST\",\n params: {\n key: {\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/user/keys\"\n },\n deleteEmails: {\n method: \"DELETE\",\n params: {\n emails: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/user/emails\"\n },\n deleteGpgKey: {\n method: \"DELETE\",\n params: {\n gpg_key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/gpg_keys/:gpg_key_id\"\n },\n deletePublicKey: {\n method: \"DELETE\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/keys/:key_id\"\n },\n follow: {\n method: \"PUT\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/following/:username\"\n },\n getAuthenticated: {\n method: \"GET\",\n params: {},\n url: \"/user\"\n },\n getByUsername: {\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username\"\n },\n getContextForUser: {\n method: \"GET\",\n params: {\n subject_id: {\n type: \"string\"\n },\n subject_type: {\n enum: [\"organization\", \"repository\", \"issue\", \"pull_request\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/hovercard\"\n },\n getGpgKey: {\n method: \"GET\",\n params: {\n gpg_key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/gpg_keys/:gpg_key_id\"\n },\n getPublicKey: {\n method: \"GET\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/keys/:key_id\"\n },\n list: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/users\"\n },\n listBlocked: {\n method: \"GET\",\n params: {},\n url: \"/user/blocks\"\n },\n listEmails: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/emails\"\n },\n listFollowersForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/followers\"\n },\n listFollowersForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/followers\"\n },\n listFollowingForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/following\"\n },\n listFollowingForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/following\"\n },\n listGpgKeys: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/gpg_keys\"\n },\n listGpgKeysForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/gpg_keys\"\n },\n listPublicEmails: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/public_emails\"\n },\n listPublicKeys: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/keys\"\n },\n listPublicKeysForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/keys\"\n },\n togglePrimaryEmailVisibility: {\n method: \"PATCH\",\n params: {\n email: {\n required: true,\n type: \"string\"\n },\n visibility: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/email/visibility\"\n },\n unblock: {\n method: \"DELETE\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/blocks/:username\"\n },\n unfollow: {\n method: \"DELETE\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/following/:username\"\n },\n updateAuthenticated: {\n method: \"PATCH\",\n params: {\n bio: {\n type: \"string\"\n },\n blog: {\n type: \"string\"\n },\n company: {\n type: \"string\"\n },\n email: {\n type: \"string\"\n },\n hireable: {\n type: \"boolean\"\n },\n location: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n }\n },\n url: \"/user\"\n }\n }\n};\n\nconst VERSION = \"2.4.0\";\n\nfunction registerEndpoints(octokit, routes) {\n Object.keys(routes).forEach(namespaceName => {\n if (!octokit[namespaceName]) {\n octokit[namespaceName] = {};\n }\n\n Object.keys(routes[namespaceName]).forEach(apiName => {\n const apiOptions = routes[namespaceName][apiName];\n const endpointDefaults = [\"method\", \"url\", \"headers\"].reduce((map, key) => {\n if (typeof apiOptions[key] !== \"undefined\") {\n map[key] = apiOptions[key];\n }\n\n return map;\n }, {});\n endpointDefaults.request = {\n validate: apiOptions.params\n };\n let request = octokit.request.defaults(endpointDefaults); // patch request & endpoint methods to support deprecated parameters.\n // Not the most elegant solution, but we don’t want to move deprecation\n // logic into octokit/endpoint.js as it’s out of scope\n\n const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(key => apiOptions.params[key].deprecated);\n\n if (hasDeprecatedParam) {\n const patch = patchForDeprecation.bind(null, octokit, apiOptions);\n request = patch(octokit.request.defaults(endpointDefaults), `.${namespaceName}.${apiName}()`);\n request.endpoint = patch(request.endpoint, `.${namespaceName}.${apiName}.endpoint()`);\n request.endpoint.merge = patch(request.endpoint.merge, `.${namespaceName}.${apiName}.endpoint.merge()`);\n }\n\n if (apiOptions.deprecated) {\n octokit[namespaceName][apiName] = Object.assign(function deprecatedEndpointMethod() {\n octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`));\n octokit[namespaceName][apiName] = request;\n return request.apply(null, arguments);\n }, request);\n return;\n }\n\n octokit[namespaceName][apiName] = request;\n });\n });\n}\n\nfunction patchForDeprecation(octokit, apiOptions, method, methodName) {\n const patchedMethod = options => {\n options = Object.assign({}, options);\n Object.keys(options).forEach(key => {\n if (apiOptions.params[key] && apiOptions.params[key].deprecated) {\n const aliasKey = apiOptions.params[key].alias;\n octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] \"${key}\" parameter is deprecated for \"${methodName}\". Use \"${aliasKey}\" instead`));\n\n if (!(aliasKey in options)) {\n options[aliasKey] = options[key];\n }\n\n delete options[key];\n }\n });\n return method(options);\n };\n\n Object.keys(method).forEach(key => {\n patchedMethod[key] = method[key];\n });\n return patchedMethod;\n}\n\n/**\n * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary\n * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is\n * done, we will remove the registerEndpoints methods and return the methods\n * directly as with the other plugins. At that point we will also remove the\n * legacy workarounds and deprecations.\n *\n * See the plan at\n * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1\n */\n\nfunction restEndpointMethods(octokit) {\n // @ts-ignore\n octokit.registerEndpoints = registerEndpoints.bind(null, octokit);\n registerEndpoints(octokit, endpointsByScope); // Aliasing scopes for backward compatibility\n // See https://github.com/octokit/rest.js/pull/1134\n\n [[\"gitdata\", \"git\"], [\"authorization\", \"oauthAuthorizations\"], [\"pullRequests\", \"pulls\"]].forEach(([deprecatedScope, scope]) => {\n Object.defineProperty(octokit, deprecatedScope, {\n get() {\n octokit.log.warn( // @ts-ignore\n new deprecation.Deprecation(`[@octokit/plugin-rest-endpoint-methods] \"octokit.${deprecatedScope}.*\" methods are deprecated, use \"octokit.${scope}.*\" instead`)); // @ts-ignore\n\n return octokit[scope];\n }\n\n });\n });\n return {};\n}\nrestEndpointMethods.VERSION = VERSION;\n\nexports.restEndpointMethods = restEndpointMethods;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar deprecation = require('deprecation');\nvar once = _interopDefault(require('once'));\n\nconst logOnceCode = once(deprecation => console.warn(deprecation));\nconst logOnceHeaders = once(deprecation => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\n\nclass RequestError extends Error {\n constructor(message, statusCode, options) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.status = statusCode;\n let headers;\n\n if (\"headers\" in options && typeof options.headers !== \"undefined\") {\n headers = options.headers;\n }\n\n if (\"response\" in options) {\n this.response = options.response;\n headers = options.response.headers;\n } // redact request credentials without mutating original request options\n\n\n const requestCopy = Object.assign({}, options.request);\n\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n });\n }\n\n requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit\n // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\") // OAuth tokens can be passed as URL query parameters, although it is not recommended\n // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy; // deprecations\n\n Object.defineProperty(this, \"code\", {\n get() {\n logOnceCode(new deprecation.Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n return statusCode;\n }\n\n });\n Object.defineProperty(this, \"headers\", {\n get() {\n logOnceHeaders(new deprecation.Deprecation(\"[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.\"));\n return headers || {};\n }\n\n });\n }\n\n}\n\nexports.RequestError = RequestError;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar endpoint = require('@octokit/endpoint');\nvar universalUserAgent = require('universal-user-agent');\nvar isPlainObject = require('is-plain-object');\nvar nodeFetch = _interopDefault(require('node-fetch'));\nvar requestError = require('@octokit/request-error');\n\nconst VERSION = \"5.6.3\";\n\nfunction getBufferResponse(response) {\n return response.arrayBuffer();\n}\n\nfunction fetchWrapper(requestOptions) {\n const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;\n\n if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {\n requestOptions.body = JSON.stringify(requestOptions.body);\n }\n\n let headers = {};\n let status;\n let url;\n const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;\n return fetch(requestOptions.url, Object.assign({\n method: requestOptions.method,\n body: requestOptions.body,\n headers: requestOptions.headers,\n redirect: requestOptions.redirect\n }, // `requestOptions.request.agent` type is incompatible\n // see https://github.com/octokit/types.ts/pull/264\n requestOptions.request)).then(async response => {\n url = response.url;\n status = response.status;\n\n for (const keyAndValue of response.headers) {\n headers[keyAndValue[0]] = keyAndValue[1];\n }\n\n if (\"deprecation\" in headers) {\n const matches = headers.link && headers.link.match(/<([^>]+)>; rel=\"deprecation\"/);\n const deprecationLink = matches && matches.pop();\n log.warn(`[@octokit/request] \"${requestOptions.method} ${requestOptions.url}\" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : \"\"}`);\n }\n\n if (status === 204 || status === 205) {\n return;\n } // GitHub API returns 200 for HEAD requests\n\n\n if (requestOptions.method === \"HEAD\") {\n if (status < 400) {\n return;\n }\n\n throw new requestError.RequestError(response.statusText, status, {\n response: {\n url,\n status,\n headers,\n data: undefined\n },\n request: requestOptions\n });\n }\n\n if (status === 304) {\n throw new requestError.RequestError(\"Not modified\", status, {\n response: {\n url,\n status,\n headers,\n data: await getResponseData(response)\n },\n request: requestOptions\n });\n }\n\n if (status >= 400) {\n const data = await getResponseData(response);\n const error = new requestError.RequestError(toErrorMessage(data), status, {\n response: {\n url,\n status,\n headers,\n data\n },\n request: requestOptions\n });\n throw error;\n }\n\n return getResponseData(response);\n }).then(data => {\n return {\n status,\n url,\n headers,\n data\n };\n }).catch(error => {\n if (error instanceof requestError.RequestError) throw error;\n throw new requestError.RequestError(error.message, 500, {\n request: requestOptions\n });\n });\n}\n\nasync function getResponseData(response) {\n const contentType = response.headers.get(\"content-type\");\n\n if (/application\\/json/.test(contentType)) {\n return response.json();\n }\n\n if (!contentType || /^text\\/|charset=utf-8$/.test(contentType)) {\n return response.text();\n }\n\n return getBufferResponse(response);\n}\n\nfunction toErrorMessage(data) {\n if (typeof data === \"string\") return data; // istanbul ignore else - just in case\n\n if (\"message\" in data) {\n if (Array.isArray(data.errors)) {\n return `${data.message}: ${data.errors.map(JSON.stringify).join(\", \")}`;\n }\n\n return data.message;\n } // istanbul ignore next - just in case\n\n\n return `Unknown error: ${JSON.stringify(data)}`;\n}\n\nfunction withDefaults(oldEndpoint, newDefaults) {\n const endpoint = oldEndpoint.defaults(newDefaults);\n\n const newApi = function (route, parameters) {\n const endpointOptions = endpoint.merge(route, parameters);\n\n if (!endpointOptions.request || !endpointOptions.request.hook) {\n return fetchWrapper(endpoint.parse(endpointOptions));\n }\n\n const request = (route, parameters) => {\n return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));\n };\n\n Object.assign(request, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n return endpointOptions.request.hook(request, endpointOptions);\n };\n\n return Object.assign(newApi, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n}\n\nconst request = withDefaults(endpoint.endpoint, {\n headers: {\n \"user-agent\": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n }\n});\n\nexports.request = request;\n//# sourceMappingURL=index.js.map\n","const { requestLog } = require(\"@octokit/plugin-request-log\");\nconst {\n restEndpointMethods\n} = require(\"@octokit/plugin-rest-endpoint-methods\");\n\nconst Core = require(\"./lib/core\");\n\nconst CORE_PLUGINS = [\n require(\"./plugins/authentication\"),\n require(\"./plugins/authentication-deprecated\"), // deprecated: remove in v17\n requestLog,\n require(\"./plugins/pagination\"),\n restEndpointMethods,\n require(\"./plugins/validate\"),\n\n require(\"octokit-pagination-methods\") // deprecated: remove in v17\n];\n\nconst OctokitRest = Core.plugin(CORE_PLUGINS);\n\nfunction DeprecatedOctokit(options) {\n const warn =\n options && options.log && options.log.warn\n ? options.log.warn\n : console.warn;\n warn(\n '[@octokit/rest] `const Octokit = require(\"@octokit/rest\")` is deprecated. Use `const { Octokit } = require(\"@octokit/rest\")` instead'\n );\n return new OctokitRest(options);\n}\n\nconst Octokit = Object.assign(DeprecatedOctokit, {\n Octokit: OctokitRest\n});\n\nObject.keys(OctokitRest).forEach(key => {\n /* istanbul ignore else */\n if (OctokitRest.hasOwnProperty(key)) {\n Octokit[key] = OctokitRest[key];\n }\n});\n\nmodule.exports = Octokit;\n","module.exports = Octokit;\n\nconst { request } = require(\"@octokit/request\");\nconst Hook = require(\"before-after-hook\");\n\nconst parseClientOptions = require(\"./parse-client-options\");\n\nfunction Octokit(plugins, options) {\n options = options || {};\n const hook = new Hook.Collection();\n const log = Object.assign(\n {\n debug: () => {},\n info: () => {},\n warn: console.warn,\n error: console.error\n },\n options && options.log\n );\n const api = {\n hook,\n log,\n request: request.defaults(parseClientOptions(options, log, hook))\n };\n\n plugins.forEach(pluginFunction => pluginFunction(api, options));\n\n return api;\n}\n","const factory = require(\"./factory\");\n\nmodule.exports = factory();\n","module.exports = factory;\n\nconst Octokit = require(\"./constructor\");\nconst registerPlugin = require(\"./register-plugin\");\n\nfunction factory(plugins) {\n const Api = Octokit.bind(null, plugins || []);\n Api.plugin = registerPlugin.bind(null, plugins || []);\n return Api;\n}\n","module.exports = parseOptions;\n\nconst { Deprecation } = require(\"deprecation\");\nconst { getUserAgent } = require(\"universal-user-agent\");\nconst once = require(\"once\");\n\nconst pkg = require(\"../package.json\");\n\nconst deprecateOptionsTimeout = once((log, deprecation) =>\n log.warn(deprecation)\n);\nconst deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation));\nconst deprecateOptionsHeaders = once((log, deprecation) =>\n log.warn(deprecation)\n);\n\nfunction parseOptions(options, log, hook) {\n if (options.headers) {\n options.headers = Object.keys(options.headers).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = options.headers[key];\n return newObj;\n }, {});\n }\n\n const clientDefaults = {\n headers: options.headers || {},\n request: options.request || {},\n mediaType: {\n previews: [],\n format: \"\"\n }\n };\n\n if (options.baseUrl) {\n clientDefaults.baseUrl = options.baseUrl;\n }\n\n if (options.userAgent) {\n clientDefaults.headers[\"user-agent\"] = options.userAgent;\n }\n\n if (options.previews) {\n clientDefaults.mediaType.previews = options.previews;\n }\n\n if (options.timeZone) {\n clientDefaults.headers[\"time-zone\"] = options.timeZone;\n }\n\n if (options.timeout) {\n deprecateOptionsTimeout(\n log,\n new Deprecation(\n \"[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request\"\n )\n );\n clientDefaults.request.timeout = options.timeout;\n }\n\n if (options.agent) {\n deprecateOptionsAgent(\n log,\n new Deprecation(\n \"[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request\"\n )\n );\n clientDefaults.request.agent = options.agent;\n }\n\n if (options.headers) {\n deprecateOptionsHeaders(\n log,\n new Deprecation(\n \"[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request\"\n )\n );\n }\n\n const userAgentOption = clientDefaults.headers[\"user-agent\"];\n const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`;\n\n clientDefaults.headers[\"user-agent\"] = [userAgentOption, defaultUserAgent]\n .filter(Boolean)\n .join(\" \");\n\n clientDefaults.request.hook = hook.bind(null, \"request\");\n\n return clientDefaults;\n}\n","module.exports = registerPlugin;\n\nconst factory = require(\"./factory\");\n\nfunction registerPlugin(plugins, pluginFunction) {\n return factory(\n plugins.includes(pluginFunction) ? plugins : plugins.concat(pluginFunction)\n );\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar deprecation = require('deprecation');\nvar once = _interopDefault(require('once'));\n\nconst logOnce = once(deprecation => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\n\nclass RequestError extends Error {\n constructor(message, statusCode, options) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.status = statusCode;\n Object.defineProperty(this, \"code\", {\n get() {\n logOnce(new deprecation.Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n return statusCode;\n }\n\n });\n this.headers = options.headers || {}; // redact request credentials without mutating original request options\n\n const requestCopy = Object.assign({}, options.request);\n\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n });\n }\n\n requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit\n // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\") // OAuth tokens can be passed as URL query parameters, although it is not recommended\n // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy;\n }\n\n}\n\nexports.RequestError = RequestError;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar osName = _interopDefault(require('os-name'));\n\nfunction getUserAgent() {\n try {\n return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;\n } catch (error) {\n if (/wmic os get Caption/.test(error.message)) {\n return \"Windows \";\n }\n\n throw error;\n }\n}\n\nexports.getUserAgent = getUserAgent;\n//# sourceMappingURL=index.js.map\n","module.exports = authenticate;\n\nconst { Deprecation } = require(\"deprecation\");\nconst once = require(\"once\");\n\nconst deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));\n\nfunction authenticate(state, options) {\n deprecateAuthenticate(\n state.octokit.log,\n new Deprecation(\n '[@octokit/rest] octokit.authenticate() is deprecated. Use \"auth\" constructor option instead.'\n )\n );\n\n if (!options) {\n state.auth = false;\n return;\n }\n\n switch (options.type) {\n case \"basic\":\n if (!options.username || !options.password) {\n throw new Error(\n \"Basic authentication requires both a username and password to be set\"\n );\n }\n break;\n\n case \"oauth\":\n if (!options.token && !(options.key && options.secret)) {\n throw new Error(\n \"OAuth2 authentication requires a token or key & secret to be set\"\n );\n }\n break;\n\n case \"token\":\n case \"app\":\n if (!options.token) {\n throw new Error(\"Token authentication requires a token to be set\");\n }\n break;\n\n default:\n throw new Error(\n \"Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'\"\n );\n }\n\n state.auth = options;\n}\n","module.exports = authenticationBeforeRequest;\n\nconst btoa = require(\"btoa-lite\");\nconst uniq = require(\"lodash.uniq\");\n\nfunction authenticationBeforeRequest(state, options) {\n if (!state.auth.type) {\n return;\n }\n\n if (state.auth.type === \"basic\") {\n const hash = btoa(`${state.auth.username}:${state.auth.password}`);\n options.headers.authorization = `Basic ${hash}`;\n return;\n }\n\n if (state.auth.type === \"token\") {\n options.headers.authorization = `token ${state.auth.token}`;\n return;\n }\n\n if (state.auth.type === \"app\") {\n options.headers.authorization = `Bearer ${state.auth.token}`;\n const acceptHeaders = options.headers.accept\n .split(\",\")\n .concat(\"application/vnd.github.machine-man-preview+json\");\n options.headers.accept = uniq(acceptHeaders)\n .filter(Boolean)\n .join(\",\");\n return;\n }\n\n options.url += options.url.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n\n if (state.auth.token) {\n options.url += `access_token=${encodeURIComponent(state.auth.token)}`;\n return;\n }\n\n const key = encodeURIComponent(state.auth.key);\n const secret = encodeURIComponent(state.auth.secret);\n options.url += `client_id=${key}&client_secret=${secret}`;\n}\n","module.exports = authenticationPlugin;\n\nconst { Deprecation } = require(\"deprecation\");\nconst once = require(\"once\");\n\nconst deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));\n\nconst authenticate = require(\"./authenticate\");\nconst beforeRequest = require(\"./before-request\");\nconst requestError = require(\"./request-error\");\n\nfunction authenticationPlugin(octokit, options) {\n if (options.auth) {\n octokit.authenticate = () => {\n deprecateAuthenticate(\n octokit.log,\n new Deprecation(\n '[@octokit/rest] octokit.authenticate() is deprecated and has no effect when \"auth\" option is set on Octokit constructor'\n )\n );\n };\n return;\n }\n const state = {\n octokit,\n auth: false\n };\n octokit.authenticate = authenticate.bind(null, state);\n octokit.hook.before(\"request\", beforeRequest.bind(null, state));\n octokit.hook.error(\"request\", requestError.bind(null, state));\n}\n","module.exports = authenticationRequestError;\n\nconst { RequestError } = require(\"@octokit/request-error\");\n\nfunction authenticationRequestError(state, error, options) {\n /* istanbul ignore next */\n if (!error.headers) throw error;\n\n const otpRequired = /required/.test(error.headers[\"x-github-otp\"] || \"\");\n // handle \"2FA required\" error only\n if (error.status !== 401 || !otpRequired) {\n throw error;\n }\n\n if (\n error.status === 401 &&\n otpRequired &&\n error.request &&\n error.request.headers[\"x-github-otp\"]\n ) {\n throw new RequestError(\n \"Invalid one-time password for two-factor authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n\n if (typeof state.auth.on2fa !== \"function\") {\n throw new RequestError(\n \"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n\n return Promise.resolve()\n .then(() => {\n return state.auth.on2fa();\n })\n .then(oneTimePassword => {\n const newOptions = Object.assign(options, {\n headers: Object.assign(\n { \"x-github-otp\": oneTimePassword },\n options.headers\n )\n });\n return state.octokit.request(newOptions);\n });\n}\n","module.exports = authenticationBeforeRequest;\n\nconst btoa = require(\"btoa-lite\");\n\nconst withAuthorizationPrefix = require(\"./with-authorization-prefix\");\n\nfunction authenticationBeforeRequest(state, options) {\n if (typeof state.auth === \"string\") {\n options.headers.authorization = withAuthorizationPrefix(state.auth);\n return;\n }\n\n if (state.auth.username) {\n const hash = btoa(`${state.auth.username}:${state.auth.password}`);\n options.headers.authorization = `Basic ${hash}`;\n if (state.otp) {\n options.headers[\"x-github-otp\"] = state.otp;\n }\n return;\n }\n\n if (state.auth.clientId) {\n // There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as\n // Basic Authorization instead of query parameters. The only routes where that applies share the same\n // URL though: `/applications/:client_id/tokens/:access_token`.\n //\n // 1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization)\n // 2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization)\n // 3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application)\n //\n // We identify by checking the URL. It must merge both \"/applications/:client_id/tokens/:access_token\"\n // as well as \"/applications/123/tokens/token456\"\n if (/\\/applications\\/:?[\\w_]+\\/tokens\\/:?[\\w_]+($|\\?)/.test(options.url)) {\n const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`);\n options.headers.authorization = `Basic ${hash}`;\n return;\n }\n\n options.url += options.url.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`;\n return;\n }\n\n return Promise.resolve()\n\n .then(() => {\n return state.auth();\n })\n\n .then(authorization => {\n options.headers.authorization = withAuthorizationPrefix(authorization);\n });\n}\n","module.exports = authenticationPlugin;\n\nconst { createTokenAuth } = require(\"@octokit/auth-token\");\nconst { Deprecation } = require(\"deprecation\");\nconst once = require(\"once\");\n\nconst beforeRequest = require(\"./before-request\");\nconst requestError = require(\"./request-error\");\nconst validate = require(\"./validate\");\nconst withAuthorizationPrefix = require(\"./with-authorization-prefix\");\n\nconst deprecateAuthBasic = once((log, deprecation) => log.warn(deprecation));\nconst deprecateAuthObject = once((log, deprecation) => log.warn(deprecation));\n\nfunction authenticationPlugin(octokit, options) {\n // If `options.authStrategy` is set then use it and pass in `options.auth`\n if (options.authStrategy) {\n const auth = options.authStrategy(options.auth);\n octokit.hook.wrap(\"request\", auth.hook);\n octokit.auth = auth;\n return;\n }\n\n // If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance\n // is unauthenticated. The `octokit.auth()` method is a no-op and no request hook is registred.\n if (!options.auth) {\n octokit.auth = () =>\n Promise.resolve({\n type: \"unauthenticated\"\n });\n return;\n }\n\n const isBasicAuthString =\n typeof options.auth === \"string\" &&\n /^basic/.test(withAuthorizationPrefix(options.auth));\n\n // If only `options.auth` is set to a string, use the default token authentication strategy.\n if (typeof options.auth === \"string\" && !isBasicAuthString) {\n const auth = createTokenAuth(options.auth);\n octokit.hook.wrap(\"request\", auth.hook);\n octokit.auth = auth;\n return;\n }\n\n // Otherwise log a deprecation message\n const [deprecationMethod, deprecationMessapge] = isBasicAuthString\n ? [\n deprecateAuthBasic,\n 'Setting the \"new Octokit({ auth })\" option to a Basic Auth string is deprecated. Use https://github.com/octokit/auth-basic.js instead. See (https://octokit.github.io/rest.js/#authentication)'\n ]\n : [\n deprecateAuthObject,\n 'Setting the \"new Octokit({ auth })\" option to an object without also setting the \"authStrategy\" option is deprecated and will be removed in v17. See (https://octokit.github.io/rest.js/#authentication)'\n ];\n deprecationMethod(\n octokit.log,\n new Deprecation(\"[@octokit/rest] \" + deprecationMessapge)\n );\n\n octokit.auth = () =>\n Promise.resolve({\n type: \"deprecated\",\n message: deprecationMessapge\n });\n\n validate(options.auth);\n\n const state = {\n octokit,\n auth: options.auth\n };\n\n octokit.hook.before(\"request\", beforeRequest.bind(null, state));\n octokit.hook.error(\"request\", requestError.bind(null, state));\n}\n","module.exports = authenticationRequestError;\n\nconst { RequestError } = require(\"@octokit/request-error\");\n\nfunction authenticationRequestError(state, error, options) {\n if (!error.headers) throw error;\n\n const otpRequired = /required/.test(error.headers[\"x-github-otp\"] || \"\");\n // handle \"2FA required\" error only\n if (error.status !== 401 || !otpRequired) {\n throw error;\n }\n\n if (\n error.status === 401 &&\n otpRequired &&\n error.request &&\n error.request.headers[\"x-github-otp\"]\n ) {\n if (state.otp) {\n delete state.otp; // no longer valid, request again\n } else {\n throw new RequestError(\n \"Invalid one-time password for two-factor authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n }\n\n if (typeof state.auth.on2fa !== \"function\") {\n throw new RequestError(\n \"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n\n return Promise.resolve()\n .then(() => {\n return state.auth.on2fa();\n })\n .then(oneTimePassword => {\n const newOptions = Object.assign(options, {\n headers: Object.assign(options.headers, {\n \"x-github-otp\": oneTimePassword\n })\n });\n return state.octokit.request(newOptions).then(response => {\n // If OTP still valid, then persist it for following requests\n state.otp = oneTimePassword;\n return response;\n });\n });\n}\n","module.exports = validateAuth;\n\nfunction validateAuth(auth) {\n if (typeof auth === \"string\") {\n return;\n }\n\n if (typeof auth === \"function\") {\n return;\n }\n\n if (auth.username && auth.password) {\n return;\n }\n\n if (auth.clientId && auth.clientSecret) {\n return;\n }\n\n throw new Error(`Invalid \"auth\" option: ${JSON.stringify(auth)}`);\n}\n","module.exports = withAuthorizationPrefix;\n\nconst atob = require(\"atob-lite\");\n\nconst REGEX_IS_BASIC_AUTH = /^[\\w-]+:/;\n\nfunction withAuthorizationPrefix(authorization) {\n if (/^(basic|bearer|token) /i.test(authorization)) {\n return authorization;\n }\n\n try {\n if (REGEX_IS_BASIC_AUTH.test(atob(authorization))) {\n return `basic ${authorization}`;\n }\n } catch (error) {}\n\n if (authorization.split(/\\./).length === 3) {\n return `bearer ${authorization}`;\n }\n\n return `token ${authorization}`;\n}\n","module.exports = paginatePlugin;\n\nconst { paginateRest } = require(\"@octokit/plugin-paginate-rest\");\n\nfunction paginatePlugin(octokit) {\n Object.assign(octokit, paginateRest(octokit));\n}\n","module.exports = octokitValidate;\n\nconst validate = require(\"./validate\");\n\nfunction octokitValidate(octokit) {\n octokit.hook.before(\"request\", validate.bind(null, octokit));\n}\n","\"use strict\";\n\nmodule.exports = validate;\n\nconst { RequestError } = require(\"@octokit/request-error\");\nconst get = require(\"lodash.get\");\nconst set = require(\"lodash.set\");\n\nfunction validate(octokit, options) {\n if (!options.request.validate) {\n return;\n }\n const { validate: params } = options.request;\n\n Object.keys(params).forEach(parameterName => {\n const parameter = get(params, parameterName);\n\n const expectedType = parameter.type;\n let parentParameterName;\n let parentValue;\n let parentParamIsPresent = true;\n let parentParameterIsArray = false;\n\n if (/\\./.test(parameterName)) {\n parentParameterName = parameterName.replace(/\\.[^.]+$/, \"\");\n parentParameterIsArray = parentParameterName.slice(-2) === \"[]\";\n if (parentParameterIsArray) {\n parentParameterName = parentParameterName.slice(0, -2);\n }\n parentValue = get(options, parentParameterName);\n parentParamIsPresent =\n parentParameterName === \"headers\" ||\n (typeof parentValue === \"object\" && parentValue !== null);\n }\n\n const values = parentParameterIsArray\n ? (get(options, parentParameterName) || []).map(\n value => value[parameterName.split(/\\./).pop()]\n )\n : [get(options, parameterName)];\n\n values.forEach((value, i) => {\n const valueIsPresent = typeof value !== \"undefined\";\n const valueIsNull = value === null;\n const currentParameterName = parentParameterIsArray\n ? parameterName.replace(/\\[\\]/, `[${i}]`)\n : parameterName;\n\n if (!parameter.required && !valueIsPresent) {\n return;\n }\n\n // if the parent parameter is of type object but allows null\n // then the child parameters can be ignored\n if (!parentParamIsPresent) {\n return;\n }\n\n if (parameter.allowNull && valueIsNull) {\n return;\n }\n\n if (!parameter.allowNull && valueIsNull) {\n throw new RequestError(\n `'${currentParameterName}' cannot be null`,\n 400,\n {\n request: options\n }\n );\n }\n\n if (parameter.required && !valueIsPresent) {\n throw new RequestError(\n `Empty value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n\n // parse to integer before checking for enum\n // so that string \"1\" will match enum with number 1\n if (expectedType === \"integer\") {\n const unparsedValue = value;\n value = parseInt(value, 10);\n if (isNaN(value)) {\n throw new RequestError(\n `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(\n unparsedValue\n )} is NaN`,\n 400,\n {\n request: options\n }\n );\n }\n }\n\n if (parameter.enum && parameter.enum.indexOf(String(value)) === -1) {\n throw new RequestError(\n `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n\n if (parameter.validation) {\n const regex = new RegExp(parameter.validation);\n if (!regex.test(value)) {\n throw new RequestError(\n `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n }\n\n if (expectedType === \"object\" && typeof value === \"string\") {\n try {\n value = JSON.parse(value);\n } catch (exception) {\n throw new RequestError(\n `JSON parse error of value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n }\n\n set(options, parameter.mapTo || currentParameterName, value);\n });\n });\n\n return options;\n}\n","module.exports = function atob(str) {\n return Buffer.from(str, 'base64').toString('binary')\n}\n","var register = require('./lib/register')\nvar addHook = require('./lib/add')\nvar removeHook = require('./lib/remove')\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nvar bind = Function.bind\nvar bindable = bind.bind(bind)\n\nfunction bindApi (hook, state, name) {\n var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])\n hook.api = { remove: removeHookRef }\n hook.remove = removeHookRef\n\n ;['before', 'error', 'after', 'wrap'].forEach(function (kind) {\n var args = name ? [state, kind, name] : [state, kind]\n hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)\n })\n}\n\nfunction HookSingular () {\n var singularHookName = 'h'\n var singularHookState = {\n registry: {}\n }\n var singularHook = register.bind(null, singularHookState, singularHookName)\n bindApi(singularHook, singularHookState, singularHookName)\n return singularHook\n}\n\nfunction HookCollection () {\n var state = {\n registry: {}\n }\n\n var hook = register.bind(null, state)\n bindApi(hook, state)\n\n return hook\n}\n\nvar collectionHookDeprecationMessageDisplayed = false\nfunction Hook () {\n if (!collectionHookDeprecationMessageDisplayed) {\n console.warn('[before-after-hook]: \"Hook()\" repurposing warning, use \"Hook.Collection()\". Read more: https://git.io/upgrade-before-after-hook-to-1.4')\n collectionHookDeprecationMessageDisplayed = true\n }\n return HookCollection()\n}\n\nHook.Singular = HookSingular.bind()\nHook.Collection = HookCollection.bind()\n\nmodule.exports = Hook\n// expose constructors as a named property for TypeScript\nmodule.exports.Hook = Hook\nmodule.exports.Singular = Hook.Singular\nmodule.exports.Collection = Hook.Collection\n","module.exports = addHook;\n\nfunction addHook(state, kind, name, hook) {\n var orig = hook;\n if (!state.registry[name]) {\n state.registry[name] = [];\n }\n\n if (kind === \"before\") {\n hook = function (method, options) {\n return Promise.resolve()\n .then(orig.bind(null, options))\n .then(method.bind(null, options));\n };\n }\n\n if (kind === \"after\") {\n hook = function (method, options) {\n var result;\n return Promise.resolve()\n .then(method.bind(null, options))\n .then(function (result_) {\n result = result_;\n return orig(result, options);\n })\n .then(function () {\n return result;\n });\n };\n }\n\n if (kind === \"error\") {\n hook = function (method, options) {\n return Promise.resolve()\n .then(method.bind(null, options))\n .catch(function (error) {\n return orig(error, options);\n });\n };\n }\n\n state.registry[name].push({\n hook: hook,\n orig: orig,\n });\n}\n","module.exports = register;\n\nfunction register(state, name, method, options) {\n if (typeof method !== \"function\") {\n throw new Error(\"method for before hook must be a function\");\n }\n\n if (!options) {\n options = {};\n }\n\n if (Array.isArray(name)) {\n return name.reverse().reduce(function (callback, name) {\n return register.bind(null, state, name, callback, options);\n }, method)();\n }\n\n return Promise.resolve().then(function () {\n if (!state.registry[name]) {\n return method(options);\n }\n\n return state.registry[name].reduce(function (method, registered) {\n return registered.hook.bind(null, method, options);\n }, method)();\n });\n}\n","module.exports = removeHook;\n\nfunction removeHook(state, name, method) {\n if (!state.registry[name]) {\n return;\n }\n\n var index = state.registry[name]\n .map(function (registered) {\n return registered.orig;\n })\n .indexOf(method);\n\n if (index === -1) {\n return;\n }\n\n state.registry[name].splice(index, 1);\n}\n","module.exports = function btoa(str) {\n return new Buffer(str).toString('base64')\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass Deprecation extends Error {\n constructor(message) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = 'Deprecation';\n }\n\n}\n\nexports.Deprecation = Deprecation;\n","var once = require('once');\n\nvar noop = function() {};\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tprocess.nextTick(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n","'use strict';\nconst {PassThrough} = require('stream');\n\nmodule.exports = options => {\n\toptions = Object.assign({}, options);\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst buffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || buffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (buffer) {\n\t\tencoding = null;\n\t}\n\n\tlet len = 0;\n\tconst ret = [];\n\tconst stream = new PassThrough({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tstream.on('data', chunk => {\n\t\tret.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlen = ret.length;\n\t\t} else {\n\t\t\tlen += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn buffer ? Buffer.concat(ret, len) : ret.join('');\n\t};\n\n\tstream.getBufferedLength = () => len;\n\n\treturn stream;\n};\n","'use strict';\nconst pump = require('pump');\nconst bufferStream = require('./buffer-stream');\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nfunction getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\treturn Promise.reject(new Error('Expected a stream'));\n\t}\n\n\toptions = Object.assign({maxBuffer: Infinity}, options);\n\n\tconst {maxBuffer} = options;\n\n\tlet stream;\n\treturn new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\tif (error) { // A null check\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\t\t\treject(error);\n\t\t};\n\n\t\tstream = pump(inputStream, bufferStream(options), error => {\n\t\t\tif (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t});\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t}).then(() => stream.getBufferedValue());\n}\n\nmodule.exports = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'}));\nmodule.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true}));\nmodule.exports.MaxBufferError = MaxBufferError;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n core = require('./windows.js')\n} else {\n core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n if (!cb) {\n if (typeof Promise !== 'function') {\n throw new TypeError('callback not provided')\n }\n\n return new Promise(function (resolve, reject) {\n isexe(path, options || {}, function (er, is) {\n if (er) {\n reject(er)\n } else {\n resolve(is)\n }\n })\n })\n }\n\n core(path, options || {}, function (er, is) {\n // ignore EACCES because that just means we aren't allowed to run it\n if (er) {\n if (er.code === 'EACCES' || options && options.ignoreErrors) {\n er = null\n is = false\n }\n }\n cb(er, is)\n })\n}\n\nfunction sync (path, options) {\n // my kingdom for a filtered catch\n try {\n return core.sync(path, options || {})\n } catch (er) {\n if (options && options.ignoreErrors || er.code === 'EACCES') {\n return false\n } else {\n throw er\n }\n }\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n var mod = stat.mode\n var uid = stat.uid\n var gid = stat.gid\n\n var myUid = options.uid !== undefined ?\n options.uid : process.getuid && process.getuid()\n var myGid = options.gid !== undefined ?\n options.gid : process.getgid && process.getgid()\n\n var u = parseInt('100', 8)\n var g = parseInt('010', 8)\n var o = parseInt('001', 8)\n var ug = u | g\n\n var ret = (mod & o) ||\n (mod & g) && gid === myGid ||\n (mod & u) && uid === myUid ||\n (mod & ug) && myUid === 0\n\n return ret\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n var pathext = options.pathExt !== undefined ?\n options.pathExt : process.env.PATHEXT\n\n if (!pathext) {\n return true\n }\n\n pathext = pathext.split(';')\n if (pathext.indexOf('') !== -1) {\n return true\n }\n for (var i = 0; i < pathext.length; i++) {\n var p = pathext[i].toLowerCase()\n if (p && path.substr(-p.length).toLowerCase() === p) {\n return true\n }\n }\n return false\n}\n\nfunction checkStat (stat, path, options) {\n if (!stat.isSymbolicLink() && !stat.isFile()) {\n return false\n }\n return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, path, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), path, options)\n}\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n Set = getNative(root, 'Set'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each\n * element is kept.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length)\n ? baseUniq(array)\n : [];\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = uniq;\n","'use strict';\nconst os = require('os');\n\nconst nameMap = new Map([\n\t[21, ['Monterey', '12']],\n\t[20, ['Big Sur', '11']],\n\t[19, ['Catalina', '10.15']],\n\t[18, ['Mojave', '10.14']],\n\t[17, ['High Sierra', '10.13']],\n\t[16, ['Sierra', '10.12']],\n\t[15, ['El Capitan', '10.11']],\n\t[14, ['Yosemite', '10.10']],\n\t[13, ['Mavericks', '10.9']],\n\t[12, ['Mountain Lion', '10.8']],\n\t[11, ['Lion', '10.7']],\n\t[10, ['Snow Leopard', '10.6']],\n\t[9, ['Leopard', '10.5']],\n\t[8, ['Tiger', '10.4']],\n\t[7, ['Panther', '10.3']],\n\t[6, ['Jaguar', '10.2']],\n\t[5, ['Puma', '10.1']]\n]);\n\nconst macosRelease = release => {\n\trelease = Number((release || os.release()).split('.')[0]);\n\n\tconst [name, version] = nameMap.get(release);\n\n\treturn {\n\t\tname,\n\t\tversion\n\t};\n};\n\nmodule.exports = macosRelease;\n// TODO: remove this in the next major version\nmodule.exports.default = macosRelease;\n","'use strict'\n\n/**\n * Tries to execute a function and discards any error that occurs.\n * @param {Function} fn - Function that might or might not throw an error.\n * @returns {?*} Return-value of the function when no error occurred.\n */\nmodule.exports = function(fn) {\n\n\ttry { return fn() } catch (e) {}\n\n}","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Stream = _interopDefault(require('stream'));\nvar http = _interopDefault(require('http'));\nvar Url = _interopDefault(require('url'));\nvar whatwgUrl = _interopDefault(require('whatwg-url'));\nvar https = _interopDefault(require('https'));\nvar zlib = _interopDefault(require('zlib'));\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\t\t\tfinalize();\n\t\t});\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nmodule.exports = exports = fetch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports;\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.FetchError = FetchError;\n","module.exports = paginationMethodsPlugin\n\nfunction paginationMethodsPlugin (octokit) {\n octokit.getFirstPage = require('./lib/get-first-page').bind(null, octokit)\n octokit.getLastPage = require('./lib/get-last-page').bind(null, octokit)\n octokit.getNextPage = require('./lib/get-next-page').bind(null, octokit)\n octokit.getPreviousPage = require('./lib/get-previous-page').bind(null, octokit)\n octokit.hasFirstPage = require('./lib/has-first-page')\n octokit.hasLastPage = require('./lib/has-last-page')\n octokit.hasNextPage = require('./lib/has-next-page')\n octokit.hasPreviousPage = require('./lib/has-previous-page')\n}\n","module.exports = deprecate\n\nconst loggedMessages = {}\n\nfunction deprecate (message) {\n if (loggedMessages[message]) {\n return\n }\n\n console.warn(`DEPRECATED (@octokit/rest): ${message}`)\n loggedMessages[message] = 1\n}\n","module.exports = getFirstPage\n\nconst getPage = require('./get-page')\n\nfunction getFirstPage (octokit, link, headers) {\n return getPage(octokit, link, 'first', headers)\n}\n","module.exports = getLastPage\n\nconst getPage = require('./get-page')\n\nfunction getLastPage (octokit, link, headers) {\n return getPage(octokit, link, 'last', headers)\n}\n","module.exports = getNextPage\n\nconst getPage = require('./get-page')\n\nfunction getNextPage (octokit, link, headers) {\n return getPage(octokit, link, 'next', headers)\n}\n","module.exports = getPageLinks\n\nfunction getPageLinks (link) {\n link = link.link || link.headers.link || ''\n\n const links = {}\n\n // link format:\n // '; rel=\"next\", ; rel=\"last\"'\n link.replace(/<([^>]*)>;\\s*rel=\"([\\w]*)\"/g, (m, uri, type) => {\n links[type] = uri\n })\n\n return links\n}\n","module.exports = getPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\nconst HttpError = require('./http-error')\n\nfunction getPage (octokit, link, which, headers) {\n deprecate(`octokit.get${which.charAt(0).toUpperCase() + which.slice(1)}Page() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n const url = getPageLinks(link)[which]\n\n if (!url) {\n const urlError = new HttpError(`No ${which} page found`, 404)\n return Promise.reject(urlError)\n }\n\n const requestOptions = {\n url,\n headers: applyAcceptHeader(link, headers)\n }\n\n const promise = octokit.request(requestOptions)\n\n return promise\n}\n\nfunction applyAcceptHeader (res, headers) {\n const previous = res.headers && res.headers['x-github-media-type']\n\n if (!previous || (headers && headers.accept)) {\n return headers\n }\n headers = headers || {}\n headers.accept = 'application/vnd.' + previous\n .replace('; param=', '.')\n .replace('; format=', '+')\n\n return headers\n}\n","module.exports = getPreviousPage\n\nconst getPage = require('./get-page')\n\nfunction getPreviousPage (octokit, link, headers) {\n return getPage(octokit, link, 'prev', headers)\n}\n","module.exports = hasFirstPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasFirstPage (link) {\n deprecate(`octokit.hasFirstPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).first\n}\n","module.exports = hasLastPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasLastPage (link) {\n deprecate(`octokit.hasLastPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).last\n}\n","module.exports = hasNextPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasNextPage (link) {\n deprecate(`octokit.hasNextPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).next\n}\n","module.exports = hasPreviousPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasPreviousPage (link) {\n deprecate(`octokit.hasPreviousPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).prev\n}\n","module.exports = class HttpError extends Error {\n constructor (message, code, headers) {\n super(message)\n\n // Maintains proper stack trace (only available on V8)\n /* istanbul ignore next */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n\n this.name = 'HttpError'\n this.code = code\n this.headers = headers\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","'use strict';\nconst os = require('os');\nconst macosRelease = require('macos-release');\nconst winRelease = require('windows-release');\n\nconst osName = (platform, release) => {\n\tif (!platform && release) {\n\t\tthrow new Error('You can\\'t specify a `release` without specifying `platform`');\n\t}\n\n\tplatform = platform || os.platform();\n\n\tlet id;\n\n\tif (platform === 'darwin') {\n\t\tif (!release && os.platform() === 'darwin') {\n\t\t\trelease = os.release();\n\t\t}\n\n\t\tconst prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS';\n\t\tid = release ? macosRelease(release).name : '';\n\t\treturn prefix + (id ? ' ' + id : '');\n\t}\n\n\tif (platform === 'linux') {\n\t\tif (!release && os.platform() === 'linux') {\n\t\t\trelease = os.release();\n\t\t}\n\n\t\tid = release ? release.replace(/^(\\d+\\.\\d+).*/, '$1') : '';\n\t\treturn 'Linux' + (id ? ' ' + id : '');\n\t}\n\n\tif (platform === 'win32') {\n\t\tif (!release && os.platform() === 'win32') {\n\t\t\trelease = os.release();\n\t\t}\n\n\t\tid = release ? winRelease(release) : '';\n\t\treturn 'Windows' + (id ? ' ' + id : '');\n\t}\n\n\treturn platform;\n};\n\nmodule.exports = osName;\n","'use strict';\nmodule.exports = (promise, onFinally) => {\n\tonFinally = onFinally || (() => {});\n\n\treturn promise.then(\n\t\tval => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => val),\n\t\terr => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => {\n\t\t\tthrow err;\n\t\t})\n\t);\n};\n","var once = require('once')\nvar eos = require('end-of-stream')\nvar fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes\n\nvar noop = function () {}\nvar ancient = /^v?\\.0/.test(process.version)\n\nvar isFn = function (fn) {\n return typeof fn === 'function'\n}\n\nvar isFS = function (stream) {\n if (!ancient) return false // newer node version do not need to care about fs is a special way\n if (!fs) return false // browser\n return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)\n}\n\nvar isRequest = function (stream) {\n return stream.setHeader && isFn(stream.abort)\n}\n\nvar destroyer = function (stream, reading, writing, callback) {\n callback = once(callback)\n\n var closed = false\n stream.on('close', function () {\n closed = true\n })\n\n eos(stream, {readable: reading, writable: writing}, function (err) {\n if (err) return callback(err)\n closed = true\n callback()\n })\n\n var destroyed = false\n return function (err) {\n if (closed) return\n if (destroyed) return\n destroyed = true\n\n if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks\n if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want\n\n if (isFn(stream.destroy)) return stream.destroy()\n\n callback(err || new Error('stream was destroyed'))\n }\n}\n\nvar call = function (fn) {\n fn()\n}\n\nvar pipe = function (from, to) {\n return from.pipe(to)\n}\n\nvar pump = function () {\n var streams = Array.prototype.slice.call(arguments)\n var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop\n\n if (Array.isArray(streams[0])) streams = streams[0]\n if (streams.length < 2) throw new Error('pump requires two streams per minimum')\n\n var error\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1\n var writing = i > 0\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err\n if (err) destroys.forEach(call)\n if (reading) return\n destroys.forEach(call)\n callback(error)\n })\n })\n\n return streams.reduce(pipe)\n}\n\nmodule.exports = pump\n","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { : , ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n","// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n","'use strict';\nmodule.exports = function (x) {\n\tvar lf = typeof x === 'string' ? '\\n' : '\\n'.charCodeAt();\n\tvar cr = typeof x === 'string' ? '\\r' : '\\r'.charCodeAt();\n\n\tif (x[x.length - 1] === lf) {\n\t\tx = x.slice(0, x.length - 1);\n\t}\n\n\tif (x[x.length - 1] === cr) {\n\t\tx = x.slice(0, x.length - 1);\n\t}\n\n\treturn x;\n};\n","\"use strict\";\n\nvar punycode = require(\"punycode\");\nvar mappingTable = require(\"./lib/mappingTable.json\");\n\nvar PROCESSING_OPTIONS = {\n TRANSITIONAL: 0,\n NONTRANSITIONAL: 1\n};\n\nfunction normalize(str) { // fix bug in v8\n return str.split('\\u0000').map(function (s) { return s.normalize('NFC'); }).join('\\u0000');\n}\n\nfunction findStatus(val) {\n var start = 0;\n var end = mappingTable.length - 1;\n\n while (start <= end) {\n var mid = Math.floor((start + end) / 2);\n\n var target = mappingTable[mid];\n if (target[0][0] <= val && target[0][1] >= val) {\n return target;\n } else if (target[0][0] > val) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n\n return null;\n}\n\nvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\nfunction countSymbols(string) {\n return string\n // replace every surrogate pair with a BMP symbol\n .replace(regexAstralSymbols, '_')\n // then get the length\n .length;\n}\n\nfunction mapChars(domain_name, useSTD3, processing_option) {\n var hasError = false;\n var processed = \"\";\n\n var len = countSymbols(domain_name);\n for (var i = 0; i < len; ++i) {\n var codePoint = domain_name.codePointAt(i);\n var status = findStatus(codePoint);\n\n switch (status[1]) {\n case \"disallowed\":\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n break;\n case \"ignored\":\n break;\n case \"mapped\":\n processed += String.fromCodePoint.apply(String, status[2]);\n break;\n case \"deviation\":\n if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {\n processed += String.fromCodePoint.apply(String, status[2]);\n } else {\n processed += String.fromCodePoint(codePoint);\n }\n break;\n case \"valid\":\n processed += String.fromCodePoint(codePoint);\n break;\n case \"disallowed_STD3_mapped\":\n if (useSTD3) {\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n } else {\n processed += String.fromCodePoint.apply(String, status[2]);\n }\n break;\n case \"disallowed_STD3_valid\":\n if (useSTD3) {\n hasError = true;\n }\n\n processed += String.fromCodePoint(codePoint);\n break;\n }\n }\n\n return {\n string: processed,\n error: hasError\n };\n}\n\nvar combiningMarksRegex = /[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2D]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDE2C-\\uDE37\\uDEDF-\\uDEEA\\uDF01-\\uDF03\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDE30-\\uDE40\\uDEAB-\\uDEB7]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF51-\\uDF7E\\uDF8F-\\uDF92]|\\uD82F[\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nfunction validateLabel(label, processing_option) {\n if (label.substr(0, 4) === \"xn--\") {\n label = punycode.toUnicode(label);\n processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;\n }\n\n var error = false;\n\n if (normalize(label) !== label ||\n (label[3] === \"-\" && label[4] === \"-\") ||\n label[0] === \"-\" || label[label.length - 1] === \"-\" ||\n label.indexOf(\".\") !== -1 ||\n label.search(combiningMarksRegex) === 0) {\n error = true;\n }\n\n var len = countSymbols(label);\n for (var i = 0; i < len; ++i) {\n var status = findStatus(label.codePointAt(i));\n if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== \"valid\") ||\n (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&\n status[1] !== \"valid\" && status[1] !== \"deviation\")) {\n error = true;\n break;\n }\n }\n\n return {\n label: label,\n error: error\n };\n}\n\nfunction processing(domain_name, useSTD3, processing_option) {\n var result = mapChars(domain_name, useSTD3, processing_option);\n result.string = normalize(result.string);\n\n var labels = result.string.split(\".\");\n for (var i = 0; i < labels.length; ++i) {\n try {\n var validation = validateLabel(labels[i]);\n labels[i] = validation.label;\n result.error = result.error || validation.error;\n } catch(e) {\n result.error = true;\n }\n }\n\n return {\n string: labels.join(\".\"),\n error: result.error\n };\n}\n\nmodule.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {\n var result = processing(domain_name, useSTD3, processing_option);\n var labels = result.string.split(\".\");\n labels = labels.map(function(l) {\n try {\n return punycode.toASCII(l);\n } catch(e) {\n result.error = true;\n return l;\n }\n });\n\n if (verifyDnsLength) {\n var total = labels.slice(0, labels.length - 1).join(\".\").length;\n if (total.length > 253 || total.length === 0) {\n result.error = true;\n }\n\n for (var i=0; i < labels.length; ++i) {\n if (labels.length > 63 || labels.length === 0) {\n result.error = true;\n break;\n }\n }\n }\n\n if (result.error) return null;\n return labels.join(\".\");\n};\n\nmodule.exports.toUnicode = function(domain_name, useSTD3) {\n var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);\n\n return {\n domain: result.string,\n error: result.error\n };\n};\n\nmodule.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;\n","module.exports = require('./lib/tunnel');\n","'use strict';\n\nvar net = require('net');\nvar tls = require('tls');\nvar http = require('http');\nvar https = require('https');\nvar events = require('events');\nvar assert = require('assert');\nvar util = require('util');\n\n\nexports.httpOverHttp = httpOverHttp;\nexports.httpsOverHttp = httpsOverHttp;\nexports.httpOverHttps = httpOverHttps;\nexports.httpsOverHttps = httpsOverHttps;\n\n\nfunction httpOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n return agent;\n}\n\nfunction httpsOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\nfunction httpOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n return agent;\n}\n\nfunction httpsOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\n\nfunction TunnelingAgent(options) {\n var self = this;\n self.options = options || {};\n self.proxyOptions = self.options.proxy || {};\n self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;\n self.requests = [];\n self.sockets = [];\n\n self.on('free', function onFree(socket, host, port, localAddress) {\n var options = toOptions(host, port, localAddress);\n for (var i = 0, len = self.requests.length; i < len; ++i) {\n var pending = self.requests[i];\n if (pending.host === options.host && pending.port === options.port) {\n // Detect the request to connect same origin server,\n // reuse the connection.\n self.requests.splice(i, 1);\n pending.request.onSocket(socket);\n return;\n }\n }\n socket.destroy();\n self.removeSocket(socket);\n });\n}\nutil.inherits(TunnelingAgent, events.EventEmitter);\n\nTunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {\n var self = this;\n var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));\n\n if (self.sockets.length >= this.maxSockets) {\n // We are over limit so we'll add it to the queue.\n self.requests.push(options);\n return;\n }\n\n // If we are under maxSockets create a new one.\n self.createSocket(options, function(socket) {\n socket.on('free', onFree);\n socket.on('close', onCloseOrRemove);\n socket.on('agentRemove', onCloseOrRemove);\n req.onSocket(socket);\n\n function onFree() {\n self.emit('free', socket, options);\n }\n\n function onCloseOrRemove(err) {\n self.removeSocket(socket);\n socket.removeListener('free', onFree);\n socket.removeListener('close', onCloseOrRemove);\n socket.removeListener('agentRemove', onCloseOrRemove);\n }\n });\n};\n\nTunnelingAgent.prototype.createSocket = function createSocket(options, cb) {\n var self = this;\n var placeholder = {};\n self.sockets.push(placeholder);\n\n var connectOptions = mergeOptions({}, self.proxyOptions, {\n method: 'CONNECT',\n path: options.host + ':' + options.port,\n agent: false,\n headers: {\n host: options.host + ':' + options.port\n }\n });\n if (options.localAddress) {\n connectOptions.localAddress = options.localAddress;\n }\n if (connectOptions.proxyAuth) {\n connectOptions.headers = connectOptions.headers || {};\n connectOptions.headers['Proxy-Authorization'] = 'Basic ' +\n new Buffer(connectOptions.proxyAuth).toString('base64');\n }\n\n debug('making CONNECT request');\n var connectReq = self.request(connectOptions);\n connectReq.useChunkedEncodingByDefault = false; // for v0.6\n connectReq.once('response', onResponse); // for v0.6\n connectReq.once('upgrade', onUpgrade); // for v0.6\n connectReq.once('connect', onConnect); // for v0.7 or later\n connectReq.once('error', onError);\n connectReq.end();\n\n function onResponse(res) {\n // Very hacky. This is necessary to avoid http-parser leaks.\n res.upgrade = true;\n }\n\n function onUpgrade(res, socket, head) {\n // Hacky.\n process.nextTick(function() {\n onConnect(res, socket, head);\n });\n }\n\n function onConnect(res, socket, head) {\n connectReq.removeAllListeners();\n socket.removeAllListeners();\n\n if (res.statusCode !== 200) {\n debug('tunneling socket could not be established, statusCode=%d',\n res.statusCode);\n socket.destroy();\n var error = new Error('tunneling socket could not be established, ' +\n 'statusCode=' + res.statusCode);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n if (head.length > 0) {\n debug('got illegal response body from proxy');\n socket.destroy();\n var error = new Error('got illegal response body from proxy');\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n debug('tunneling connection has established');\n self.sockets[self.sockets.indexOf(placeholder)] = socket;\n return cb(socket);\n }\n\n function onError(cause) {\n connectReq.removeAllListeners();\n\n debug('tunneling socket could not be established, cause=%s\\n',\n cause.message, cause.stack);\n var error = new Error('tunneling socket could not be established, ' +\n 'cause=' + cause.message);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n }\n};\n\nTunnelingAgent.prototype.removeSocket = function removeSocket(socket) {\n var pos = this.sockets.indexOf(socket)\n if (pos === -1) {\n return;\n }\n this.sockets.splice(pos, 1);\n\n var pending = this.requests.shift();\n if (pending) {\n // If we have pending requests and a socket gets closed a new one\n // needs to be created to take over in the pool for the one that closed.\n this.createSocket(pending, function(socket) {\n pending.request.onSocket(socket);\n });\n }\n};\n\nfunction createSecureSocket(options, cb) {\n var self = this;\n TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {\n var hostHeader = options.request.getHeader('host');\n var tlsOptions = mergeOptions({}, self.options, {\n socket: socket,\n servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host\n });\n\n // 0 is dummy port for v0.6\n var secureSocket = tls.connect(0, tlsOptions);\n self.sockets[self.sockets.indexOf(socket)] = secureSocket;\n cb(secureSocket);\n });\n}\n\n\nfunction toOptions(host, port, localAddress) {\n if (typeof host === 'string') { // since v0.10\n return {\n host: host,\n port: port,\n localAddress: localAddress\n };\n }\n return host; // for v0.11 or later\n}\n\nfunction mergeOptions(target) {\n for (var i = 1, len = arguments.length; i < len; ++i) {\n var overrides = arguments[i];\n if (typeof overrides === 'object') {\n var keys = Object.keys(overrides);\n for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {\n var k = keys[j];\n if (overrides[k] !== undefined) {\n target[k] = overrides[k];\n }\n }\n }\n }\n return target;\n}\n\n\nvar debug;\nif (process.env.NODE_DEBUG && /\\btunnel\\b/.test(process.env.NODE_DEBUG)) {\n debug = function() {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'string') {\n args[0] = 'TUNNEL: ' + args[0];\n } else {\n args.unshift('TUNNEL:');\n }\n console.error.apply(console, args);\n }\n} else {\n debug = function() {};\n}\nexports.debug = debug; // for test\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction getUserAgent() {\n if (typeof navigator === \"object\" && \"userAgent\" in navigator) {\n return navigator.userAgent;\n }\n\n if (typeof process === \"object\" && \"version\" in process) {\n return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;\n }\n\n return \"\";\n}\n\nexports.getUserAgent = getUserAgent;\n//# sourceMappingURL=index.js.map\n","\"use strict\";\n\nvar conversions = {};\nmodule.exports = conversions;\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction evenRound(x) {\n // Round x to the nearest integer, choosing the even integer if it lies halfway between two.\n if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)\n return Math.floor(x);\n } else {\n return Math.round(x);\n }\n}\n\nfunction createNumberConversion(bitLength, typeOpts) {\n if (!typeOpts.unsigned) {\n --bitLength;\n }\n const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);\n const upperBound = Math.pow(2, bitLength) - 1;\n\n const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);\n const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);\n\n return function(V, opts) {\n if (!opts) opts = {};\n\n let x = +V;\n\n if (opts.enforceRange) {\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite number\");\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(\"Argument is not in byte range\");\n }\n\n return x;\n }\n\n if (!isNaN(x) && opts.clamp) {\n x = evenRound(x);\n\n if (x < lowerBound) x = lowerBound;\n if (x > upperBound) x = upperBound;\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n x = x % moduloVal;\n\n if (!typeOpts.unsigned && x >= moduloBound) {\n return x - moduloVal;\n } else if (typeOpts.unsigned) {\n if (x < 0) {\n x += moduloVal;\n } else if (x === -0) { // don't return negative zero\n return 0;\n }\n }\n\n return x;\n }\n}\n\nconversions[\"void\"] = function () {\n return undefined;\n};\n\nconversions[\"boolean\"] = function (val) {\n return !!val;\n};\n\nconversions[\"byte\"] = createNumberConversion(8, { unsigned: false });\nconversions[\"octet\"] = createNumberConversion(8, { unsigned: true });\n\nconversions[\"short\"] = createNumberConversion(16, { unsigned: false });\nconversions[\"unsigned short\"] = createNumberConversion(16, { unsigned: true });\n\nconversions[\"long\"] = createNumberConversion(32, { unsigned: false });\nconversions[\"unsigned long\"] = createNumberConversion(32, { unsigned: true });\n\nconversions[\"long long\"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });\nconversions[\"unsigned long long\"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });\n\nconversions[\"double\"] = function (V) {\n const x = +V;\n\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite floating-point value\");\n }\n\n return x;\n};\n\nconversions[\"unrestricted double\"] = function (V) {\n const x = +V;\n\n if (isNaN(x)) {\n throw new TypeError(\"Argument is NaN\");\n }\n\n return x;\n};\n\n// not quite valid, but good enough for JS\nconversions[\"float\"] = conversions[\"double\"];\nconversions[\"unrestricted float\"] = conversions[\"unrestricted double\"];\n\nconversions[\"DOMString\"] = function (V, opts) {\n if (!opts) opts = {};\n\n if (opts.treatNullAsEmptyString && V === null) {\n return \"\";\n }\n\n return String(V);\n};\n\nconversions[\"ByteString\"] = function (V, opts) {\n const x = String(V);\n let c = undefined;\n for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n if (c > 255) {\n throw new TypeError(\"Argument is not a valid bytestring\");\n }\n }\n\n return x;\n};\n\nconversions[\"USVString\"] = function (V) {\n const S = String(V);\n const n = S.length;\n const U = [];\n for (let i = 0; i < n; ++i) {\n const c = S.charCodeAt(i);\n if (c < 0xD800 || c > 0xDFFF) {\n U.push(String.fromCodePoint(c));\n } else if (0xDC00 <= c && c <= 0xDFFF) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n if (i === n - 1) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n const d = S.charCodeAt(i + 1);\n if (0xDC00 <= d && d <= 0xDFFF) {\n const a = c & 0x3FF;\n const b = d & 0x3FF;\n U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));\n ++i;\n } else {\n U.push(String.fromCodePoint(0xFFFD));\n }\n }\n }\n }\n\n return U.join('');\n};\n\nconversions[\"Date\"] = function (V, opts) {\n if (!(V instanceof Date)) {\n throw new TypeError(\"Argument is not a Date object\");\n }\n if (isNaN(V)) {\n return undefined;\n }\n\n return V;\n};\n\nconversions[\"RegExp\"] = function (V, opts) {\n if (!(V instanceof RegExp)) {\n V = new RegExp(V);\n }\n\n return V;\n};\n","\"use strict\";\nconst usm = require(\"./url-state-machine\");\n\nexports.implementation = class URLImpl {\n constructor(constructorArgs) {\n const url = constructorArgs[0];\n const base = constructorArgs[1];\n\n let parsedBase = null;\n if (base !== undefined) {\n parsedBase = usm.basicURLParse(base);\n if (parsedBase === \"failure\") {\n throw new TypeError(\"Invalid base URL\");\n }\n }\n\n const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n\n // TODO: query stuff\n }\n\n get href() {\n return usm.serializeURL(this._url);\n }\n\n set href(v) {\n const parsedURL = usm.basicURLParse(v);\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n }\n\n get origin() {\n return usm.serializeURLOrigin(this._url);\n }\n\n get protocol() {\n return this._url.scheme + \":\";\n }\n\n set protocol(v) {\n usm.basicURLParse(v + \":\", { url: this._url, stateOverride: \"scheme start\" });\n }\n\n get username() {\n return this._url.username;\n }\n\n set username(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setTheUsername(this._url, v);\n }\n\n get password() {\n return this._url.password;\n }\n\n set password(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setThePassword(this._url, v);\n }\n\n get host() {\n const url = this._url;\n\n if (url.host === null) {\n return \"\";\n }\n\n if (url.port === null) {\n return usm.serializeHost(url.host);\n }\n\n return usm.serializeHost(url.host) + \":\" + usm.serializeInteger(url.port);\n }\n\n set host(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n }\n\n get hostname() {\n if (this._url.host === null) {\n return \"\";\n }\n\n return usm.serializeHost(this._url.host);\n }\n\n set hostname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n }\n\n get port() {\n if (this._url.port === null) {\n return \"\";\n }\n\n return usm.serializeInteger(this._url.port);\n }\n\n set port(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n if (v === \"\") {\n this._url.port = null;\n } else {\n usm.basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n }\n }\n\n get pathname() {\n if (this._url.cannotBeABaseURL) {\n return this._url.path[0];\n }\n\n if (this._url.path.length === 0) {\n return \"\";\n }\n\n return \"/\" + this._url.path.join(\"/\");\n }\n\n set pathname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n this._url.path = [];\n usm.basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n }\n\n get search() {\n if (this._url.query === null || this._url.query === \"\") {\n return \"\";\n }\n\n return \"?\" + this._url.query;\n }\n\n set search(v) {\n // TODO: query stuff\n\n const url = this._url;\n\n if (v === \"\") {\n url.query = null;\n return;\n }\n\n const input = v[0] === \"?\" ? v.substring(1) : v;\n url.query = \"\";\n usm.basicURLParse(input, { url, stateOverride: \"query\" });\n }\n\n get hash() {\n if (this._url.fragment === null || this._url.fragment === \"\") {\n return \"\";\n }\n\n return \"#\" + this._url.fragment;\n }\n\n set hash(v) {\n if (v === \"\") {\n this._url.fragment = null;\n return;\n }\n\n const input = v[0] === \"#\" ? v.substring(1) : v;\n this._url.fragment = \"\";\n usm.basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n }\n\n toJSON() {\n return this.href;\n }\n};\n","\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\nconst Impl = require(\".//URL-impl.js\");\n\nconst impl = utils.implSymbol;\n\nfunction URL(url) {\n if (!this || this[impl] || !(this instanceof URL)) {\n throw new TypeError(\"Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.\");\n }\n if (arguments.length < 1) {\n throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only \" + arguments.length + \" present.\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 2; ++i) {\n args[i] = arguments[i];\n }\n args[0] = conversions[\"USVString\"](args[0]);\n if (args[1] !== undefined) {\n args[1] = conversions[\"USVString\"](args[1]);\n }\n\n module.exports.setup(this, args);\n}\n\nURL.prototype.toJSON = function toJSON() {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 0; ++i) {\n args[i] = arguments[i];\n }\n return this[impl].toJSON.apply(this[impl], args);\n};\nObject.defineProperty(URL.prototype, \"href\", {\n get() {\n return this[impl].href;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].href = V;\n },\n enumerable: true,\n configurable: true\n});\n\nURL.prototype.toString = function () {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n return this.href;\n};\n\nObject.defineProperty(URL.prototype, \"origin\", {\n get() {\n return this[impl].origin;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"protocol\", {\n get() {\n return this[impl].protocol;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].protocol = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"username\", {\n get() {\n return this[impl].username;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].username = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"password\", {\n get() {\n return this[impl].password;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].password = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"host\", {\n get() {\n return this[impl].host;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].host = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hostname\", {\n get() {\n return this[impl].hostname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hostname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"port\", {\n get() {\n return this[impl].port;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].port = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"pathname\", {\n get() {\n return this[impl].pathname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].pathname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"search\", {\n get() {\n return this[impl].search;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].search = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hash\", {\n get() {\n return this[impl].hash;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hash = V;\n },\n enumerable: true,\n configurable: true\n});\n\n\nmodule.exports = {\n is(obj) {\n return !!obj && obj[impl] instanceof Impl.implementation;\n },\n create(constructorArgs, privateData) {\n let obj = Object.create(URL.prototype);\n this.setup(obj, constructorArgs, privateData);\n return obj;\n },\n setup(obj, constructorArgs, privateData) {\n if (!privateData) privateData = {};\n privateData.wrapper = obj;\n\n obj[impl] = new Impl.implementation(constructorArgs, privateData);\n obj[impl][utils.wrapperSymbol] = obj;\n },\n interface: URL,\n expose: {\n Window: { URL: URL },\n Worker: { URL: URL }\n }\n};\n\n","\"use strict\";\n\nexports.URL = require(\"./URL\").interface;\nexports.serializeURL = require(\"./url-state-machine\").serializeURL;\nexports.serializeURLOrigin = require(\"./url-state-machine\").serializeURLOrigin;\nexports.basicURLParse = require(\"./url-state-machine\").basicURLParse;\nexports.setTheUsername = require(\"./url-state-machine\").setTheUsername;\nexports.setThePassword = require(\"./url-state-machine\").setThePassword;\nexports.serializeHost = require(\"./url-state-machine\").serializeHost;\nexports.serializeInteger = require(\"./url-state-machine\").serializeInteger;\nexports.parseURL = require(\"./url-state-machine\").parseURL;\n","\"use strict\";\r\nconst punycode = require(\"punycode\");\r\nconst tr46 = require(\"tr46\");\r\n\r\nconst specialSchemes = {\r\n ftp: 21,\r\n file: null,\r\n gopher: 70,\r\n http: 80,\r\n https: 443,\r\n ws: 80,\r\n wss: 443\r\n};\r\n\r\nconst failure = Symbol(\"failure\");\r\n\r\nfunction countSymbols(str) {\r\n return punycode.ucs2.decode(str).length;\r\n}\r\n\r\nfunction at(input, idx) {\r\n const c = input[idx];\r\n return isNaN(c) ? undefined : String.fromCodePoint(c);\r\n}\r\n\r\nfunction isASCIIDigit(c) {\r\n return c >= 0x30 && c <= 0x39;\r\n}\r\n\r\nfunction isASCIIAlpha(c) {\r\n return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);\r\n}\r\n\r\nfunction isASCIIAlphanumeric(c) {\r\n return isASCIIAlpha(c) || isASCIIDigit(c);\r\n}\r\n\r\nfunction isASCIIHex(c) {\r\n return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);\r\n}\r\n\r\nfunction isSingleDot(buffer) {\r\n return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\r\n}\r\n\r\nfunction isDoubleDot(buffer) {\r\n buffer = buffer.toLowerCase();\r\n return buffer === \"..\" || buffer === \"%2e.\" || buffer === \".%2e\" || buffer === \"%2e%2e\";\r\n}\r\n\r\nfunction isWindowsDriveLetterCodePoints(cp1, cp2) {\r\n return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);\r\n}\r\n\r\nfunction isWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === \":\" || string[1] === \"|\");\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === \":\";\r\n}\r\n\r\nfunction containsForbiddenHostCodePoint(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|%|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction containsForbiddenHostCodePointExcludingPercent(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction isSpecialScheme(scheme) {\r\n return specialSchemes[scheme] !== undefined;\r\n}\r\n\r\nfunction isSpecial(url) {\r\n return isSpecialScheme(url.scheme);\r\n}\r\n\r\nfunction defaultPort(scheme) {\r\n return specialSchemes[scheme];\r\n}\r\n\r\nfunction percentEncode(c) {\r\n let hex = c.toString(16).toUpperCase();\r\n if (hex.length === 1) {\r\n hex = \"0\" + hex;\r\n }\r\n\r\n return \"%\" + hex;\r\n}\r\n\r\nfunction utf8PercentEncode(c) {\r\n const buf = new Buffer(c);\r\n\r\n let str = \"\";\r\n\r\n for (let i = 0; i < buf.length; ++i) {\r\n str += percentEncode(buf[i]);\r\n }\r\n\r\n return str;\r\n}\r\n\r\nfunction utf8PercentDecode(str) {\r\n const input = new Buffer(str);\r\n const output = [];\r\n for (let i = 0; i < input.length; ++i) {\r\n if (input[i] !== 37) {\r\n output.push(input[i]);\r\n } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {\r\n output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));\r\n i += 2;\r\n } else {\r\n output.push(input[i]);\r\n }\r\n }\r\n return new Buffer(output).toString();\r\n}\r\n\r\nfunction isC0ControlPercentEncode(c) {\r\n return c <= 0x1F || c > 0x7E;\r\n}\r\n\r\nconst extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);\r\nfunction isPathPercentEncode(c) {\r\n return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);\r\n}\r\n\r\nconst extraUserinfoPercentEncodeSet =\r\n new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);\r\nfunction isUserinfoPercentEncode(c) {\r\n return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\r\n}\r\n\r\nfunction percentEncodeChar(c, encodeSetPredicate) {\r\n const cStr = String.fromCodePoint(c);\r\n\r\n if (encodeSetPredicate(c)) {\r\n return utf8PercentEncode(cStr);\r\n }\r\n\r\n return cStr;\r\n}\r\n\r\nfunction parseIPv4Number(input) {\r\n let R = 10;\r\n\r\n if (input.length >= 2 && input.charAt(0) === \"0\" && input.charAt(1).toLowerCase() === \"x\") {\r\n input = input.substring(2);\r\n R = 16;\r\n } else if (input.length >= 2 && input.charAt(0) === \"0\") {\r\n input = input.substring(1);\r\n R = 8;\r\n }\r\n\r\n if (input === \"\") {\r\n return 0;\r\n }\r\n\r\n const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);\r\n if (regex.test(input)) {\r\n return failure;\r\n }\r\n\r\n return parseInt(input, R);\r\n}\r\n\r\nfunction parseIPv4(input) {\r\n const parts = input.split(\".\");\r\n if (parts[parts.length - 1] === \"\") {\r\n if (parts.length > 1) {\r\n parts.pop();\r\n }\r\n }\r\n\r\n if (parts.length > 4) {\r\n return input;\r\n }\r\n\r\n const numbers = [];\r\n for (const part of parts) {\r\n if (part === \"\") {\r\n return input;\r\n }\r\n const n = parseIPv4Number(part);\r\n if (n === failure) {\r\n return input;\r\n }\r\n\r\n numbers.push(n);\r\n }\r\n\r\n for (let i = 0; i < numbers.length - 1; ++i) {\r\n if (numbers[i] > 255) {\r\n return failure;\r\n }\r\n }\r\n if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {\r\n return failure;\r\n }\r\n\r\n let ipv4 = numbers.pop();\r\n let counter = 0;\r\n\r\n for (const n of numbers) {\r\n ipv4 += n * Math.pow(256, 3 - counter);\r\n ++counter;\r\n }\r\n\r\n return ipv4;\r\n}\r\n\r\nfunction serializeIPv4(address) {\r\n let output = \"\";\r\n let n = address;\r\n\r\n for (let i = 1; i <= 4; ++i) {\r\n output = String(n % 256) + output;\r\n if (i !== 4) {\r\n output = \".\" + output;\r\n }\r\n n = Math.floor(n / 256);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseIPv6(input) {\r\n const address = [0, 0, 0, 0, 0, 0, 0, 0];\r\n let pieceIndex = 0;\r\n let compress = null;\r\n let pointer = 0;\r\n\r\n input = punycode.ucs2.decode(input);\r\n\r\n if (input[pointer] === 58) {\r\n if (input[pointer + 1] !== 58) {\r\n return failure;\r\n }\r\n\r\n pointer += 2;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n }\r\n\r\n while (pointer < input.length) {\r\n if (pieceIndex === 8) {\r\n return failure;\r\n }\r\n\r\n if (input[pointer] === 58) {\r\n if (compress !== null) {\r\n return failure;\r\n }\r\n ++pointer;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n continue;\r\n }\r\n\r\n let value = 0;\r\n let length = 0;\r\n\r\n while (length < 4 && isASCIIHex(input[pointer])) {\r\n value = value * 0x10 + parseInt(at(input, pointer), 16);\r\n ++pointer;\r\n ++length;\r\n }\r\n\r\n if (input[pointer] === 46) {\r\n if (length === 0) {\r\n return failure;\r\n }\r\n\r\n pointer -= length;\r\n\r\n if (pieceIndex > 6) {\r\n return failure;\r\n }\r\n\r\n let numbersSeen = 0;\r\n\r\n while (input[pointer] !== undefined) {\r\n let ipv4Piece = null;\r\n\r\n if (numbersSeen > 0) {\r\n if (input[pointer] === 46 && numbersSeen < 4) {\r\n ++pointer;\r\n } else {\r\n return failure;\r\n }\r\n }\r\n\r\n if (!isASCIIDigit(input[pointer])) {\r\n return failure;\r\n }\r\n\r\n while (isASCIIDigit(input[pointer])) {\r\n const number = parseInt(at(input, pointer));\r\n if (ipv4Piece === null) {\r\n ipv4Piece = number;\r\n } else if (ipv4Piece === 0) {\r\n return failure;\r\n } else {\r\n ipv4Piece = ipv4Piece * 10 + number;\r\n }\r\n if (ipv4Piece > 255) {\r\n return failure;\r\n }\r\n ++pointer;\r\n }\r\n\r\n address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;\r\n\r\n ++numbersSeen;\r\n\r\n if (numbersSeen === 2 || numbersSeen === 4) {\r\n ++pieceIndex;\r\n }\r\n }\r\n\r\n if (numbersSeen !== 4) {\r\n return failure;\r\n }\r\n\r\n break;\r\n } else if (input[pointer] === 58) {\r\n ++pointer;\r\n if (input[pointer] === undefined) {\r\n return failure;\r\n }\r\n } else if (input[pointer] !== undefined) {\r\n return failure;\r\n }\r\n\r\n address[pieceIndex] = value;\r\n ++pieceIndex;\r\n }\r\n\r\n if (compress !== null) {\r\n let swaps = pieceIndex - compress;\r\n pieceIndex = 7;\r\n while (pieceIndex !== 0 && swaps > 0) {\r\n const temp = address[compress + swaps - 1];\r\n address[compress + swaps - 1] = address[pieceIndex];\r\n address[pieceIndex] = temp;\r\n --pieceIndex;\r\n --swaps;\r\n }\r\n } else if (compress === null && pieceIndex !== 8) {\r\n return failure;\r\n }\r\n\r\n return address;\r\n}\r\n\r\nfunction serializeIPv6(address) {\r\n let output = \"\";\r\n const seqResult = findLongestZeroSequence(address);\r\n const compress = seqResult.idx;\r\n let ignore0 = false;\r\n\r\n for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\r\n if (ignore0 && address[pieceIndex] === 0) {\r\n continue;\r\n } else if (ignore0) {\r\n ignore0 = false;\r\n }\r\n\r\n if (compress === pieceIndex) {\r\n const separator = pieceIndex === 0 ? \"::\" : \":\";\r\n output += separator;\r\n ignore0 = true;\r\n continue;\r\n }\r\n\r\n output += address[pieceIndex].toString(16);\r\n\r\n if (pieceIndex !== 7) {\r\n output += \":\";\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseHost(input, isSpecialArg) {\r\n if (input[0] === \"[\") {\r\n if (input[input.length - 1] !== \"]\") {\r\n return failure;\r\n }\r\n\r\n return parseIPv6(input.substring(1, input.length - 1));\r\n }\r\n\r\n if (!isSpecialArg) {\r\n return parseOpaqueHost(input);\r\n }\r\n\r\n const domain = utf8PercentDecode(input);\r\n const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);\r\n if (asciiDomain === null) {\r\n return failure;\r\n }\r\n\r\n if (containsForbiddenHostCodePoint(asciiDomain)) {\r\n return failure;\r\n }\r\n\r\n const ipv4Host = parseIPv4(asciiDomain);\r\n if (typeof ipv4Host === \"number\" || ipv4Host === failure) {\r\n return ipv4Host;\r\n }\r\n\r\n return asciiDomain;\r\n}\r\n\r\nfunction parseOpaqueHost(input) {\r\n if (containsForbiddenHostCodePointExcludingPercent(input)) {\r\n return failure;\r\n }\r\n\r\n let output = \"\";\r\n const decoded = punycode.ucs2.decode(input);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);\r\n }\r\n return output;\r\n}\r\n\r\nfunction findLongestZeroSequence(arr) {\r\n let maxIdx = null;\r\n let maxLen = 1; // only find elements > 1\r\n let currStart = null;\r\n let currLen = 0;\r\n\r\n for (let i = 0; i < arr.length; ++i) {\r\n if (arr[i] !== 0) {\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n currStart = null;\r\n currLen = 0;\r\n } else {\r\n if (currStart === null) {\r\n currStart = i;\r\n }\r\n ++currLen;\r\n }\r\n }\r\n\r\n // if trailing zeros\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n return {\r\n idx: maxIdx,\r\n len: maxLen\r\n };\r\n}\r\n\r\nfunction serializeHost(host) {\r\n if (typeof host === \"number\") {\r\n return serializeIPv4(host);\r\n }\r\n\r\n // IPv6 serializer\r\n if (host instanceof Array) {\r\n return \"[\" + serializeIPv6(host) + \"]\";\r\n }\r\n\r\n return host;\r\n}\r\n\r\nfunction trimControlChars(url) {\r\n return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/g, \"\");\r\n}\r\n\r\nfunction trimTabAndNewline(url) {\r\n return url.replace(/\\u0009|\\u000A|\\u000D/g, \"\");\r\n}\r\n\r\nfunction shortenPath(url) {\r\n const path = url.path;\r\n if (path.length === 0) {\r\n return;\r\n }\r\n if (url.scheme === \"file\" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {\r\n return;\r\n }\r\n\r\n path.pop();\r\n}\r\n\r\nfunction includesCredentials(url) {\r\n return url.username !== \"\" || url.password !== \"\";\r\n}\r\n\r\nfunction cannotHaveAUsernamePasswordPort(url) {\r\n return url.host === null || url.host === \"\" || url.cannotBeABaseURL || url.scheme === \"file\";\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetter(string) {\r\n return /^[A-Za-z]:$/.test(string);\r\n}\r\n\r\nfunction URLStateMachine(input, base, encodingOverride, url, stateOverride) {\r\n this.pointer = 0;\r\n this.input = input;\r\n this.base = base || null;\r\n this.encodingOverride = encodingOverride || \"utf-8\";\r\n this.stateOverride = stateOverride;\r\n this.url = url;\r\n this.failure = false;\r\n this.parseError = false;\r\n\r\n if (!this.url) {\r\n this.url = {\r\n scheme: \"\",\r\n username: \"\",\r\n password: \"\",\r\n host: null,\r\n port: null,\r\n path: [],\r\n query: null,\r\n fragment: null,\r\n\r\n cannotBeABaseURL: false\r\n };\r\n\r\n const res = trimControlChars(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n }\r\n\r\n const res = trimTabAndNewline(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n\r\n this.state = stateOverride || \"scheme start\";\r\n\r\n this.buffer = \"\";\r\n this.atFlag = false;\r\n this.arrFlag = false;\r\n this.passwordTokenSeenFlag = false;\r\n\r\n this.input = punycode.ucs2.decode(this.input);\r\n\r\n for (; this.pointer <= this.input.length; ++this.pointer) {\r\n const c = this.input[this.pointer];\r\n const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\r\n\r\n // exec state machine\r\n const ret = this[\"parse \" + this.state](c, cStr);\r\n if (!ret) {\r\n break; // terminate algorithm\r\n } else if (ret === failure) {\r\n this.failure = true;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nURLStateMachine.prototype[\"parse scheme start\"] = function parseSchemeStart(c, cStr) {\r\n if (isASCIIAlpha(c)) {\r\n this.buffer += cStr.toLowerCase();\r\n this.state = \"scheme\";\r\n } else if (!this.stateOverride) {\r\n this.state = \"no scheme\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse scheme\"] = function parseScheme(c, cStr) {\r\n if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {\r\n this.buffer += cStr.toLowerCase();\r\n } else if (c === 58) {\r\n if (this.stateOverride) {\r\n if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === \"file\") {\r\n return false;\r\n }\r\n\r\n if (this.url.scheme === \"file\" && (this.url.host === \"\" || this.url.host === null)) {\r\n return false;\r\n }\r\n }\r\n this.url.scheme = this.buffer;\r\n this.buffer = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n if (this.url.scheme === \"file\") {\r\n if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file\";\r\n } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {\r\n this.state = \"special relative or authority\";\r\n } else if (isSpecial(this.url)) {\r\n this.state = \"special authority slashes\";\r\n } else if (this.input[this.pointer + 1] === 47) {\r\n this.state = \"path or authority\";\r\n ++this.pointer;\r\n } else {\r\n this.url.cannotBeABaseURL = true;\r\n this.url.path.push(\"\");\r\n this.state = \"cannot-be-a-base-URL path\";\r\n }\r\n } else if (!this.stateOverride) {\r\n this.buffer = \"\";\r\n this.state = \"no scheme\";\r\n this.pointer = -1;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse no scheme\"] = function parseNoScheme(c) {\r\n if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {\r\n return failure;\r\n } else if (this.base.cannotBeABaseURL && c === 35) {\r\n this.url.scheme = this.base.scheme;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.url.cannotBeABaseURL = true;\r\n this.state = \"fragment\";\r\n } else if (this.base.scheme === \"file\") {\r\n this.state = \"file\";\r\n --this.pointer;\r\n } else {\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special relative or authority\"] = function parseSpecialRelativeOrAuthority(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path or authority\"] = function parsePathOrAuthority(c) {\r\n if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative\"] = function parseRelative(c) {\r\n this.url.scheme = this.base.scheme;\r\n if (isNaN(c)) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 47) {\r\n this.state = \"relative slash\";\r\n } else if (c === 63) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n this.state = \"relative slash\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice(0, this.base.path.length - 1);\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative slash\"] = function parseRelativeSlash(c) {\r\n if (isSpecial(this.url) && (c === 47 || c === 92)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"special authority ignore slashes\";\r\n } else if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority slashes\"] = function parseSpecialAuthoritySlashes(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"special authority ignore slashes\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority ignore slashes\"] = function parseSpecialAuthorityIgnoreSlashes(c) {\r\n if (c !== 47 && c !== 92) {\r\n this.state = \"authority\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse authority\"] = function parseAuthority(c, cStr) {\r\n if (c === 64) {\r\n this.parseError = true;\r\n if (this.atFlag) {\r\n this.buffer = \"%40\" + this.buffer;\r\n }\r\n this.atFlag = true;\r\n\r\n // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\r\n const len = countSymbols(this.buffer);\r\n for (let pointer = 0; pointer < len; ++pointer) {\r\n const codePoint = this.buffer.codePointAt(pointer);\r\n\r\n if (codePoint === 58 && !this.passwordTokenSeenFlag) {\r\n this.passwordTokenSeenFlag = true;\r\n continue;\r\n }\r\n const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);\r\n if (this.passwordTokenSeenFlag) {\r\n this.url.password += encodedCodePoints;\r\n } else {\r\n this.url.username += encodedCodePoints;\r\n }\r\n }\r\n this.buffer = \"\";\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n if (this.atFlag && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.pointer -= countSymbols(this.buffer) + 1;\r\n this.buffer = \"\";\r\n this.state = \"host\";\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse hostname\"] =\r\nURLStateMachine.prototype[\"parse host\"] = function parseHostName(c, cStr) {\r\n if (this.stateOverride && this.url.scheme === \"file\") {\r\n --this.pointer;\r\n this.state = \"file host\";\r\n } else if (c === 58 && !this.arrFlag) {\r\n if (this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"port\";\r\n if (this.stateOverride === \"hostname\") {\r\n return false;\r\n }\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n --this.pointer;\r\n if (isSpecial(this.url) && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n } else if (this.stateOverride && this.buffer === \"\" &&\r\n (includesCredentials(this.url) || this.url.port !== null)) {\r\n this.parseError = true;\r\n return false;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n } else {\r\n if (c === 91) {\r\n this.arrFlag = true;\r\n } else if (c === 93) {\r\n this.arrFlag = false;\r\n }\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse port\"] = function parsePort(c, cStr) {\r\n if (isASCIIDigit(c)) {\r\n this.buffer += cStr;\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92) ||\r\n this.stateOverride) {\r\n if (this.buffer !== \"\") {\r\n const port = parseInt(this.buffer);\r\n if (port > Math.pow(2, 16) - 1) {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.url.port = port === defaultPort(this.url.scheme) ? null : port;\r\n this.buffer = \"\";\r\n }\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);\r\n\r\nURLStateMachine.prototype[\"parse file\"] = function parseFile(c) {\r\n this.url.scheme = \"file\";\r\n\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file slash\";\r\n } else if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNaN(c)) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 63) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points\r\n !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||\r\n (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points\r\n !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n shortenPath(this.url);\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file slash\"] = function parseFileSlash(c) {\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file host\";\r\n } else {\r\n if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {\r\n this.url.path.push(this.base.path[0]);\r\n } else {\r\n this.url.host = this.base.host;\r\n }\r\n }\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file host\"] = function parseFileHost(c, cStr) {\r\n if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {\r\n --this.pointer;\r\n if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\r\n this.parseError = true;\r\n this.state = \"path\";\r\n } else if (this.buffer === \"\") {\r\n this.url.host = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n } else {\r\n let host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n if (host === \"localhost\") {\r\n host = \"\";\r\n }\r\n this.url.host = host;\r\n\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n }\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path start\"] = function parsePathStart(c) {\r\n if (isSpecial(this.url)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"path\";\r\n\r\n if (c !== 47 && c !== 92) {\r\n --this.pointer;\r\n }\r\n } else if (!this.stateOverride && c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (!this.stateOverride && c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (c !== undefined) {\r\n this.state = \"path\";\r\n if (c !== 47) {\r\n --this.pointer;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path\"] = function parsePath(c) {\r\n if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||\r\n (!this.stateOverride && (c === 63 || c === 35))) {\r\n if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n }\r\n\r\n if (isDoubleDot(this.buffer)) {\r\n shortenPath(this.url);\r\n if (c !== 47 && !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n }\r\n } else if (isSingleDot(this.buffer) && c !== 47 &&\r\n !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n } else if (!isSingleDot(this.buffer)) {\r\n if (this.url.scheme === \"file\" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {\r\n if (this.url.host !== \"\" && this.url.host !== null) {\r\n this.parseError = true;\r\n this.url.host = \"\";\r\n }\r\n this.buffer = this.buffer[0] + \":\";\r\n }\r\n this.url.path.push(this.buffer);\r\n }\r\n this.buffer = \"\";\r\n if (this.url.scheme === \"file\" && (c === undefined || c === 63 || c === 35)) {\r\n while (this.url.path.length > 1 && this.url.path[0] === \"\") {\r\n this.parseError = true;\r\n this.url.path.shift();\r\n }\r\n }\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n }\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += percentEncodeChar(c, isPathPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse cannot-be-a-base-URL path\"] = function parseCannotBeABaseURLPath(c) {\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n // TODO: Add: not a URL code point\r\n if (!isNaN(c) && c !== 37) {\r\n this.parseError = true;\r\n }\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n if (!isNaN(c)) {\r\n this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse query\"] = function parseQuery(c, cStr) {\r\n if (isNaN(c) || (!this.stateOverride && c === 35)) {\r\n if (!isSpecial(this.url) || this.url.scheme === \"ws\" || this.url.scheme === \"wss\") {\r\n this.encodingOverride = \"utf-8\";\r\n }\r\n\r\n const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead\r\n for (let i = 0; i < buffer.length; ++i) {\r\n if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||\r\n buffer[i] === 0x3C || buffer[i] === 0x3E) {\r\n this.url.query += percentEncode(buffer[i]);\r\n } else {\r\n this.url.query += String.fromCodePoint(buffer[i]);\r\n }\r\n }\r\n\r\n this.buffer = \"\";\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse fragment\"] = function parseFragment(c) {\r\n if (isNaN(c)) { // do nothing\r\n } else if (c === 0x0) {\r\n this.parseError = true;\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nfunction serializeURL(url, excludeFragment) {\r\n let output = url.scheme + \":\";\r\n if (url.host !== null) {\r\n output += \"//\";\r\n\r\n if (url.username !== \"\" || url.password !== \"\") {\r\n output += url.username;\r\n if (url.password !== \"\") {\r\n output += \":\" + url.password;\r\n }\r\n output += \"@\";\r\n }\r\n\r\n output += serializeHost(url.host);\r\n\r\n if (url.port !== null) {\r\n output += \":\" + url.port;\r\n }\r\n } else if (url.host === null && url.scheme === \"file\") {\r\n output += \"//\";\r\n }\r\n\r\n if (url.cannotBeABaseURL) {\r\n output += url.path[0];\r\n } else {\r\n for (const string of url.path) {\r\n output += \"/\" + string;\r\n }\r\n }\r\n\r\n if (url.query !== null) {\r\n output += \"?\" + url.query;\r\n }\r\n\r\n if (!excludeFragment && url.fragment !== null) {\r\n output += \"#\" + url.fragment;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction serializeOrigin(tuple) {\r\n let result = tuple.scheme + \"://\";\r\n result += serializeHost(tuple.host);\r\n\r\n if (tuple.port !== null) {\r\n result += \":\" + tuple.port;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nmodule.exports.serializeURL = serializeURL;\r\n\r\nmodule.exports.serializeURLOrigin = function (url) {\r\n // https://url.spec.whatwg.org/#concept-url-origin\r\n switch (url.scheme) {\r\n case \"blob\":\r\n try {\r\n return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));\r\n } catch (e) {\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n case \"ftp\":\r\n case \"gopher\":\r\n case \"http\":\r\n case \"https\":\r\n case \"ws\":\r\n case \"wss\":\r\n return serializeOrigin({\r\n scheme: url.scheme,\r\n host: url.host,\r\n port: url.port\r\n });\r\n case \"file\":\r\n // spec says \"exercise to the reader\", chrome says \"file://\"\r\n return \"file://\";\r\n default:\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n};\r\n\r\nmodule.exports.basicURLParse = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);\r\n if (usm.failure) {\r\n return \"failure\";\r\n }\r\n\r\n return usm.url;\r\n};\r\n\r\nmodule.exports.setTheUsername = function (url, username) {\r\n url.username = \"\";\r\n const decoded = punycode.ucs2.decode(username);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.setThePassword = function (url, password) {\r\n url.password = \"\";\r\n const decoded = punycode.ucs2.decode(password);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.serializeHost = serializeHost;\r\n\r\nmodule.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;\r\n\r\nmodule.exports.serializeInteger = function (integer) {\r\n return String(integer);\r\n};\r\n\r\nmodule.exports.parseURL = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n // We don't handle blobs, so this just delegates:\r\n return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });\r\n};\r\n","\"use strict\";\n\nmodule.exports.mixin = function mixin(target, source) {\n const keys = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keys.length; ++i) {\n Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));\n }\n};\n\nmodule.exports.wrapperSymbol = Symbol(\"wrapper\");\nmodule.exports.implSymbol = Symbol(\"impl\");\n\nmodule.exports.wrapperForImpl = function (impl) {\n return impl[module.exports.wrapperSymbol];\n};\n\nmodule.exports.implForWrapper = function (wrapper) {\n return wrapper[module.exports.implSymbol];\n};\n\n","'use strict';\nconst os = require('os');\nconst execa = require('execa');\n\n// Reference: https://www.gaijin.at/en/lstwinver.php\nconst names = new Map([\n\t['10.0', '10'],\n\t['6.3', '8.1'],\n\t['6.2', '8'],\n\t['6.1', '7'],\n\t['6.0', 'Vista'],\n\t['5.2', 'Server 2003'],\n\t['5.1', 'XP'],\n\t['5.0', '2000'],\n\t['4.9', 'ME'],\n\t['4.1', '98'],\n\t['4.0', '95']\n]);\n\nconst windowsRelease = release => {\n\tconst version = /\\d+\\.\\d/.exec(release || os.release());\n\n\tif (release && !version) {\n\t\tthrow new Error('`release` argument doesn\\'t match `n.n`');\n\t}\n\n\tconst ver = (version || [])[0];\n\n\t// Server 2008, 2012, 2016, and 2019 versions are ambiguous with desktop versions and must be detected at runtime.\n\t// If `release` is omitted or we're on a Windows system, and the version number is an ambiguous version\n\t// then use `wmic` to get the OS caption: https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx\n\t// If `wmic` is obsoloete (later versions of Windows 10), use PowerShell instead.\n\t// If the resulting caption contains the year 2008, 2012, 2016 or 2019, it is a server version, so return a server OS name.\n\tif ((!release || release === os.release()) && ['6.1', '6.2', '6.3', '10.0'].includes(ver)) {\n\t\tlet stdout;\n\t\ttry {\n\t\t\tstdout = execa.sync('wmic', ['os', 'get', 'Caption']).stdout || '';\n\t\t} catch (_) {\n\t\t\tstdout = execa.sync('powershell', ['(Get-CimInstance -ClassName Win32_OperatingSystem).caption']).stdout || '';\n\t\t}\n\n\t\tconst year = (stdout.match(/2008|2012|2016|2019/) || [])[0];\n\n\t\tif (year) {\n\t\t\treturn `Server ${year}`;\n\t\t}\n\t}\n\n\treturn names.get(ver);\n};\n\nmodule.exports = windowsRelease;\n","'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n // Hook into child process \"exit\" event to emit an error if the command\n // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n enoent.hookChildProcess(spawned, parsed);\n\n return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n","'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n code: 'ENOENT',\n errno: 'ENOENT',\n syscall: `${syscall} ${original.command}`,\n path: original.command,\n spawnargs: original.args,\n });\n}\n\nfunction hookChildProcess(cp, parsed) {\n if (!isWin) {\n return;\n }\n\n const originalEmit = cp.emit;\n\n cp.emit = function (name, arg1) {\n // If emitting \"exit\" event and exit code is 1, we need to check if\n // the command exists and emit an \"error\" instead\n // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n if (name === 'exit') {\n const err = verifyENOENT(arg1, parsed, 'spawn');\n\n if (err) {\n return originalEmit.call(cp, 'error', err);\n }\n }\n\n return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n };\n}\n\nfunction verifyENOENT(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n\n return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n\n return null;\n}\n\nmodule.exports = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n","'use strict';\n\nconst path = require('path');\nconst niceTry = require('nice-try');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\nconst semver = require('semver');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\n// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0\nconst supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false;\n\nfunction detectShebang(parsed) {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n\n if (shebang) {\n parsed.args.unshift(parsed.file);\n parsed.command = shebang;\n\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n if (!isWin) {\n return parsed;\n }\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile);\n\n // If a shell is required, use cmd.exe and take care of escaping everything correctly\n // Note that `forceShell` is an hidden option used only in tests\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n // we need to double escape them\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n // This is necessary otherwise it will always fail with ENOENT in those cases\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escape.command(parsed.command);\n parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n }\n\n return parsed;\n}\n\nfunction parseShell(parsed) {\n // If node supports the shell option, there's no need to mimic its behavior\n if (supportsShellOption) {\n return parsed;\n }\n\n // Mimic node shell option\n // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWin) {\n parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n } else {\n if (typeof parsed.options.shell === 'string') {\n parsed.command = parsed.options.shell;\n } else if (process.platform === 'android') {\n parsed.command = '/system/bin/sh';\n } else {\n parsed.command = '/bin/sh';\n }\n\n parsed.args = ['-c', shellCommand];\n }\n\n return parsed;\n}\n\nfunction parse(command, args, options) {\n // Normalize arguments, similar to nodejs\n if (args && !Array.isArray(args)) {\n options = args;\n args = null;\n }\n\n args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n options = Object.assign({}, options); // Clone object to avoid changing the original\n\n // Build our parsed object\n const parsed = {\n command,\n args,\n options,\n file: undefined,\n original: {\n command,\n args,\n },\n };\n\n // Delegate further parsing to shell or non-shell\n return options.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n","'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n // Convert to string\n arg = `${arg}`;\n\n // Algorithm below is based on https://qntm.org/cmd\n\n // Sequence of backslashes followed by a double quote:\n // double up all the backslashes and escape the double quote\n arg = arg.replace(/(\\\\*)\"/g, '$1$1\\\\\"');\n\n // Sequence of backslashes followed by the end of the string\n // (which will become a double quote later):\n // double up all the backslashes\n arg = arg.replace(/(\\\\*)$/, '$1$1');\n\n // All other backslashes occur literally\n\n // Quote the whole thing:\n arg = `\"${arg}\"`;\n\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n // Double escape meta chars if necessary\n if (doubleEscapeMetaChars) {\n arg = arg.replace(metaCharsRegExp, '^$1');\n }\n\n return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n","'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n // Read the first 150 bytes from the file\n const size = 150;\n let buffer;\n\n if (Buffer.alloc) {\n // Node.js v4.5+ / v5.10+\n buffer = Buffer.alloc(size);\n } else {\n // Old Node.js API\n buffer = new Buffer(size);\n buffer.fill(0); // zero-fill\n }\n\n let fd;\n\n try {\n fd = fs.openSync(command, 'r');\n fs.readSync(fd, buffer, 0, size, 0);\n fs.closeSync(fd);\n } catch (e) { /* Empty */ }\n\n // Attempt to extract shebang (null is returned if not a shebang)\n return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n","'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst pathKey = require('path-key')();\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n const cwd = process.cwd();\n const hasCustomCwd = parsed.options.cwd != null;\n\n // If a custom `cwd` was specified, we need to change the process cwd\n // because `which` will do stat calls but does not support a custom cwd\n if (hasCustomCwd) {\n try {\n process.chdir(parsed.options.cwd);\n } catch (err) {\n /* Empty */\n }\n }\n\n let resolved;\n\n try {\n resolved = which.sync(parsed.command, {\n path: (parsed.options.env || process.env)[pathKey],\n pathExt: withoutPathExt ? path.delimiter : undefined,\n });\n } catch (e) {\n /* Empty */\n } finally {\n process.chdir(cwd);\n }\n\n // If we successfully resolved, ensure that an absolute path is returned\n // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n }\n\n return resolved;\n}\n\nfunction resolveCommand(parsed) {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n","'use strict';\nconst path = require('path');\nconst childProcess = require('child_process');\nconst crossSpawn = require('cross-spawn');\nconst stripEof = require('strip-eof');\nconst npmRunPath = require('npm-run-path');\nconst isStream = require('is-stream');\nconst _getStream = require('get-stream');\nconst pFinally = require('p-finally');\nconst onExit = require('signal-exit');\nconst errname = require('./lib/errname');\nconst stdio = require('./lib/stdio');\n\nconst TEN_MEGABYTES = 1000 * 1000 * 10;\n\nfunction handleArgs(cmd, args, opts) {\n\tlet parsed;\n\n\topts = Object.assign({\n\t\textendEnv: true,\n\t\tenv: {}\n\t}, opts);\n\n\tif (opts.extendEnv) {\n\t\topts.env = Object.assign({}, process.env, opts.env);\n\t}\n\n\tif (opts.__winShell === true) {\n\t\tdelete opts.__winShell;\n\t\tparsed = {\n\t\t\tcommand: cmd,\n\t\t\targs,\n\t\t\toptions: opts,\n\t\t\tfile: cmd,\n\t\t\toriginal: {\n\t\t\t\tcmd,\n\t\t\t\targs\n\t\t\t}\n\t\t};\n\t} else {\n\t\tparsed = crossSpawn._parse(cmd, args, opts);\n\t}\n\n\topts = Object.assign({\n\t\tmaxBuffer: TEN_MEGABYTES,\n\t\tbuffer: true,\n\t\tstripEof: true,\n\t\tpreferLocal: true,\n\t\tlocalDir: parsed.options.cwd || process.cwd(),\n\t\tencoding: 'utf8',\n\t\treject: true,\n\t\tcleanup: true\n\t}, parsed.options);\n\n\topts.stdio = stdio(opts);\n\n\tif (opts.preferLocal) {\n\t\topts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir}));\n\t}\n\n\tif (opts.detached) {\n\t\t// #115\n\t\topts.cleanup = false;\n\t}\n\n\tif (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') {\n\t\t// #116\n\t\tparsed.args.unshift('/q');\n\t}\n\n\treturn {\n\t\tcmd: parsed.command,\n\t\targs: parsed.args,\n\t\topts,\n\t\tparsed\n\t};\n}\n\nfunction handleInput(spawned, input) {\n\tif (input === null || input === undefined) {\n\t\treturn;\n\t}\n\n\tif (isStream(input)) {\n\t\tinput.pipe(spawned.stdin);\n\t} else {\n\t\tspawned.stdin.end(input);\n\t}\n}\n\nfunction handleOutput(opts, val) {\n\tif (val && opts.stripEof) {\n\t\tval = stripEof(val);\n\t}\n\n\treturn val;\n}\n\nfunction handleShell(fn, cmd, opts) {\n\tlet file = '/bin/sh';\n\tlet args = ['-c', cmd];\n\n\topts = Object.assign({}, opts);\n\n\tif (process.platform === 'win32') {\n\t\topts.__winShell = true;\n\t\tfile = process.env.comspec || 'cmd.exe';\n\t\targs = ['/s', '/c', `\"${cmd}\"`];\n\t\topts.windowsVerbatimArguments = true;\n\t}\n\n\tif (opts.shell) {\n\t\tfile = opts.shell;\n\t\tdelete opts.shell;\n\t}\n\n\treturn fn(file, args, opts);\n}\n\nfunction getStream(process, stream, {encoding, buffer, maxBuffer}) {\n\tif (!process[stream]) {\n\t\treturn null;\n\t}\n\n\tlet ret;\n\n\tif (!buffer) {\n\t\t// TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10\n\t\tret = new Promise((resolve, reject) => {\n\t\t\tprocess[stream]\n\t\t\t\t.once('end', resolve)\n\t\t\t\t.once('error', reject);\n\t\t});\n\t} else if (encoding) {\n\t\tret = _getStream(process[stream], {\n\t\t\tencoding,\n\t\t\tmaxBuffer\n\t\t});\n\t} else {\n\t\tret = _getStream.buffer(process[stream], {maxBuffer});\n\t}\n\n\treturn ret.catch(err => {\n\t\terr.stream = stream;\n\t\terr.message = `${stream} ${err.message}`;\n\t\tthrow err;\n\t});\n}\n\nfunction makeError(result, options) {\n\tconst {stdout, stderr} = result;\n\n\tlet err = result.error;\n\tconst {code, signal} = result;\n\n\tconst {parsed, joinedCmd} = options;\n\tconst timedOut = options.timedOut || false;\n\n\tif (!err) {\n\t\tlet output = '';\n\n\t\tif (Array.isArray(parsed.opts.stdio)) {\n\t\t\tif (parsed.opts.stdio[2] !== 'inherit') {\n\t\t\t\toutput += output.length > 0 ? stderr : `\\n${stderr}`;\n\t\t\t}\n\n\t\t\tif (parsed.opts.stdio[1] !== 'inherit') {\n\t\t\t\toutput += `\\n${stdout}`;\n\t\t\t}\n\t\t} else if (parsed.opts.stdio !== 'inherit') {\n\t\t\toutput = `\\n${stderr}${stdout}`;\n\t\t}\n\n\t\terr = new Error(`Command failed: ${joinedCmd}${output}`);\n\t\terr.code = code < 0 ? errname(code) : code;\n\t}\n\n\terr.stdout = stdout;\n\terr.stderr = stderr;\n\terr.failed = true;\n\terr.signal = signal || null;\n\terr.cmd = joinedCmd;\n\terr.timedOut = timedOut;\n\n\treturn err;\n}\n\nfunction joinCmd(cmd, args) {\n\tlet joinedCmd = cmd;\n\n\tif (Array.isArray(args) && args.length > 0) {\n\t\tjoinedCmd += ' ' + args.join(' ');\n\t}\n\n\treturn joinedCmd;\n}\n\nmodule.exports = (cmd, args, opts) => {\n\tconst parsed = handleArgs(cmd, args, opts);\n\tconst {encoding, buffer, maxBuffer} = parsed.opts;\n\tconst joinedCmd = joinCmd(cmd, args);\n\n\tlet spawned;\n\ttry {\n\t\tspawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts);\n\t} catch (err) {\n\t\treturn Promise.reject(err);\n\t}\n\n\tlet removeExitHandler;\n\tif (parsed.opts.cleanup) {\n\t\tremoveExitHandler = onExit(() => {\n\t\t\tspawned.kill();\n\t\t});\n\t}\n\n\tlet timeoutId = null;\n\tlet timedOut = false;\n\n\tconst cleanup = () => {\n\t\tif (timeoutId) {\n\t\t\tclearTimeout(timeoutId);\n\t\t\ttimeoutId = null;\n\t\t}\n\n\t\tif (removeExitHandler) {\n\t\t\tremoveExitHandler();\n\t\t}\n\t};\n\n\tif (parsed.opts.timeout > 0) {\n\t\ttimeoutId = setTimeout(() => {\n\t\t\ttimeoutId = null;\n\t\t\ttimedOut = true;\n\t\t\tspawned.kill(parsed.opts.killSignal);\n\t\t}, parsed.opts.timeout);\n\t}\n\n\tconst processDone = new Promise(resolve => {\n\t\tspawned.on('exit', (code, signal) => {\n\t\t\tcleanup();\n\t\t\tresolve({code, signal});\n\t\t});\n\n\t\tspawned.on('error', err => {\n\t\t\tcleanup();\n\t\t\tresolve({error: err});\n\t\t});\n\n\t\tif (spawned.stdin) {\n\t\t\tspawned.stdin.on('error', err => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve({error: err});\n\t\t\t});\n\t\t}\n\t});\n\n\tfunction destroy() {\n\t\tif (spawned.stdout) {\n\t\t\tspawned.stdout.destroy();\n\t\t}\n\n\t\tif (spawned.stderr) {\n\t\t\tspawned.stderr.destroy();\n\t\t}\n\t}\n\n\tconst handlePromise = () => pFinally(Promise.all([\n\t\tprocessDone,\n\t\tgetStream(spawned, 'stdout', {encoding, buffer, maxBuffer}),\n\t\tgetStream(spawned, 'stderr', {encoding, buffer, maxBuffer})\n\t]).then(arr => {\n\t\tconst result = arr[0];\n\t\tresult.stdout = arr[1];\n\t\tresult.stderr = arr[2];\n\n\t\tif (result.error || result.code !== 0 || result.signal !== null) {\n\t\t\tconst err = makeError(result, {\n\t\t\t\tjoinedCmd,\n\t\t\t\tparsed,\n\t\t\t\ttimedOut\n\t\t\t});\n\n\t\t\t// TODO: missing some timeout logic for killed\n\t\t\t// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203\n\t\t\t// err.killed = spawned.killed || killed;\n\t\t\terr.killed = err.killed || spawned.killed;\n\n\t\t\tif (!parsed.opts.reject) {\n\t\t\t\treturn err;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\n\t\treturn {\n\t\t\tstdout: handleOutput(parsed.opts, result.stdout),\n\t\t\tstderr: handleOutput(parsed.opts, result.stderr),\n\t\t\tcode: 0,\n\t\t\tfailed: false,\n\t\t\tkilled: false,\n\t\t\tsignal: null,\n\t\t\tcmd: joinedCmd,\n\t\t\ttimedOut: false\n\t\t};\n\t}), destroy);\n\n\tcrossSpawn._enoent.hookChildProcess(spawned, parsed.parsed);\n\n\thandleInput(spawned, parsed.opts.input);\n\n\tspawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected);\n\tspawned.catch = onrejected => handlePromise().catch(onrejected);\n\n\treturn spawned;\n};\n\n// TODO: set `stderr: 'ignore'` when that option is implemented\nmodule.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout);\n\n// TODO: set `stdout: 'ignore'` when that option is implemented\nmodule.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr);\n\nmodule.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);\n\nmodule.exports.sync = (cmd, args, opts) => {\n\tconst parsed = handleArgs(cmd, args, opts);\n\tconst joinedCmd = joinCmd(cmd, args);\n\n\tif (isStream(parsed.opts.input)) {\n\t\tthrow new TypeError('The `input` option cannot be a stream in sync mode');\n\t}\n\n\tconst result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);\n\tresult.code = result.status;\n\n\tif (result.error || result.status !== 0 || result.signal !== null) {\n\t\tconst err = makeError(result, {\n\t\t\tjoinedCmd,\n\t\t\tparsed\n\t\t});\n\n\t\tif (!parsed.opts.reject) {\n\t\t\treturn err;\n\t\t}\n\n\t\tthrow err;\n\t}\n\n\treturn {\n\t\tstdout: handleOutput(parsed.opts, result.stdout),\n\t\tstderr: handleOutput(parsed.opts, result.stderr),\n\t\tcode: 0,\n\t\tfailed: false,\n\t\tsignal: null,\n\t\tcmd: joinedCmd,\n\t\ttimedOut: false\n\t};\n};\n\nmodule.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);\n","'use strict';\n// Older verions of Node.js might not have `util.getSystemErrorName()`.\n// In that case, fall back to a deprecated internal.\nconst util = require('util');\n\nlet uv;\n\nif (typeof util.getSystemErrorName === 'function') {\n\tmodule.exports = util.getSystemErrorName;\n} else {\n\ttry {\n\t\tuv = process.binding('uv');\n\n\t\tif (typeof uv.errname !== 'function') {\n\t\t\tthrow new TypeError('uv.errname is not a function');\n\t\t}\n\t} catch (err) {\n\t\tconsole.error('execa/lib/errname: unable to establish process.binding(\\'uv\\')', err);\n\t\tuv = null;\n\t}\n\n\tmodule.exports = code => errname(uv, code);\n}\n\n// Used for testing the fallback behavior\nmodule.exports.__test__ = errname;\n\nfunction errname(uv, code) {\n\tif (uv) {\n\t\treturn uv.errname(code);\n\t}\n\n\tif (!(code < 0)) {\n\t\tthrow new Error('err >= 0');\n\t}\n\n\treturn `Unknown system error ${code}`;\n}\n\n","'use strict';\nconst alias = ['stdin', 'stdout', 'stderr'];\n\nconst hasAlias = opts => alias.some(x => Boolean(opts[x]));\n\nmodule.exports = opts => {\n\tif (!opts) {\n\t\treturn null;\n\t}\n\n\tif (opts.stdio && hasAlias(opts)) {\n\t\tthrow new Error(`It's not possible to provide \\`stdio\\` in combination with one of ${alias.map(x => `\\`${x}\\``).join(', ')}`);\n\t}\n\n\tif (typeof opts.stdio === 'string') {\n\t\treturn opts.stdio;\n\t}\n\n\tconst stdio = opts.stdio || [];\n\n\tif (!Array.isArray(stdio)) {\n\t\tthrow new TypeError(`Expected \\`stdio\\` to be of type \\`string\\` or \\`Array\\`, got \\`${typeof stdio}\\``);\n\t}\n\n\tconst result = [];\n\tconst len = Math.max(stdio.length, alias.length);\n\n\tfor (let i = 0; i < len; i++) {\n\t\tlet value = null;\n\n\t\tif (stdio[i] !== undefined) {\n\t\t\tvalue = stdio[i];\n\t\t} else if (opts[alias[i]] !== undefined) {\n\t\t\tvalue = opts[alias[i]];\n\t\t}\n\n\t\tresult[i] = value;\n\t}\n\n\treturn result;\n};\n","'use strict';\n\nvar isStream = module.exports = function (stream) {\n\treturn stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';\n};\n\nisStream.writable = function (stream) {\n\treturn isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';\n};\n\nisStream.readable = function (stream) {\n\treturn isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';\n};\n\nisStream.duplex = function (stream) {\n\treturn isStream.writable(stream) && isStream.readable(stream);\n};\n\nisStream.transform = function (stream) {\n\treturn isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';\n};\n","'use strict';\nconst path = require('path');\nconst pathKey = require('path-key');\n\nmodule.exports = opts => {\n\topts = Object.assign({\n\t\tcwd: process.cwd(),\n\t\tpath: process.env[pathKey()]\n\t}, opts);\n\n\tlet prev;\n\tlet pth = path.resolve(opts.cwd);\n\tconst ret = [];\n\n\twhile (prev !== pth) {\n\t\tret.push(path.join(pth, 'node_modules/.bin'));\n\t\tprev = pth;\n\t\tpth = path.resolve(pth, '..');\n\t}\n\n\t// ensure the running `node` binary is used\n\tret.push(path.dirname(process.execPath));\n\n\treturn ret.concat(opts.path).join(path.delimiter);\n};\n\nmodule.exports.env = opts => {\n\topts = Object.assign({\n\t\tenv: process.env\n\t}, opts);\n\n\tconst env = Object.assign({}, opts.env);\n\tconst path = pathKey({env});\n\n\topts.path = env[path];\n\tenv[path] = module.exports(opts);\n\n\treturn env;\n};\n","'use strict';\nmodule.exports = opts => {\n\topts = opts || {};\n\n\tconst env = opts.env || process.env;\n\tconst platform = opts.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path';\n};\n","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","'use strict';\nvar shebangRegex = require('shebang-regex');\n\nmodule.exports = function (str) {\n\tvar match = str.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tvar arr = match[0].replace(/#! ?/, '').split(' ');\n\tvar bin = arr[0].split('/').pop();\n\tvar arg = arr[1];\n\n\treturn (bin === 'env' ?\n\t\targ :\n\t\tbin + (arg ? ' ' + arg : '')\n\t);\n};\n","'use strict';\nmodule.exports = /^#!.*/;\n","module.exports = which\nwhich.sync = whichSync\n\nvar isWindows = process.platform === 'win32' ||\n process.env.OSTYPE === 'cygwin' ||\n process.env.OSTYPE === 'msys'\n\nvar path = require('path')\nvar COLON = isWindows ? ';' : ':'\nvar isexe = require('isexe')\n\nfunction getNotFoundError (cmd) {\n var er = new Error('not found: ' + cmd)\n er.code = 'ENOENT'\n\n return er\n}\n\nfunction getPathInfo (cmd, opt) {\n var colon = opt.colon || COLON\n var pathEnv = opt.path || process.env.PATH || ''\n var pathExt = ['']\n\n pathEnv = pathEnv.split(colon)\n\n var pathExtExe = ''\n if (isWindows) {\n pathEnv.unshift(process.cwd())\n pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')\n pathExt = pathExtExe.split(colon)\n\n\n // Always test the cmd itself first. isexe will check to make sure\n // it's found in the pathExt set.\n if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n pathExt.unshift('')\n }\n\n // If it has a slash, then we don't bother searching the pathenv.\n // just check the file itself, and that's it.\n if (cmd.match(/\\//) || isWindows && cmd.match(/\\\\/))\n pathEnv = ['']\n\n return {\n env: pathEnv,\n ext: pathExt,\n extExe: pathExtExe\n }\n}\n\nfunction which (cmd, opt, cb) {\n if (typeof opt === 'function') {\n cb = opt\n opt = {}\n }\n\n var info = getPathInfo(cmd, opt)\n var pathEnv = info.env\n var pathExt = info.ext\n var pathExtExe = info.extExe\n var found = []\n\n ;(function F (i, l) {\n if (i === l) {\n if (opt.all && found.length)\n return cb(null, found)\n else\n return cb(getNotFoundError(cmd))\n }\n\n var pathPart = pathEnv[i]\n if (pathPart.charAt(0) === '\"' && pathPart.slice(-1) === '\"')\n pathPart = pathPart.slice(1, -1)\n\n var p = path.join(pathPart, cmd)\n if (!pathPart && (/^\\.[\\\\\\/]/).test(cmd)) {\n p = cmd.slice(0, 2) + p\n }\n ;(function E (ii, ll) {\n if (ii === ll) return F(i + 1, l)\n var ext = pathExt[ii]\n isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {\n if (!er && is) {\n if (opt.all)\n found.push(p + ext)\n else\n return cb(null, p + ext)\n }\n return E(ii + 1, ll)\n })\n })(0, pathExt.length)\n })(0, pathEnv.length)\n}\n\nfunction whichSync (cmd, opt) {\n opt = opt || {}\n\n var info = getPathInfo(cmd, opt)\n var pathEnv = info.env\n var pathExt = info.ext\n var pathExtExe = info.extExe\n var found = []\n\n for (var i = 0, l = pathEnv.length; i < l; i ++) {\n var pathPart = pathEnv[i]\n if (pathPart.charAt(0) === '\"' && pathPart.slice(-1) === '\"')\n pathPart = pathPart.slice(1, -1)\n\n var p = path.join(pathPart, cmd)\n if (!pathPart && /^\\.[\\\\\\/]/.test(cmd)) {\n p = cmd.slice(0, 2) + p\n }\n for (var j = 0, ll = pathExt.length; j < ll; j ++) {\n var cur = p + pathExt[j]\n var is\n try {\n is = isexe.sync(cur, { pathExt: pathExtExe })\n if (is) {\n if (opt.all)\n found.push(cur)\n else\n return cur\n }\n } catch (ex) {}\n }\n }\n\n if (opt.all && found.length)\n return found\n\n if (opt.nothrow)\n return null\n\n throw getNotFoundError(cmd)\n}\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n",null,"module.exports = require(\"assert\");;","module.exports = require(\"child_process\");;","module.exports = require(\"events\");;","module.exports = require(\"fs\");;","module.exports = require(\"http\");;","module.exports = require(\"https\");;","module.exports = require(\"net\");;","module.exports = require(\"os\");;","module.exports = require(\"path\");;","module.exports = require(\"punycode\");;","module.exports = require(\"stream\");;","module.exports = require(\"tls\");;","module.exports = require(\"url\");;","module.exports = require(\"util\");;","module.exports = require(\"zlib\");;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tvar threw = true;\n\ttry {\n\t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\tthrew = false;\n\t} finally {\n\t\tif(threw) delete __webpack_module_cache__[moduleId];\n\t}\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","\n__webpack_require__.ab = __dirname + \"/\";","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(2932);\n"],"mappings":";;;;;;;;;;A;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC74ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC9BA;AACA;AACA;AACA;AACA;A;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxJA;AACA;AACA;AACA;AACA;A;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACpBA;AACA;AACA;AACA;AACA;A;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACp6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC/9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACj4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClqDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC3MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClMA;AACA;AACA;A;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AClxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC58CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACpBA;AACA;AACA;AACA;A;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClCA;AACA;AACA;A;;;;;;;;A;;;;;;ACFA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC5BA;AACA;ACDA;AACA;AACA;AACA;;A","sourceRoot":""} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../webpack://match-label-action/./index.js","../webpack://match-label-action/./match.js","../webpack://match-label-action/./node_modules/@actions/core/lib/command.js","../webpack://match-label-action/./node_modules/@actions/core/lib/core.js","../webpack://match-label-action/./node_modules/@actions/core/lib/file-command.js","../webpack://match-label-action/./node_modules/@actions/core/lib/oidc-utils.js","../webpack://match-label-action/./node_modules/@actions/core/lib/path-utils.js","../webpack://match-label-action/./node_modules/@actions/core/lib/summary.js","../webpack://match-label-action/./node_modules/@actions/core/lib/utils.js","../webpack://match-label-action/./node_modules/@actions/core/node_modules/@actions/http-client/lib/auth.js","../webpack://match-label-action/./node_modules/@actions/core/node_modules/@actions/http-client/lib/index.js","../webpack://match-label-action/./node_modules/@actions/core/node_modules/@actions/http-client/lib/proxy.js","../webpack://match-label-action/./node_modules/@actions/github/lib/context.js","../webpack://match-label-action/./node_modules/@actions/github/lib/github.js","../webpack://match-label-action/./node_modules/@actions/http-client/index.js","../webpack://match-label-action/./node_modules/@actions/http-client/proxy.js","../webpack://match-label-action/./node_modules/@octokit/auth-token/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/endpoint/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/graphql/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/plugin-request-log/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/request-error/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/request/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/constructor.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/core.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/factory.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/parse-client-options.js","../webpack://match-label-action/./node_modules/@octokit/rest/lib/register-plugin.js","../webpack://match-label-action/./node_modules/@octokit/rest/node_modules/@octokit/request-error/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/node_modules/universal-user-agent/dist-node/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/authenticate.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/before-request.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication-deprecated/request-error.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/before-request.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/request-error.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/validate.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/authentication/with-authorization-prefix.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/pagination/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/validate/index.js","../webpack://match-label-action/./node_modules/@octokit/rest/plugins/validate/validate.js","../webpack://match-label-action/./node_modules/atob-lite/atob-node.js","../webpack://match-label-action/./node_modules/before-after-hook/index.js","../webpack://match-label-action/./node_modules/before-after-hook/lib/add.js","../webpack://match-label-action/./node_modules/before-after-hook/lib/register.js","../webpack://match-label-action/./node_modules/before-after-hook/lib/remove.js","../webpack://match-label-action/./node_modules/btoa-lite/btoa-node.js","../webpack://match-label-action/./node_modules/deprecation/dist-node/index.js","../webpack://match-label-action/./node_modules/end-of-stream/index.js","../webpack://match-label-action/./node_modules/get-stream/buffer-stream.js","../webpack://match-label-action/./node_modules/get-stream/index.js","../webpack://match-label-action/./node_modules/is-plain-object/dist/is-plain-object.js","../webpack://match-label-action/./node_modules/isexe/index.js","../webpack://match-label-action/./node_modules/isexe/mode.js","../webpack://match-label-action/./node_modules/isexe/windows.js","../webpack://match-label-action/./node_modules/lodash.get/index.js","../webpack://match-label-action/./node_modules/lodash.set/index.js","../webpack://match-label-action/./node_modules/lodash.uniq/index.js","../webpack://match-label-action/./node_modules/macos-release/index.js","../webpack://match-label-action/./node_modules/nice-try/src/index.js","../webpack://match-label-action/./node_modules/node-fetch/lib/index.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/index.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/deprecate.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-first-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-last-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-next-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-page-links.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/get-previous-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-first-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-last-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-next-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/has-previous-page.js","../webpack://match-label-action/./node_modules/octokit-pagination-methods/lib/http-error.js","../webpack://match-label-action/./node_modules/once/once.js","../webpack://match-label-action/./node_modules/os-name/index.js","../webpack://match-label-action/./node_modules/p-finally/index.js","../webpack://match-label-action/./node_modules/pump/index.js","../webpack://match-label-action/./node_modules/signal-exit/index.js","../webpack://match-label-action/./node_modules/signal-exit/signals.js","../webpack://match-label-action/./node_modules/strip-eof/index.js","../webpack://match-label-action/./node_modules/tr46/index.js","../webpack://match-label-action/./node_modules/tunnel/index.js","../webpack://match-label-action/./node_modules/tunnel/lib/tunnel.js","../webpack://match-label-action/./node_modules/universal-user-agent/dist-node/index.js","../webpack://match-label-action/external \"crypto\"","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/rng.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/regex.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/validate.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/stringify.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/v1.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/parse.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/v35.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/md5.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/v3.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/v4.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/sha1.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/v5.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/nil.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/version.js","../webpack://match-label-action/./node_modules/uuid/dist/esm-node/index.js","../webpack://match-label-action/./node_modules/webidl-conversions/lib/index.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/URL-impl.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/URL.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/public-api.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/url-state-machine.js","../webpack://match-label-action/./node_modules/whatwg-url/lib/utils.js","../webpack://match-label-action/./node_modules/windows-release/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/enoent.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/parse.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/util/escape.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/util/readShebang.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/cross-spawn/lib/util/resolveCommand.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/execa/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/execa/lib/errname.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/execa/lib/stdio.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/is-stream/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/npm-run-path/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/path-key/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/semver/semver.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/shebang-command/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/shebang-regex/index.js","../webpack://match-label-action/./node_modules/windows-release/node_modules/which/which.js","../webpack://match-label-action/./node_modules/wrappy/wrappy.js","../webpack://match-label-action/./node_modules/@vercel/ncc/dist/ncc/@@notfound.js","../webpack://match-label-action/external \"assert\"","../webpack://match-label-action/external \"child_process\"","../webpack://match-label-action/external \"events\"","../webpack://match-label-action/external \"fs\"","../webpack://match-label-action/external \"http\"","../webpack://match-label-action/external \"https\"","../webpack://match-label-action/external \"net\"","../webpack://match-label-action/external \"os\"","../webpack://match-label-action/external \"path\"","../webpack://match-label-action/external \"punycode\"","../webpack://match-label-action/external \"stream\"","../webpack://match-label-action/external \"tls\"","../webpack://match-label-action/external \"url\"","../webpack://match-label-action/external \"util\"","../webpack://match-label-action/external \"zlib\"","../webpack://match-label-action/webpack/bootstrap","../webpack://match-label-action/webpack/runtime/compat get default export","../webpack://match-label-action/webpack/runtime/define property getters","../webpack://match-label-action/webpack/runtime/hasOwnProperty shorthand","../webpack://match-label-action/webpack/runtime/make namespace object","../webpack://match-label-action/webpack/runtime/compat","../webpack://match-label-action/webpack/startup"],"sourcesContent":["const core = require('@actions/core')\nconst {context} = require('@actions/github')\nconst match = require('./match.js')\n\nfunction run() {\n try {\n const pr = context.payload.pull_request || {}\n const labels = pr.labels || []\n const labelNames = labels.map((label) => label.name)\n const allowedLabels = match.parseAllowed(core.getInput('allowed'))\n const allowedMultipleLabels = match.parseAllowed(\n core.getInput('allowed_multiple')\n )\n const defaultMatch = core.getInput('default_match')\n let matchingLabel\n if (allowedLabels.length > 0) {\n matchingLabel = match.findMatching(\n labelNames,\n allowedLabels,\n false,\n defaultMatch\n )\n } else if (allowedMultipleLabels.length > 0) {\n matchingLabel = match.findMatching(\n labelNames,\n allowedMultipleLabels,\n true,\n defaultMatch\n )\n } else {\n return core.setFailed(\n 'You must provide either `allowed` or `allowed_multiple` as input.'\n )\n }\n\n core.setOutput('match', matchingLabel.join(', '))\n } catch (error) {\n core.setFailed(error.message)\n }\n}\n\nrun()\n","function parseAllowed(allowed) {\n return allowed.split(/\\r?\\n/).flatMap((line) =>\n line\n .split(/,\\s*/)\n .map((label) => label.trim())\n .filter((label) => label)\n )\n}\n\nfunction findMatching(\n labelNames,\n allowedLabels,\n isMultipleAllowed,\n defaultMatch\n) {\n const allowedLabelsSet = new Set(allowedLabels)\n const matchingLabels = labelNames.filter((labelName) =>\n allowedLabelsSet.has(labelName)\n )\n if (\n matchingLabels.length === 0 &&\n defaultMatch !== undefined &&\n defaultMatch !== ''\n ) {\n return [defaultMatch]\n }\n\n if (\n isMultipleAllowed\n ? matchingLabels.length === 0\n : matchingLabels.length !== 1\n ) {\n const quantifier = isMultipleAllowed ? 'at least' : 'exactly'\n throw new Error(\n `Could not find ${quantifier} one of the appropriate labels on the PR.`\n )\n }\n\n return matchingLabels\n}\n\nmodule.exports = {parseAllowed, findMatching}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.issue = exports.issueCommand = void 0;\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\nconst oidc_utils_1 = require(\"./oidc-utils\");\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));\n }\n command_1.issueCommand('set-env', { name }, convertedVal);\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueFileCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input.\n * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.\n * Returns an empty string if the value is not defined.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n if (options && options.trimWhitespace === false) {\n return val;\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Gets the values of an multiline input. Each value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string[]\n *\n */\nfunction getMultilineInput(name, options) {\n const inputs = getInput(name, options)\n .split('\\n')\n .filter(x => x !== '');\n if (options && options.trimWhitespace === false) {\n return inputs;\n }\n return inputs.map(input => input.trim());\n}\nexports.getMultilineInput = getMultilineInput;\n/**\n * Gets the input value of the boolean type in the YAML 1.2 \"core schema\" specification.\n * Support boolean input list: `true | True | TRUE | false | False | FALSE` .\n * The return value is also in boolean type.\n * ref: https://yaml.org/spec/1.2/spec.html#id2804923\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns boolean\n */\nfunction getBooleanInput(name, options) {\n const trueValue = ['true', 'True', 'TRUE'];\n const falseValue = ['false', 'False', 'FALSE'];\n const val = getInput(name, options);\n if (trueValue.includes(val))\n return true;\n if (falseValue.includes(val))\n return false;\n throw new TypeError(`Input does not meet YAML 1.2 \"Core Schema\" specification: ${name}\\n` +\n `Support boolean input list: \\`true | True | TRUE | false | False | FALSE\\``);\n}\nexports.getBooleanInput = getBooleanInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n const filePath = process.env['GITHUB_OUTPUT'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value));\n }\n process.stdout.write(os.EOL);\n command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value));\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction error(message, properties = {}) {\n command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds a warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction warning(message, properties = {}) {\n command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Adds a notice issue\n * @param message notice issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction notice(message, properties = {}) {\n command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.notice = notice;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n const filePath = process.env['GITHUB_STATE'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value));\n }\n command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value));\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\nfunction getIDToken(aud) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield oidc_utils_1.OidcClient.getIDToken(aud);\n });\n}\nexports.getIDToken = getIDToken;\n/**\n * Summary exports\n */\nvar summary_1 = require(\"./summary\");\nObject.defineProperty(exports, \"summary\", { enumerable: true, get: function () { return summary_1.summary; } });\n/**\n * @deprecated use core.summary\n */\nvar summary_2 = require(\"./summary\");\nObject.defineProperty(exports, \"markdownSummary\", { enumerable: true, get: function () { return summary_2.markdownSummary; } });\n/**\n * Path exports\n */\nvar path_utils_1 = require(\"./path-utils\");\nObject.defineProperty(exports, \"toPosixPath\", { enumerable: true, get: function () { return path_utils_1.toPosixPath; } });\nObject.defineProperty(exports, \"toWin32Path\", { enumerable: true, get: function () { return path_utils_1.toWin32Path; } });\nObject.defineProperty(exports, \"toPlatformPath\", { enumerable: true, get: function () { return path_utils_1.toPlatformPath; } });\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.prepareKeyValueMessage = exports.issueFileCommand = void 0;\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst uuid_1 = require(\"uuid\");\nconst utils_1 = require(\"./utils\");\nfunction issueFileCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueFileCommand = issueFileCommand;\nfunction prepareKeyValueMessage(key, value) {\n const delimiter = `ghadelimiter_${uuid_1.v4()}`;\n const convertedValue = utils_1.toCommandValue(value);\n // These should realistically never happen, but just in case someone finds a\n // way to exploit uuid generation let's not allow keys or values that contain\n // the delimiter.\n if (key.includes(delimiter)) {\n throw new Error(`Unexpected input: name should not contain the delimiter \"${delimiter}\"`);\n }\n if (convertedValue.includes(delimiter)) {\n throw new Error(`Unexpected input: value should not contain the delimiter \"${delimiter}\"`);\n }\n return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`;\n}\nexports.prepareKeyValueMessage = prepareKeyValueMessage;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OidcClient = void 0;\nconst http_client_1 = require(\"@actions/http-client\");\nconst auth_1 = require(\"@actions/http-client/lib/auth\");\nconst core_1 = require(\"./core\");\nclass OidcClient {\n static createHttpClient(allowRetry = true, maxRetry = 10) {\n const requestOptions = {\n allowRetries: allowRetry,\n maxRetries: maxRetry\n };\n return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);\n }\n static getRequestToken() {\n const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];\n if (!token) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');\n }\n return token;\n }\n static getIDTokenUrl() {\n const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];\n if (!runtimeUrl) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');\n }\n return runtimeUrl;\n }\n static getCall(id_token_url) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const httpclient = OidcClient.createHttpClient();\n const res = yield httpclient\n .getJson(id_token_url)\n .catch(error => {\n throw new Error(`Failed to get ID Token. \\n \n Error Code : ${error.statusCode}\\n \n Error Message: ${error.result.message}`);\n });\n const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;\n if (!id_token) {\n throw new Error('Response json body do not have ID Token field');\n }\n return id_token;\n });\n }\n static getIDToken(audience) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n // New ID Token is requested from action service\n let id_token_url = OidcClient.getIDTokenUrl();\n if (audience) {\n const encodedAudience = encodeURIComponent(audience);\n id_token_url = `${id_token_url}&audience=${encodedAudience}`;\n }\n core_1.debug(`ID token url is ${id_token_url}`);\n const id_token = yield OidcClient.getCall(id_token_url);\n core_1.setSecret(id_token);\n return id_token;\n }\n catch (error) {\n throw new Error(`Error message: ${error.message}`);\n }\n });\n }\n}\nexports.OidcClient = OidcClient;\n//# sourceMappingURL=oidc-utils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;\nconst path = __importStar(require(\"path\"));\n/**\n * toPosixPath converts the given path to the posix form. On Windows, \\\\ will be\n * replaced with /.\n *\n * @param pth. Path to transform.\n * @return string Posix path.\n */\nfunction toPosixPath(pth) {\n return pth.replace(/[\\\\]/g, '/');\n}\nexports.toPosixPath = toPosixPath;\n/**\n * toWin32Path converts the given path to the win32 form. On Linux, / will be\n * replaced with \\\\.\n *\n * @param pth. Path to transform.\n * @return string Win32 path.\n */\nfunction toWin32Path(pth) {\n return pth.replace(/[/]/g, '\\\\');\n}\nexports.toWin32Path = toWin32Path;\n/**\n * toPlatformPath converts the given path to a platform-specific path. It does\n * this by replacing instances of / and \\ with the platform-specific path\n * separator.\n *\n * @param pth The path to platformize.\n * @return string The platform-specific path.\n */\nfunction toPlatformPath(pth) {\n return pth.replace(/[/\\\\]/g, path.sep);\n}\nexports.toPlatformPath = toPlatformPath;\n//# sourceMappingURL=path-utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;\nconst os_1 = require(\"os\");\nconst fs_1 = require(\"fs\");\nconst { access, appendFile, writeFile } = fs_1.promises;\nexports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';\nexports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';\nclass Summary {\n constructor() {\n this._buffer = '';\n }\n /**\n * Finds the summary file path from the environment, rejects if env var is not found or file does not exist\n * Also checks r/w permissions.\n *\n * @returns step summary file path\n */\n filePath() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._filePath) {\n return this._filePath;\n }\n const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];\n if (!pathFromEnv) {\n throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);\n }\n try {\n yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);\n }\n catch (_a) {\n throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);\n }\n this._filePath = pathFromEnv;\n return this._filePath;\n });\n }\n /**\n * Wraps content in an HTML tag, adding any HTML attributes\n *\n * @param {string} tag HTML tag to wrap\n * @param {string | null} content content within the tag\n * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add\n *\n * @returns {string} content wrapped in HTML element\n */\n wrap(tag, content, attrs = {}) {\n const htmlAttrs = Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${value}\"`)\n .join('');\n if (!content) {\n return `<${tag}${htmlAttrs}>`;\n }\n return `<${tag}${htmlAttrs}>${content}`;\n }\n /**\n * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.\n *\n * @param {SummaryWriteOptions} [options] (optional) options for write operation\n *\n * @returns {Promise} summary instance\n */\n write(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);\n const filePath = yield this.filePath();\n const writeFunc = overwrite ? writeFile : appendFile;\n yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });\n return this.emptyBuffer();\n });\n }\n /**\n * Clears the summary buffer and wipes the summary file\n *\n * @returns {Summary} summary instance\n */\n clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.emptyBuffer().write({ overwrite: true });\n });\n }\n /**\n * Returns the current summary buffer as a string\n *\n * @returns {string} string of summary buffer\n */\n stringify() {\n return this._buffer;\n }\n /**\n * If the summary buffer is empty\n *\n * @returns {boolen} true if the buffer is empty\n */\n isEmptyBuffer() {\n return this._buffer.length === 0;\n }\n /**\n * Resets the summary buffer without writing to summary file\n *\n * @returns {Summary} summary instance\n */\n emptyBuffer() {\n this._buffer = '';\n return this;\n }\n /**\n * Adds raw text to the summary buffer\n *\n * @param {string} text content to add\n * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)\n *\n * @returns {Summary} summary instance\n */\n addRaw(text, addEOL = false) {\n this._buffer += text;\n return addEOL ? this.addEOL() : this;\n }\n /**\n * Adds the operating system-specific end-of-line marker to the buffer\n *\n * @returns {Summary} summary instance\n */\n addEOL() {\n return this.addRaw(os_1.EOL);\n }\n /**\n * Adds an HTML codeblock to the summary buffer\n *\n * @param {string} code content to render within fenced code block\n * @param {string} lang (optional) language to syntax highlight code\n *\n * @returns {Summary} summary instance\n */\n addCodeBlock(code, lang) {\n const attrs = Object.assign({}, (lang && { lang }));\n const element = this.wrap('pre', this.wrap('code', code), attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML list to the summary buffer\n *\n * @param {string[]} items list of items to render\n * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)\n *\n * @returns {Summary} summary instance\n */\n addList(items, ordered = false) {\n const tag = ordered ? 'ol' : 'ul';\n const listItems = items.map(item => this.wrap('li', item)).join('');\n const element = this.wrap(tag, listItems);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML table to the summary buffer\n *\n * @param {SummaryTableCell[]} rows table rows\n *\n * @returns {Summary} summary instance\n */\n addTable(rows) {\n const tableBody = rows\n .map(row => {\n const cells = row\n .map(cell => {\n if (typeof cell === 'string') {\n return this.wrap('td', cell);\n }\n const { header, data, colspan, rowspan } = cell;\n const tag = header ? 'th' : 'td';\n const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));\n return this.wrap(tag, data, attrs);\n })\n .join('');\n return this.wrap('tr', cells);\n })\n .join('');\n const element = this.wrap('table', tableBody);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds a collapsable HTML details element to the summary buffer\n *\n * @param {string} label text for the closed state\n * @param {string} content collapsable content\n *\n * @returns {Summary} summary instance\n */\n addDetails(label, content) {\n const element = this.wrap('details', this.wrap('summary', label) + content);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML image tag to the summary buffer\n *\n * @param {string} src path to the image you to embed\n * @param {string} alt text description of the image\n * @param {SummaryImageOptions} options (optional) addition image attributes\n *\n * @returns {Summary} summary instance\n */\n addImage(src, alt, options) {\n const { width, height } = options || {};\n const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));\n const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML section heading element\n *\n * @param {string} text heading text\n * @param {number | string} [level=1] (optional) the heading level, default: 1\n *\n * @returns {Summary} summary instance\n */\n addHeading(text, level) {\n const tag = `h${level}`;\n const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)\n ? tag\n : 'h1';\n const element = this.wrap(allowedTag, text);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML thematic break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addSeparator() {\n const element = this.wrap('hr', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML line break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addBreak() {\n const element = this.wrap('br', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML blockquote to the summary buffer\n *\n * @param {string} text quote text\n * @param {string} cite (optional) citation url\n *\n * @returns {Summary} summary instance\n */\n addQuote(text, cite) {\n const attrs = Object.assign({}, (cite && { cite }));\n const element = this.wrap('blockquote', text, attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML anchor tag to the summary buffer\n *\n * @param {string} text link text/content\n * @param {string} href hyperlink\n *\n * @returns {Summary} summary instance\n */\n addLink(text, href) {\n const element = this.wrap('a', text, { href });\n return this.addRaw(element).addEOL();\n }\n}\nconst _summary = new Summary();\n/**\n * @deprecated use `core.summary`\n */\nexports.markdownSummary = _summary;\nexports.summary = _summary;\n//# sourceMappingURL=summary.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCommandProperties = exports.toCommandValue = void 0;\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n/**\n *\n * @param annotationProperties\n * @returns The command properties to send with the actual annotation command\n * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646\n */\nfunction toCommandProperties(annotationProperties) {\n if (!Object.keys(annotationProperties).length) {\n return {};\n }\n return {\n title: annotationProperties.title,\n file: annotationProperties.file,\n line: annotationProperties.startLine,\n endLine: annotationProperties.endLine,\n col: annotationProperties.startColumn,\n endColumn: annotationProperties.endColumn\n };\n}\nexports.toCommandProperties = toCommandProperties;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;\nclass BasicCredentialHandler {\n constructor(username, password) {\n this.username = username;\n this.password = password;\n }\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BasicCredentialHandler = BasicCredentialHandler;\nclass BearerCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Bearer ${this.token}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BearerCredentialHandler = BearerCredentialHandler;\nclass PersonalAccessTokenCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;\n//# sourceMappingURL=auth.js.map","\"use strict\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;\nconst http = __importStar(require(\"http\"));\nconst https = __importStar(require(\"https\"));\nconst pm = __importStar(require(\"./proxy\"));\nconst tunnel = __importStar(require(\"tunnel\"));\nvar HttpCodes;\n(function (HttpCodes) {\n HttpCodes[HttpCodes[\"OK\"] = 200] = \"OK\";\n HttpCodes[HttpCodes[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpCodes[HttpCodes[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpCodes[HttpCodes[\"ResourceMoved\"] = 302] = \"ResourceMoved\";\n HttpCodes[HttpCodes[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpCodes[HttpCodes[\"NotModified\"] = 304] = \"NotModified\";\n HttpCodes[HttpCodes[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpCodes[HttpCodes[\"SwitchProxy\"] = 306] = \"SwitchProxy\";\n HttpCodes[HttpCodes[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpCodes[HttpCodes[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpCodes[HttpCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpCodes[HttpCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpCodes[HttpCodes[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpCodes[HttpCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpCodes[HttpCodes[\"NotFound\"] = 404] = \"NotFound\";\n HttpCodes[HttpCodes[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpCodes[HttpCodes[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpCodes[HttpCodes[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpCodes[HttpCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpCodes[HttpCodes[\"Conflict\"] = 409] = \"Conflict\";\n HttpCodes[HttpCodes[\"Gone\"] = 410] = \"Gone\";\n HttpCodes[HttpCodes[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpCodes[HttpCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpCodes[HttpCodes[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpCodes[HttpCodes[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpCodes[HttpCodes[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpCodes[HttpCodes[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));\nvar Headers;\n(function (Headers) {\n Headers[\"Accept\"] = \"accept\";\n Headers[\"ContentType\"] = \"content-type\";\n})(Headers = exports.Headers || (exports.Headers = {}));\nvar MediaTypes;\n(function (MediaTypes) {\n MediaTypes[\"ApplicationJson\"] = \"application/json\";\n})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));\n/**\n * Returns the proxy URL, depending upon the supplied url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\nfunction getProxyUrl(serverUrl) {\n const proxyUrl = pm.getProxyUrl(new URL(serverUrl));\n return proxyUrl ? proxyUrl.href : '';\n}\nexports.getProxyUrl = getProxyUrl;\nconst HttpRedirectCodes = [\n HttpCodes.MovedPermanently,\n HttpCodes.ResourceMoved,\n HttpCodes.SeeOther,\n HttpCodes.TemporaryRedirect,\n HttpCodes.PermanentRedirect\n];\nconst HttpResponseRetryCodes = [\n HttpCodes.BadGateway,\n HttpCodes.ServiceUnavailable,\n HttpCodes.GatewayTimeout\n];\nconst RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];\nconst ExponentialBackoffCeiling = 10;\nconst ExponentialBackoffTimeSlice = 5;\nclass HttpClientError extends Error {\n constructor(message, statusCode) {\n super(message);\n this.name = 'HttpClientError';\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n}\nexports.HttpClientError = HttpClientError;\nclass HttpClientResponse {\n constructor(message) {\n this.message = message;\n }\n readBody() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let output = Buffer.alloc(0);\n this.message.on('data', (chunk) => {\n output = Buffer.concat([output, chunk]);\n });\n this.message.on('end', () => {\n resolve(output.toString());\n });\n }));\n });\n }\n}\nexports.HttpClientResponse = HttpClientResponse;\nfunction isHttps(requestUrl) {\n const parsedUrl = new URL(requestUrl);\n return parsedUrl.protocol === 'https:';\n}\nexports.isHttps = isHttps;\nclass HttpClient {\n constructor(userAgent, handlers, requestOptions) {\n this._ignoreSslError = false;\n this._allowRedirects = true;\n this._allowRedirectDowngrade = false;\n this._maxRedirects = 50;\n this._allowRetries = false;\n this._maxRetries = 1;\n this._keepAlive = false;\n this._disposed = false;\n this.userAgent = userAgent;\n this.handlers = handlers || [];\n this.requestOptions = requestOptions;\n if (requestOptions) {\n if (requestOptions.ignoreSslError != null) {\n this._ignoreSslError = requestOptions.ignoreSslError;\n }\n this._socketTimeout = requestOptions.socketTimeout;\n if (requestOptions.allowRedirects != null) {\n this._allowRedirects = requestOptions.allowRedirects;\n }\n if (requestOptions.allowRedirectDowngrade != null) {\n this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;\n }\n if (requestOptions.maxRedirects != null) {\n this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);\n }\n if (requestOptions.keepAlive != null) {\n this._keepAlive = requestOptions.keepAlive;\n }\n if (requestOptions.allowRetries != null) {\n this._allowRetries = requestOptions.allowRetries;\n }\n if (requestOptions.maxRetries != null) {\n this._maxRetries = requestOptions.maxRetries;\n }\n }\n }\n options(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});\n });\n }\n get(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('GET', requestUrl, null, additionalHeaders || {});\n });\n }\n del(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('DELETE', requestUrl, null, additionalHeaders || {});\n });\n }\n post(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('POST', requestUrl, data, additionalHeaders || {});\n });\n }\n patch(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PATCH', requestUrl, data, additionalHeaders || {});\n });\n }\n put(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PUT', requestUrl, data, additionalHeaders || {});\n });\n }\n head(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('HEAD', requestUrl, null, additionalHeaders || {});\n });\n }\n sendStream(verb, requestUrl, stream, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request(verb, requestUrl, stream, additionalHeaders);\n });\n }\n /**\n * Gets a typed object from an endpoint\n * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise\n */\n getJson(requestUrl, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n const res = yield this.get(requestUrl, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n postJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.post(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n putJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.put(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n patchJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.patch(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n /**\n * Makes a raw http request.\n * All other methods such as get, post, patch, and request ultimately call this.\n * Prefer get, del, post and patch\n */\n request(verb, requestUrl, data, headers) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._disposed) {\n throw new Error('Client has already been disposed.');\n }\n const parsedUrl = new URL(requestUrl);\n let info = this._prepareRequest(verb, parsedUrl, headers);\n // Only perform retries on reads since writes may not be idempotent.\n const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)\n ? this._maxRetries + 1\n : 1;\n let numTries = 0;\n let response;\n do {\n response = yield this.requestRaw(info, data);\n // Check if it's an authentication challenge\n if (response &&\n response.message &&\n response.message.statusCode === HttpCodes.Unauthorized) {\n let authenticationHandler;\n for (const handler of this.handlers) {\n if (handler.canHandleAuthentication(response)) {\n authenticationHandler = handler;\n break;\n }\n }\n if (authenticationHandler) {\n return authenticationHandler.handleAuthentication(this, info, data);\n }\n else {\n // We have received an unauthorized response but have no handlers to handle it.\n // Let the response return to the caller.\n return response;\n }\n }\n let redirectsRemaining = this._maxRedirects;\n while (response.message.statusCode &&\n HttpRedirectCodes.includes(response.message.statusCode) &&\n this._allowRedirects &&\n redirectsRemaining > 0) {\n const redirectUrl = response.message.headers['location'];\n if (!redirectUrl) {\n // if there's no location to redirect to, we won't\n break;\n }\n const parsedRedirectUrl = new URL(redirectUrl);\n if (parsedUrl.protocol === 'https:' &&\n parsedUrl.protocol !== parsedRedirectUrl.protocol &&\n !this._allowRedirectDowngrade) {\n 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.');\n }\n // we need to finish reading the response before reassigning response\n // which will leak the open socket.\n yield response.readBody();\n // strip authorization header if redirected to a different hostname\n if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {\n for (const header in headers) {\n // header names are case insensitive\n if (header.toLowerCase() === 'authorization') {\n delete headers[header];\n }\n }\n }\n // let's make the request with the new redirectUrl\n info = this._prepareRequest(verb, parsedRedirectUrl, headers);\n response = yield this.requestRaw(info, data);\n redirectsRemaining--;\n }\n if (!response.message.statusCode ||\n !HttpResponseRetryCodes.includes(response.message.statusCode)) {\n // If not a retry code, return immediately instead of retrying\n return response;\n }\n numTries += 1;\n if (numTries < maxTries) {\n yield response.readBody();\n yield this._performExponentialBackoff(numTries);\n }\n } while (numTries < maxTries);\n return response;\n });\n }\n /**\n * Needs to be called if keepAlive is set to true in request options.\n */\n dispose() {\n if (this._agent) {\n this._agent.destroy();\n }\n this._disposed = true;\n }\n /**\n * Raw request.\n * @param info\n * @param data\n */\n requestRaw(info, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n function callbackForResult(err, res) {\n if (err) {\n reject(err);\n }\n else if (!res) {\n // If `err` is not passed, then `res` must be passed.\n reject(new Error('Unknown error'));\n }\n else {\n resolve(res);\n }\n }\n this.requestRawWithCallback(info, data, callbackForResult);\n });\n });\n }\n /**\n * Raw request with callback.\n * @param info\n * @param data\n * @param onResult\n */\n requestRawWithCallback(info, data, onResult) {\n if (typeof data === 'string') {\n if (!info.options.headers) {\n info.options.headers = {};\n }\n info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');\n }\n let callbackCalled = false;\n function handleResult(err, res) {\n if (!callbackCalled) {\n callbackCalled = true;\n onResult(err, res);\n }\n }\n const req = info.httpModule.request(info.options, (msg) => {\n const res = new HttpClientResponse(msg);\n handleResult(undefined, res);\n });\n let socket;\n req.on('socket', sock => {\n socket = sock;\n });\n // If we ever get disconnected, we want the socket to timeout eventually\n req.setTimeout(this._socketTimeout || 3 * 60000, () => {\n if (socket) {\n socket.end();\n }\n handleResult(new Error(`Request timeout: ${info.options.path}`));\n });\n req.on('error', function (err) {\n // err has statusCode property\n // res should have headers\n handleResult(err);\n });\n if (data && typeof data === 'string') {\n req.write(data, 'utf8');\n }\n if (data && typeof data !== 'string') {\n data.on('close', function () {\n req.end();\n });\n data.pipe(req);\n }\n else {\n req.end();\n }\n }\n /**\n * Gets an http agent. This function is useful when you need an http agent that handles\n * routing through a proxy server - depending upon the url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\n getAgent(serverUrl) {\n const parsedUrl = new URL(serverUrl);\n return this._getAgent(parsedUrl);\n }\n _prepareRequest(method, requestUrl, headers) {\n const info = {};\n info.parsedUrl = requestUrl;\n const usingSsl = info.parsedUrl.protocol === 'https:';\n info.httpModule = usingSsl ? https : http;\n const defaultPort = usingSsl ? 443 : 80;\n info.options = {};\n info.options.host = info.parsedUrl.hostname;\n info.options.port = info.parsedUrl.port\n ? parseInt(info.parsedUrl.port)\n : defaultPort;\n info.options.path =\n (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');\n info.options.method = method;\n info.options.headers = this._mergeHeaders(headers);\n if (this.userAgent != null) {\n info.options.headers['user-agent'] = this.userAgent;\n }\n info.options.agent = this._getAgent(info.parsedUrl);\n // gives handlers an opportunity to participate\n if (this.handlers) {\n for (const handler of this.handlers) {\n handler.prepareRequest(info.options);\n }\n }\n return info;\n }\n _mergeHeaders(headers) {\n if (this.requestOptions && this.requestOptions.headers) {\n return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));\n }\n return lowercaseKeys(headers || {});\n }\n _getExistingOrDefaultHeader(additionalHeaders, header, _default) {\n let clientHeader;\n if (this.requestOptions && this.requestOptions.headers) {\n clientHeader = lowercaseKeys(this.requestOptions.headers)[header];\n }\n return additionalHeaders[header] || clientHeader || _default;\n }\n _getAgent(parsedUrl) {\n let agent;\n const proxyUrl = pm.getProxyUrl(parsedUrl);\n const useProxy = proxyUrl && proxyUrl.hostname;\n if (this._keepAlive && useProxy) {\n agent = this._proxyAgent;\n }\n if (this._keepAlive && !useProxy) {\n agent = this._agent;\n }\n // if agent is already assigned use that agent.\n if (agent) {\n return agent;\n }\n const usingSsl = parsedUrl.protocol === 'https:';\n let maxSockets = 100;\n if (this.requestOptions) {\n maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;\n }\n // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.\n if (proxyUrl && proxyUrl.hostname) {\n const agentOptions = {\n maxSockets,\n keepAlive: this._keepAlive,\n proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {\n proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`\n })), { host: proxyUrl.hostname, port: proxyUrl.port })\n };\n let tunnelAgent;\n const overHttps = proxyUrl.protocol === 'https:';\n if (usingSsl) {\n tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;\n }\n else {\n tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;\n }\n agent = tunnelAgent(agentOptions);\n this._proxyAgent = agent;\n }\n // if reusing agent across request and tunneling agent isn't assigned create a new agent\n if (this._keepAlive && !agent) {\n const options = { keepAlive: this._keepAlive, maxSockets };\n agent = usingSsl ? new https.Agent(options) : new http.Agent(options);\n this._agent = agent;\n }\n // if not using private agent and tunnel agent isn't setup then use global agent\n if (!agent) {\n agent = usingSsl ? https.globalAgent : http.globalAgent;\n }\n if (usingSsl && this._ignoreSslError) {\n // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process\n // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options\n // we have to cast it to any and change it directly\n agent.options = Object.assign(agent.options || {}, {\n rejectUnauthorized: false\n });\n }\n return agent;\n }\n _performExponentialBackoff(retryNumber) {\n return __awaiter(this, void 0, void 0, function* () {\n retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);\n const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);\n return new Promise(resolve => setTimeout(() => resolve(), ms));\n });\n }\n _processResponse(res, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n const statusCode = res.message.statusCode || 0;\n const response = {\n statusCode,\n result: null,\n headers: {}\n };\n // not found leads to null obj returned\n if (statusCode === HttpCodes.NotFound) {\n resolve(response);\n }\n // get the result from the body\n function dateTimeDeserializer(key, value) {\n if (typeof value === 'string') {\n const a = new Date(value);\n if (!isNaN(a.valueOf())) {\n return a;\n }\n }\n return value;\n }\n let obj;\n let contents;\n try {\n contents = yield res.readBody();\n if (contents && contents.length > 0) {\n if (options && options.deserializeDates) {\n obj = JSON.parse(contents, dateTimeDeserializer);\n }\n else {\n obj = JSON.parse(contents);\n }\n response.result = obj;\n }\n response.headers = res.message.headers;\n }\n catch (err) {\n // Invalid resource (contents not json); leaving result obj null\n }\n // note that 3xx redirects are handled by the http layer.\n if (statusCode > 299) {\n let msg;\n // if exception/error in body, attempt to get better error\n if (obj && obj.message) {\n msg = obj.message;\n }\n else if (contents && contents.length > 0) {\n // it may be the case that the exception is in the body message as string\n msg = contents;\n }\n else {\n msg = `Failed request: (${statusCode})`;\n }\n const err = new HttpClientError(msg, statusCode);\n err.result = response.result;\n reject(err);\n }\n else {\n resolve(response);\n }\n }));\n });\n }\n}\nexports.HttpClient = HttpClient;\nconst lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkBypass = exports.getProxyUrl = void 0;\nfunction getProxyUrl(reqUrl) {\n const usingSsl = reqUrl.protocol === 'https:';\n if (checkBypass(reqUrl)) {\n return undefined;\n }\n const proxyVar = (() => {\n if (usingSsl) {\n return process.env['https_proxy'] || process.env['HTTPS_PROXY'];\n }\n else {\n return process.env['http_proxy'] || process.env['HTTP_PROXY'];\n }\n })();\n if (proxyVar) {\n return new URL(proxyVar);\n }\n else {\n return undefined;\n }\n}\nexports.getProxyUrl = getProxyUrl;\nfunction checkBypass(reqUrl) {\n if (!reqUrl.hostname) {\n return false;\n }\n const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';\n if (!noProxy) {\n return false;\n }\n // Determine the request port\n let reqPort;\n if (reqUrl.port) {\n reqPort = Number(reqUrl.port);\n }\n else if (reqUrl.protocol === 'http:') {\n reqPort = 80;\n }\n else if (reqUrl.protocol === 'https:') {\n reqPort = 443;\n }\n // Format the request hostname and hostname with port\n const upperReqHosts = [reqUrl.hostname.toUpperCase()];\n if (typeof reqPort === 'number') {\n upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);\n }\n // Compare request host against noproxy\n for (const upperNoProxyItem of noProxy\n .split(',')\n .map(x => x.trim().toUpperCase())\n .filter(x => x)) {\n if (upperReqHosts.some(x => x === upperNoProxyItem)) {\n return true;\n }\n }\n return false;\n}\nexports.checkBypass = checkBypass;\n//# sourceMappingURL=proxy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = require(\"fs\");\nconst os_1 = require(\"os\");\nclass Context {\n /**\n * Hydrate the context from the environment\n */\n constructor() {\n this.payload = {};\n if (process.env.GITHUB_EVENT_PATH) {\n if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {\n this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));\n }\n else {\n const path = process.env.GITHUB_EVENT_PATH;\n process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);\n }\n }\n this.eventName = process.env.GITHUB_EVENT_NAME;\n this.sha = process.env.GITHUB_SHA;\n this.ref = process.env.GITHUB_REF;\n this.workflow = process.env.GITHUB_WORKFLOW;\n this.action = process.env.GITHUB_ACTION;\n this.actor = process.env.GITHUB_ACTOR;\n }\n get issue() {\n const payload = this.payload;\n return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });\n }\n get repo() {\n if (process.env.GITHUB_REPOSITORY) {\n const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');\n return { owner, repo };\n }\n if (this.payload.repository) {\n return {\n owner: this.payload.repository.owner.login,\n repo: this.payload.repository.name\n };\n }\n throw new Error(\"context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'\");\n }\n}\nexports.Context = Context;\n//# sourceMappingURL=context.js.map","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts\nconst graphql_1 = require(\"@octokit/graphql\");\nconst rest_1 = require(\"@octokit/rest\");\nconst Context = __importStar(require(\"./context\"));\nconst httpClient = __importStar(require(\"@actions/http-client\"));\n// We need this in order to extend Octokit\nrest_1.Octokit.prototype = new rest_1.Octokit();\nexports.context = new Context.Context();\nclass GitHub extends rest_1.Octokit {\n constructor(token, opts) {\n super(GitHub.getOctokitOptions(GitHub.disambiguate(token, opts)));\n this.graphql = GitHub.getGraphQL(GitHub.disambiguate(token, opts));\n }\n /**\n * Disambiguates the constructor overload parameters\n */\n static disambiguate(token, opts) {\n return [\n typeof token === 'string' ? token : '',\n typeof token === 'object' ? token : opts || {}\n ];\n }\n static getOctokitOptions(args) {\n const token = args[0];\n const options = Object.assign({}, args[1]); // Shallow clone - don't mutate the object provided by the caller\n // Base URL - GHES or Dotcom\n options.baseUrl = options.baseUrl || this.getApiBaseUrl();\n // Auth\n const auth = GitHub.getAuthString(token, options);\n if (auth) {\n options.auth = auth;\n }\n // Proxy\n const agent = GitHub.getProxyAgent(options.baseUrl, options);\n if (agent) {\n // Shallow clone - don't mutate the object provided by the caller\n options.request = options.request ? Object.assign({}, options.request) : {};\n // Set the agent\n options.request.agent = agent;\n }\n return options;\n }\n static getGraphQL(args) {\n const defaults = {};\n defaults.baseUrl = this.getGraphQLBaseUrl();\n const token = args[0];\n const options = args[1];\n // Authorization\n const auth = this.getAuthString(token, options);\n if (auth) {\n defaults.headers = {\n authorization: auth\n };\n }\n // Proxy\n const agent = GitHub.getProxyAgent(defaults.baseUrl, options);\n if (agent) {\n defaults.request = { agent };\n }\n return graphql_1.graphql.defaults(defaults);\n }\n static getAuthString(token, options) {\n // Validate args\n if (!token && !options.auth) {\n throw new Error('Parameter token or opts.auth is required');\n }\n else if (token && options.auth) {\n throw new Error('Parameters token and opts.auth may not both be specified');\n }\n return typeof options.auth === 'string' ? options.auth : `token ${token}`;\n }\n static getProxyAgent(destinationUrl, options) {\n var _a;\n if (!((_a = options.request) === null || _a === void 0 ? void 0 : _a.agent)) {\n if (httpClient.getProxyUrl(destinationUrl)) {\n const hc = new httpClient.HttpClient();\n return hc.getAgent(destinationUrl);\n }\n }\n return undefined;\n }\n static getApiBaseUrl() {\n return process.env['GITHUB_API_URL'] || 'https://api.github.com';\n }\n static getGraphQLBaseUrl() {\n let url = process.env['GITHUB_GRAPHQL_URL'] || 'https://api.github.com/graphql';\n // Shouldn't be a trailing slash, but remove if so\n if (url.endsWith('/')) {\n url = url.substr(0, url.length - 1);\n }\n // Remove trailing \"/graphql\"\n if (url.toUpperCase().endsWith('/GRAPHQL')) {\n url = url.substr(0, url.length - '/graphql'.length);\n }\n return url;\n }\n}\nexports.GitHub = GitHub;\n//# sourceMappingURL=github.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst https = require(\"https\");\nconst pm = require(\"./proxy\");\nlet tunnel;\nvar HttpCodes;\n(function (HttpCodes) {\n HttpCodes[HttpCodes[\"OK\"] = 200] = \"OK\";\n HttpCodes[HttpCodes[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpCodes[HttpCodes[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpCodes[HttpCodes[\"ResourceMoved\"] = 302] = \"ResourceMoved\";\n HttpCodes[HttpCodes[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpCodes[HttpCodes[\"NotModified\"] = 304] = \"NotModified\";\n HttpCodes[HttpCodes[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpCodes[HttpCodes[\"SwitchProxy\"] = 306] = \"SwitchProxy\";\n HttpCodes[HttpCodes[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpCodes[HttpCodes[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpCodes[HttpCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpCodes[HttpCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpCodes[HttpCodes[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpCodes[HttpCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpCodes[HttpCodes[\"NotFound\"] = 404] = \"NotFound\";\n HttpCodes[HttpCodes[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpCodes[HttpCodes[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpCodes[HttpCodes[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpCodes[HttpCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpCodes[HttpCodes[\"Conflict\"] = 409] = \"Conflict\";\n HttpCodes[HttpCodes[\"Gone\"] = 410] = \"Gone\";\n HttpCodes[HttpCodes[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpCodes[HttpCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpCodes[HttpCodes[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpCodes[HttpCodes[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpCodes[HttpCodes[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpCodes[HttpCodes[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));\nvar Headers;\n(function (Headers) {\n Headers[\"Accept\"] = \"accept\";\n Headers[\"ContentType\"] = \"content-type\";\n})(Headers = exports.Headers || (exports.Headers = {}));\nvar MediaTypes;\n(function (MediaTypes) {\n MediaTypes[\"ApplicationJson\"] = \"application/json\";\n})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));\n/**\n * Returns the proxy URL, depending upon the supplied url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\nfunction getProxyUrl(serverUrl) {\n let proxyUrl = pm.getProxyUrl(new URL(serverUrl));\n return proxyUrl ? proxyUrl.href : '';\n}\nexports.getProxyUrl = getProxyUrl;\nconst HttpRedirectCodes = [\n HttpCodes.MovedPermanently,\n HttpCodes.ResourceMoved,\n HttpCodes.SeeOther,\n HttpCodes.TemporaryRedirect,\n HttpCodes.PermanentRedirect\n];\nconst HttpResponseRetryCodes = [\n HttpCodes.BadGateway,\n HttpCodes.ServiceUnavailable,\n HttpCodes.GatewayTimeout\n];\nconst RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];\nconst ExponentialBackoffCeiling = 10;\nconst ExponentialBackoffTimeSlice = 5;\nclass HttpClientError extends Error {\n constructor(message, statusCode) {\n super(message);\n this.name = 'HttpClientError';\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n}\nexports.HttpClientError = HttpClientError;\nclass HttpClientResponse {\n constructor(message) {\n this.message = message;\n }\n readBody() {\n return new Promise(async (resolve, reject) => {\n let output = Buffer.alloc(0);\n this.message.on('data', (chunk) => {\n output = Buffer.concat([output, chunk]);\n });\n this.message.on('end', () => {\n resolve(output.toString());\n });\n });\n }\n}\nexports.HttpClientResponse = HttpClientResponse;\nfunction isHttps(requestUrl) {\n let parsedUrl = new URL(requestUrl);\n return parsedUrl.protocol === 'https:';\n}\nexports.isHttps = isHttps;\nclass HttpClient {\n constructor(userAgent, handlers, requestOptions) {\n this._ignoreSslError = false;\n this._allowRedirects = true;\n this._allowRedirectDowngrade = false;\n this._maxRedirects = 50;\n this._allowRetries = false;\n this._maxRetries = 1;\n this._keepAlive = false;\n this._disposed = false;\n this.userAgent = userAgent;\n this.handlers = handlers || [];\n this.requestOptions = requestOptions;\n if (requestOptions) {\n if (requestOptions.ignoreSslError != null) {\n this._ignoreSslError = requestOptions.ignoreSslError;\n }\n this._socketTimeout = requestOptions.socketTimeout;\n if (requestOptions.allowRedirects != null) {\n this._allowRedirects = requestOptions.allowRedirects;\n }\n if (requestOptions.allowRedirectDowngrade != null) {\n this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;\n }\n if (requestOptions.maxRedirects != null) {\n this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);\n }\n if (requestOptions.keepAlive != null) {\n this._keepAlive = requestOptions.keepAlive;\n }\n if (requestOptions.allowRetries != null) {\n this._allowRetries = requestOptions.allowRetries;\n }\n if (requestOptions.maxRetries != null) {\n this._maxRetries = requestOptions.maxRetries;\n }\n }\n }\n options(requestUrl, additionalHeaders) {\n return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});\n }\n get(requestUrl, additionalHeaders) {\n return this.request('GET', requestUrl, null, additionalHeaders || {});\n }\n del(requestUrl, additionalHeaders) {\n return this.request('DELETE', requestUrl, null, additionalHeaders || {});\n }\n post(requestUrl, data, additionalHeaders) {\n return this.request('POST', requestUrl, data, additionalHeaders || {});\n }\n patch(requestUrl, data, additionalHeaders) {\n return this.request('PATCH', requestUrl, data, additionalHeaders || {});\n }\n put(requestUrl, data, additionalHeaders) {\n return this.request('PUT', requestUrl, data, additionalHeaders || {});\n }\n head(requestUrl, additionalHeaders) {\n return this.request('HEAD', requestUrl, null, additionalHeaders || {});\n }\n sendStream(verb, requestUrl, stream, additionalHeaders) {\n return this.request(verb, requestUrl, stream, additionalHeaders);\n }\n /**\n * Gets a typed object from an endpoint\n * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise\n */\n async getJson(requestUrl, additionalHeaders = {}) {\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n let res = await this.get(requestUrl, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async postJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.post(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async putJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.put(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async patchJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.patch(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n /**\n * Makes a raw http request.\n * All other methods such as get, post, patch, and request ultimately call this.\n * Prefer get, del, post and patch\n */\n async request(verb, requestUrl, data, headers) {\n if (this._disposed) {\n throw new Error('Client has already been disposed.');\n }\n let parsedUrl = new URL(requestUrl);\n let info = this._prepareRequest(verb, parsedUrl, headers);\n // Only perform retries on reads since writes may not be idempotent.\n let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1\n ? this._maxRetries + 1\n : 1;\n let numTries = 0;\n let response;\n while (numTries < maxTries) {\n response = await this.requestRaw(info, data);\n // Check if it's an authentication challenge\n if (response &&\n response.message &&\n response.message.statusCode === HttpCodes.Unauthorized) {\n let authenticationHandler;\n for (let i = 0; i < this.handlers.length; i++) {\n if (this.handlers[i].canHandleAuthentication(response)) {\n authenticationHandler = this.handlers[i];\n break;\n }\n }\n if (authenticationHandler) {\n return authenticationHandler.handleAuthentication(this, info, data);\n }\n else {\n // We have received an unauthorized response but have no handlers to handle it.\n // Let the response return to the caller.\n return response;\n }\n }\n let redirectsRemaining = this._maxRedirects;\n while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&\n this._allowRedirects &&\n redirectsRemaining > 0) {\n const redirectUrl = response.message.headers['location'];\n if (!redirectUrl) {\n // if there's no location to redirect to, we won't\n break;\n }\n let parsedRedirectUrl = new URL(redirectUrl);\n if (parsedUrl.protocol == 'https:' &&\n parsedUrl.protocol != parsedRedirectUrl.protocol &&\n !this._allowRedirectDowngrade) {\n 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.');\n }\n // we need to finish reading the response before reassigning response\n // which will leak the open socket.\n await response.readBody();\n // strip authorization header if redirected to a different hostname\n if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {\n for (let header in headers) {\n // header names are case insensitive\n if (header.toLowerCase() === 'authorization') {\n delete headers[header];\n }\n }\n }\n // let's make the request with the new redirectUrl\n info = this._prepareRequest(verb, parsedRedirectUrl, headers);\n response = await this.requestRaw(info, data);\n redirectsRemaining--;\n }\n if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {\n // If not a retry code, return immediately instead of retrying\n return response;\n }\n numTries += 1;\n if (numTries < maxTries) {\n await response.readBody();\n await this._performExponentialBackoff(numTries);\n }\n }\n return response;\n }\n /**\n * Needs to be called if keepAlive is set to true in request options.\n */\n dispose() {\n if (this._agent) {\n this._agent.destroy();\n }\n this._disposed = true;\n }\n /**\n * Raw request.\n * @param info\n * @param data\n */\n requestRaw(info, data) {\n return new Promise((resolve, reject) => {\n let callbackForResult = function (err, res) {\n if (err) {\n reject(err);\n }\n resolve(res);\n };\n this.requestRawWithCallback(info, data, callbackForResult);\n });\n }\n /**\n * Raw request with callback.\n * @param info\n * @param data\n * @param onResult\n */\n requestRawWithCallback(info, data, onResult) {\n let socket;\n if (typeof data === 'string') {\n info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');\n }\n let callbackCalled = false;\n let handleResult = (err, res) => {\n if (!callbackCalled) {\n callbackCalled = true;\n onResult(err, res);\n }\n };\n let req = info.httpModule.request(info.options, (msg) => {\n let res = new HttpClientResponse(msg);\n handleResult(null, res);\n });\n req.on('socket', sock => {\n socket = sock;\n });\n // If we ever get disconnected, we want the socket to timeout eventually\n req.setTimeout(this._socketTimeout || 3 * 60000, () => {\n if (socket) {\n socket.end();\n }\n handleResult(new Error('Request timeout: ' + info.options.path), null);\n });\n req.on('error', function (err) {\n // err has statusCode property\n // res should have headers\n handleResult(err, null);\n });\n if (data && typeof data === 'string') {\n req.write(data, 'utf8');\n }\n if (data && typeof data !== 'string') {\n data.on('close', function () {\n req.end();\n });\n data.pipe(req);\n }\n else {\n req.end();\n }\n }\n /**\n * Gets an http agent. This function is useful when you need an http agent that handles\n * routing through a proxy server - depending upon the url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\n getAgent(serverUrl) {\n let parsedUrl = new URL(serverUrl);\n return this._getAgent(parsedUrl);\n }\n _prepareRequest(method, requestUrl, headers) {\n const info = {};\n info.parsedUrl = requestUrl;\n const usingSsl = info.parsedUrl.protocol === 'https:';\n info.httpModule = usingSsl ? https : http;\n const defaultPort = usingSsl ? 443 : 80;\n info.options = {};\n info.options.host = info.parsedUrl.hostname;\n info.options.port = info.parsedUrl.port\n ? parseInt(info.parsedUrl.port)\n : defaultPort;\n info.options.path =\n (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');\n info.options.method = method;\n info.options.headers = this._mergeHeaders(headers);\n if (this.userAgent != null) {\n info.options.headers['user-agent'] = this.userAgent;\n }\n info.options.agent = this._getAgent(info.parsedUrl);\n // gives handlers an opportunity to participate\n if (this.handlers) {\n this.handlers.forEach(handler => {\n handler.prepareRequest(info.options);\n });\n }\n return info;\n }\n _mergeHeaders(headers) {\n const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n if (this.requestOptions && this.requestOptions.headers) {\n return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));\n }\n return lowercaseKeys(headers || {});\n }\n _getExistingOrDefaultHeader(additionalHeaders, header, _default) {\n const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n let clientHeader;\n if (this.requestOptions && this.requestOptions.headers) {\n clientHeader = lowercaseKeys(this.requestOptions.headers)[header];\n }\n return additionalHeaders[header] || clientHeader || _default;\n }\n _getAgent(parsedUrl) {\n let agent;\n let proxyUrl = pm.getProxyUrl(parsedUrl);\n let useProxy = proxyUrl && proxyUrl.hostname;\n if (this._keepAlive && useProxy) {\n agent = this._proxyAgent;\n }\n if (this._keepAlive && !useProxy) {\n agent = this._agent;\n }\n // if agent is already assigned use that agent.\n if (!!agent) {\n return agent;\n }\n const usingSsl = parsedUrl.protocol === 'https:';\n let maxSockets = 100;\n if (!!this.requestOptions) {\n maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;\n }\n if (useProxy) {\n // If using proxy, need tunnel\n if (!tunnel) {\n tunnel = require('tunnel');\n }\n const agentOptions = {\n maxSockets: maxSockets,\n keepAlive: this._keepAlive,\n proxy: {\n ...((proxyUrl.username || proxyUrl.password) && {\n proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`\n }),\n host: proxyUrl.hostname,\n port: proxyUrl.port\n }\n };\n let tunnelAgent;\n const overHttps = proxyUrl.protocol === 'https:';\n if (usingSsl) {\n tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;\n }\n else {\n tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;\n }\n agent = tunnelAgent(agentOptions);\n this._proxyAgent = agent;\n }\n // if reusing agent across request and tunneling agent isn't assigned create a new agent\n if (this._keepAlive && !agent) {\n const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };\n agent = usingSsl ? new https.Agent(options) : new http.Agent(options);\n this._agent = agent;\n }\n // if not using private agent and tunnel agent isn't setup then use global agent\n if (!agent) {\n agent = usingSsl ? https.globalAgent : http.globalAgent;\n }\n if (usingSsl && this._ignoreSslError) {\n // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process\n // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options\n // we have to cast it to any and change it directly\n agent.options = Object.assign(agent.options || {}, {\n rejectUnauthorized: false\n });\n }\n return agent;\n }\n _performExponentialBackoff(retryNumber) {\n retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);\n const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);\n return new Promise(resolve => setTimeout(() => resolve(), ms));\n }\n static dateTimeDeserializer(key, value) {\n if (typeof value === 'string') {\n let a = new Date(value);\n if (!isNaN(a.valueOf())) {\n return a;\n }\n }\n return value;\n }\n async _processResponse(res, options) {\n return new Promise(async (resolve, reject) => {\n const statusCode = res.message.statusCode;\n const response = {\n statusCode: statusCode,\n result: null,\n headers: {}\n };\n // not found leads to null obj returned\n if (statusCode == HttpCodes.NotFound) {\n resolve(response);\n }\n let obj;\n let contents;\n // get the result from the body\n try {\n contents = await res.readBody();\n if (contents && contents.length > 0) {\n if (options && options.deserializeDates) {\n obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);\n }\n else {\n obj = JSON.parse(contents);\n }\n response.result = obj;\n }\n response.headers = res.message.headers;\n }\n catch (err) {\n // Invalid resource (contents not json); leaving result obj null\n }\n // note that 3xx redirects are handled by the http layer.\n if (statusCode > 299) {\n let msg;\n // if exception/error in body, attempt to get better error\n if (obj && obj.message) {\n msg = obj.message;\n }\n else if (contents && contents.length > 0) {\n // it may be the case that the exception is in the body message as string\n msg = contents;\n }\n else {\n msg = 'Failed request: (' + statusCode + ')';\n }\n let err = new HttpClientError(msg, statusCode);\n err.result = response.result;\n reject(err);\n }\n else {\n resolve(response);\n }\n });\n }\n}\nexports.HttpClient = HttpClient;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction getProxyUrl(reqUrl) {\n let usingSsl = reqUrl.protocol === 'https:';\n let proxyUrl;\n if (checkBypass(reqUrl)) {\n return proxyUrl;\n }\n let proxyVar;\n if (usingSsl) {\n proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];\n }\n else {\n proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];\n }\n if (proxyVar) {\n proxyUrl = new URL(proxyVar);\n }\n return proxyUrl;\n}\nexports.getProxyUrl = getProxyUrl;\nfunction checkBypass(reqUrl) {\n if (!reqUrl.hostname) {\n return false;\n }\n let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';\n if (!noProxy) {\n return false;\n }\n // Determine the request port\n let reqPort;\n if (reqUrl.port) {\n reqPort = Number(reqUrl.port);\n }\n else if (reqUrl.protocol === 'http:') {\n reqPort = 80;\n }\n else if (reqUrl.protocol === 'https:') {\n reqPort = 443;\n }\n // Format the request hostname and hostname with port\n let upperReqHosts = [reqUrl.hostname.toUpperCase()];\n if (typeof reqPort === 'number') {\n upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);\n }\n // Compare request host against noproxy\n for (let upperNoProxyItem of noProxy\n .split(',')\n .map(x => x.trim().toUpperCase())\n .filter(x => x)) {\n if (upperReqHosts.some(x => x === upperNoProxyItem)) {\n return true;\n }\n }\n return false;\n}\nexports.checkBypass = checkBypass;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst REGEX_IS_INSTALLATION_LEGACY = /^v1\\./;\nconst REGEX_IS_INSTALLATION = /^ghs_/;\nconst REGEX_IS_USER_TO_SERVER = /^ghu_/;\nasync function auth(token) {\n const isApp = token.split(/\\./).length === 3;\n const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);\n const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);\n const tokenType = isApp ? \"app\" : isInstallation ? \"installation\" : isUserToServer ? \"user-to-server\" : \"oauth\";\n return {\n type: \"token\",\n token: token,\n tokenType\n };\n}\n\n/**\n * Prefix token for usage in the Authorization header\n *\n * @param token OAuth token or JSON Web Token\n */\nfunction withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n\n return `token ${token}`;\n}\n\nasync function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(route, parameters);\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n\nconst createTokenAuth = function createTokenAuth(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n\n if (typeof token !== \"string\") {\n throw new Error(\"[@octokit/auth-token] Token passed to createTokenAuth is not a string\");\n }\n\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\n\nexports.createTokenAuth = createTokenAuth;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isPlainObject = require('is-plain-object');\nvar universalUserAgent = require('universal-user-agent');\n\nfunction lowercaseKeys(object) {\n if (!object) {\n return {};\n }\n\n return Object.keys(object).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = object[key];\n return newObj;\n }, {});\n}\n\nfunction mergeDeep(defaults, options) {\n const result = Object.assign({}, defaults);\n Object.keys(options).forEach(key => {\n if (isPlainObject.isPlainObject(options[key])) {\n if (!(key in defaults)) Object.assign(result, {\n [key]: options[key]\n });else result[key] = mergeDeep(defaults[key], options[key]);\n } else {\n Object.assign(result, {\n [key]: options[key]\n });\n }\n });\n return result;\n}\n\nfunction removeUndefinedProperties(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n\n return obj;\n}\n\nfunction merge(defaults, route, options) {\n if (typeof route === \"string\") {\n let [method, url] = route.split(\" \");\n options = Object.assign(url ? {\n method,\n url\n } : {\n url: method\n }, options);\n } else {\n options = Object.assign({}, route);\n } // lowercase header names before merging with defaults to avoid duplicates\n\n\n options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging\n\n removeUndefinedProperties(options);\n removeUndefinedProperties(options.headers);\n const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten\n\n if (defaults && defaults.mediaType.previews.length) {\n mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);\n }\n\n mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, \"\"));\n return mergedOptions;\n}\n\nfunction addQueryParameters(url, parameters) {\n const separator = /\\?/.test(url) ? \"&\" : \"?\";\n const names = Object.keys(parameters);\n\n if (names.length === 0) {\n return url;\n }\n\n return url + separator + names.map(name => {\n if (name === \"q\") {\n return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n }\n\n return `${name}=${encodeURIComponent(parameters[name])}`;\n }).join(\"&\");\n}\n\nconst urlVariableRegex = /\\{[^}]+\\}/g;\n\nfunction removeNonChars(variableName) {\n return variableName.replace(/^\\W+|\\W+$/g, \"\").split(/,/);\n}\n\nfunction extractUrlVariableNames(url) {\n const matches = url.match(urlVariableRegex);\n\n if (!matches) {\n return [];\n }\n\n return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\nfunction omit(object, keysToOmit) {\n return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {\n obj[key] = object[key];\n return obj;\n }, {});\n}\n\n// Based on https://github.com/bramstein/url-template, licensed under BSD\n// TODO: create separate package.\n//\n// Copyright (c) 2012-2014, Bram Stein\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n// 1. Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// 3. The name of the author may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\n// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/* istanbul ignore file */\nfunction encodeReserved(str) {\n return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {\n if (!/%[0-9A-Fa-f]/.test(part)) {\n part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n }\n\n return part;\n }).join(\"\");\n}\n\nfunction encodeUnreserved(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\nfunction encodeValue(operator, value, key) {\n value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n\n if (key) {\n return encodeUnreserved(key) + \"=\" + value;\n } else {\n return value;\n }\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nfunction isKeyOperator(operator) {\n return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\n\nfunction getValues(context, operator, key, modifier) {\n var value = context[key],\n result = [];\n\n if (isDefined(value) && value !== \"\") {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n value = value.toString();\n\n if (modifier && modifier !== \"*\") {\n value = value.substring(0, parseInt(modifier, 10));\n }\n\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n } else {\n if (modifier === \"*\") {\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n result.push(encodeValue(operator, value[k], k));\n }\n });\n }\n } else {\n const tmp = [];\n\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n tmp.push(encodeValue(operator, value));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n tmp.push(encodeUnreserved(k));\n tmp.push(encodeValue(operator, value[k].toString()));\n }\n });\n }\n\n if (isKeyOperator(operator)) {\n result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n } else if (tmp.length !== 0) {\n result.push(tmp.join(\",\"));\n }\n }\n }\n } else {\n if (operator === \";\") {\n if (isDefined(value)) {\n result.push(encodeUnreserved(key));\n }\n } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n result.push(encodeUnreserved(key) + \"=\");\n } else if (value === \"\") {\n result.push(\"\");\n }\n }\n\n return result;\n}\n\nfunction parseUrl(template) {\n return {\n expand: expand.bind(null, template)\n };\n}\n\nfunction expand(template, context) {\n var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n return template.replace(/\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g, function (_, expression, literal) {\n if (expression) {\n let operator = \"\";\n const values = [];\n\n if (operators.indexOf(expression.charAt(0)) !== -1) {\n operator = expression.charAt(0);\n expression = expression.substr(1);\n }\n\n expression.split(/,/g).forEach(function (variable) {\n var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n });\n\n if (operator && operator !== \"+\") {\n var separator = \",\";\n\n if (operator === \"?\") {\n separator = \"&\";\n } else if (operator !== \"#\") {\n separator = operator;\n }\n\n return (values.length !== 0 ? operator : \"\") + values.join(separator);\n } else {\n return values.join(\",\");\n }\n } else {\n return encodeReserved(literal);\n }\n });\n}\n\nfunction parse(options) {\n // https://fetch.spec.whatwg.org/#methods\n let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible\n\n let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n let headers = Object.assign({}, options.headers);\n let body;\n let parameters = omit(options, [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"mediaType\"]); // extract variable names from URL to calculate remaining variables later\n\n const urlVariableNames = extractUrlVariableNames(url);\n url = parseUrl(url).expand(parameters);\n\n if (!/^http/.test(url)) {\n url = options.baseUrl + url;\n }\n\n const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat(\"baseUrl\");\n const remainingParameters = omit(parameters, omittedParameters);\n const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n\n if (!isBinaryRequest) {\n if (options.mediaType.format) {\n // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw\n headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(\",\");\n }\n\n if (options.mediaType.previews.length) {\n const previewsFromAcceptHeader = headers.accept.match(/[\\w-]+(?=-preview)/g) || [];\n headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {\n const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n return `application/vnd.github.${preview}-preview${format}`;\n }).join(\",\");\n }\n } // for GET/HEAD requests, set URL query parameters from remaining parameters\n // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters\n\n\n if ([\"GET\", \"HEAD\"].includes(method)) {\n url = addQueryParameters(url, remainingParameters);\n } else {\n if (\"data\" in remainingParameters) {\n body = remainingParameters.data;\n } else {\n if (Object.keys(remainingParameters).length) {\n body = remainingParameters;\n } else {\n headers[\"content-length\"] = 0;\n }\n }\n } // default content-type for JSON if body is set\n\n\n if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json; charset=utf-8\";\n } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.\n // fetch does not allow to set `content-length` header, but we can set body to an empty string\n\n\n if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n body = \"\";\n } // Only return body/request keys if present\n\n\n return Object.assign({\n method,\n url,\n headers\n }, typeof body !== \"undefined\" ? {\n body\n } : null, options.request ? {\n request: options.request\n } : null);\n}\n\nfunction endpointWithDefaults(defaults, route, options) {\n return parse(merge(defaults, route, options));\n}\n\nfunction withDefaults(oldDefaults, newDefaults) {\n const DEFAULTS = merge(oldDefaults, newDefaults);\n const endpoint = endpointWithDefaults.bind(null, DEFAULTS);\n return Object.assign(endpoint, {\n DEFAULTS,\n defaults: withDefaults.bind(null, DEFAULTS),\n merge: merge.bind(null, DEFAULTS),\n parse\n });\n}\n\nconst VERSION = \"6.0.12\";\n\nconst userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.\n// So we use RequestParameters and add method as additional required property.\n\nconst DEFAULTS = {\n method: \"GET\",\n baseUrl: \"https://api.github.com\",\n headers: {\n accept: \"application/vnd.github.v3+json\",\n \"user-agent\": userAgent\n },\n mediaType: {\n format: \"\",\n previews: []\n }\n};\n\nconst endpoint = withDefaults(null, DEFAULTS);\n\nexports.endpoint = endpoint;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar request = require('@octokit/request');\nvar universalUserAgent = require('universal-user-agent');\n\nconst VERSION = \"4.8.0\";\n\nfunction _buildMessageForResponseErrors(data) {\n return `Request failed due to following response errors:\\n` + data.errors.map(e => ` - ${e.message}`).join(\"\\n\");\n}\n\nclass GraphqlResponseError extends Error {\n constructor(request, headers, response) {\n super(_buildMessageForResponseErrors(response));\n this.request = request;\n this.headers = headers;\n this.response = response;\n this.name = \"GraphqlResponseError\"; // Expose the errors and response data in their shorthand properties.\n\n this.errors = response.errors;\n this.data = response.data; // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n}\n\nconst NON_VARIABLE_OPTIONS = [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"query\", \"mediaType\"];\nconst FORBIDDEN_VARIABLE_OPTIONS = [\"query\", \"method\", \"url\"];\nconst GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request, query, options) {\n if (options) {\n if (typeof query === \"string\" && \"query\" in options) {\n return Promise.reject(new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`));\n }\n\n for (const key in options) {\n if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;\n return Promise.reject(new Error(`[@octokit/graphql] \"${key}\" cannot be used as variable name`));\n }\n }\n\n const parsedOptions = typeof query === \"string\" ? Object.assign({\n query\n }, options) : query;\n const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {\n if (NON_VARIABLE_OPTIONS.includes(key)) {\n result[key] = parsedOptions[key];\n return result;\n }\n\n if (!result.variables) {\n result.variables = {};\n }\n\n result.variables[key] = parsedOptions[key];\n return result;\n }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix\n // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451\n\n const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl;\n\n if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n }\n\n return request(requestOptions).then(response => {\n if (response.data.errors) {\n const headers = {};\n\n for (const key of Object.keys(response.headers)) {\n headers[key] = response.headers[key];\n }\n\n throw new GraphqlResponseError(requestOptions, headers, response.data);\n }\n\n return response.data.data;\n });\n}\n\nfunction withDefaults(request$1, newDefaults) {\n const newRequest = request$1.defaults(newDefaults);\n\n const newApi = (query, options) => {\n return graphql(newRequest, query, options);\n };\n\n return Object.assign(newApi, {\n defaults: withDefaults.bind(null, newRequest),\n endpoint: request.request.endpoint\n });\n}\n\nconst graphql$1 = withDefaults(request.request, {\n headers: {\n \"user-agent\": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n },\n method: \"POST\",\n url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n return withDefaults(customRequest, {\n method: \"POST\",\n url: \"/graphql\"\n });\n}\n\nexports.GraphqlResponseError = GraphqlResponseError;\nexports.graphql = graphql$1;\nexports.withCustomRequest = withCustomRequest;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst VERSION = \"1.1.2\";\n\n/**\n * Some “list” response that can be paginated have a different response structure\n *\n * They have a `total_count` key in the response (search also has `incomplete_results`,\n * /installation/repositories also has `repository_selection`), as well as a key with\n * the list of the items which name varies from endpoint to endpoint:\n *\n * - https://developer.github.com/v3/search/#example (key `items`)\n * - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`)\n * - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`)\n * - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`)\n * - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`)\n *\n * Octokit normalizes these responses so that paginated results are always returned following\n * the same structure. One challenge is that if the list response has only one page, no Link\n * header is provided, so this header alone is not sufficient to check wether a response is\n * paginated or not. For the exceptions with the namespace, a fallback check for the route\n * paths has to be added in order to normalize the response. We cannot check for the total_count\n * property because it also exists in the response of Get the combined status for a specific ref.\n */\nconst REGEX = [/^\\/search\\//, /^\\/repos\\/[^/]+\\/[^/]+\\/commits\\/[^/]+\\/(check-runs|check-suites)([^/]|$)/, /^\\/installation\\/repositories([^/]|$)/, /^\\/user\\/installations([^/]|$)/, /^\\/repos\\/[^/]+\\/[^/]+\\/actions\\/secrets([^/]|$)/, /^\\/repos\\/[^/]+\\/[^/]+\\/actions\\/workflows(\\/[^/]+\\/runs)?([^/]|$)/, /^\\/repos\\/[^/]+\\/[^/]+\\/actions\\/runs(\\/[^/]+\\/(artifacts|jobs))?([^/]|$)/];\nfunction normalizePaginatedListResponse(octokit, url, response) {\n const path = url.replace(octokit.request.endpoint.DEFAULTS.baseUrl, \"\");\n const responseNeedsNormalization = REGEX.find(regex => regex.test(path));\n if (!responseNeedsNormalization) return; // keep the additional properties intact as there is currently no other way\n // to retrieve the same information.\n\n const incompleteResults = response.data.incomplete_results;\n const repositorySelection = response.data.repository_selection;\n const totalCount = response.data.total_count;\n delete response.data.incomplete_results;\n delete response.data.repository_selection;\n delete response.data.total_count;\n const namespaceKey = Object.keys(response.data)[0];\n const data = response.data[namespaceKey];\n response.data = data;\n\n if (typeof incompleteResults !== \"undefined\") {\n response.data.incomplete_results = incompleteResults;\n }\n\n if (typeof repositorySelection !== \"undefined\") {\n response.data.repository_selection = repositorySelection;\n }\n\n response.data.total_count = totalCount;\n Object.defineProperty(response.data, namespaceKey, {\n get() {\n octokit.log.warn(`[@octokit/paginate-rest] \"response.data.${namespaceKey}\" is deprecated for \"GET ${path}\". Get the results directly from \"response.data\"`);\n return Array.from(data);\n }\n\n });\n}\n\nfunction iterator(octokit, route, parameters) {\n const options = octokit.request.endpoint(route, parameters);\n const method = options.method;\n const headers = options.headers;\n let url = options.url;\n return {\n [Symbol.asyncIterator]: () => ({\n next() {\n if (!url) {\n return Promise.resolve({\n done: true\n });\n }\n\n return octokit.request({\n method,\n url,\n headers\n }).then(response => {\n normalizePaginatedListResponse(octokit, url, response); // `response.headers.link` format:\n // '; rel=\"next\", ; rel=\"last\"'\n // sets `url` to undefined if \"next\" URL is not present or `link` header is not set\n\n url = ((response.headers.link || \"\").match(/<([^>]+)>;\\s*rel=\"next\"/) || [])[1];\n return {\n value: response\n };\n });\n }\n\n })\n };\n}\n\nfunction paginate(octokit, route, parameters, mapFn) {\n if (typeof parameters === \"function\") {\n mapFn = parameters;\n parameters = undefined;\n }\n\n return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);\n}\n\nfunction gather(octokit, results, iterator, mapFn) {\n return iterator.next().then(result => {\n if (result.done) {\n return results;\n }\n\n let earlyExit = false;\n\n function done() {\n earlyExit = true;\n }\n\n results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);\n\n if (earlyExit) {\n return results;\n }\n\n return gather(octokit, results, iterator, mapFn);\n });\n}\n\n/**\n * @param octokit Octokit instance\n * @param options Options passed to Octokit constructor\n */\n\nfunction paginateRest(octokit) {\n return {\n paginate: Object.assign(paginate.bind(null, octokit), {\n iterator: iterator.bind(null, octokit)\n })\n };\n}\npaginateRest.VERSION = VERSION;\n\nexports.paginateRest = paginateRest;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst VERSION = \"1.0.4\";\n\n/**\n * @param octokit Octokit instance\n * @param options Options passed to Octokit constructor\n */\n\nfunction requestLog(octokit) {\n octokit.hook.wrap(\"request\", (request, options) => {\n octokit.log.debug(\"request\", options);\n const start = Date.now();\n const requestOptions = octokit.request.endpoint.parse(options);\n const path = requestOptions.url.replace(options.baseUrl, \"\");\n return request(options).then(response => {\n octokit.log.info(`${requestOptions.method} ${path} - ${response.status} in ${Date.now() - start}ms`);\n return response;\n }).catch(error => {\n octokit.log.info(`${requestOptions.method} ${path} - ${error.status} in ${Date.now() - start}ms`);\n throw error;\n });\n });\n}\nrequestLog.VERSION = VERSION;\n\nexports.requestLog = requestLog;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar deprecation = require('deprecation');\n\nvar endpointsByScope = {\n actions: {\n cancelWorkflowRun: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/cancel\"\n },\n createOrUpdateSecretForRepo: {\n method: \"PUT\",\n params: {\n encrypted_value: {\n type: \"string\"\n },\n key_id: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/:name\"\n },\n createRegistrationToken: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/registration-token\"\n },\n createRemoveToken: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/remove-token\"\n },\n deleteArtifact: {\n method: \"DELETE\",\n params: {\n artifact_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/artifacts/:artifact_id\"\n },\n deleteSecretFromRepo: {\n method: \"DELETE\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/:name\"\n },\n downloadArtifact: {\n method: \"GET\",\n params: {\n archive_format: {\n required: true,\n type: \"string\"\n },\n artifact_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/artifacts/:artifact_id/:archive_format\"\n },\n getArtifact: {\n method: \"GET\",\n params: {\n artifact_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/artifacts/:artifact_id\"\n },\n getPublicKey: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/public-key\"\n },\n getSecret: {\n method: \"GET\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets/:name\"\n },\n getSelfHostedRunner: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n runner_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/:runner_id\"\n },\n getWorkflow: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n workflow_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/workflows/:workflow_id\"\n },\n getWorkflowJob: {\n method: \"GET\",\n params: {\n job_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/jobs/:job_id\"\n },\n getWorkflowRun: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id\"\n },\n listDownloadsForSelfHostedRunnerApplication: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/downloads\"\n },\n listJobsForWorkflowRun: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/jobs\"\n },\n listRepoWorkflowRuns: {\n method: \"GET\",\n params: {\n actor: {\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n event: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"completed\", \"status\", \"conclusion\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs\"\n },\n listRepoWorkflows: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/workflows\"\n },\n listSecretsForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/secrets\"\n },\n listSelfHostedRunnersForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners\"\n },\n listWorkflowJobLogs: {\n method: \"GET\",\n params: {\n job_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/actions/jobs/:job_id/logs\"\n },\n listWorkflowRunArtifacts: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/artifacts\"\n },\n listWorkflowRunLogs: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/logs\"\n },\n listWorkflowRuns: {\n method: \"GET\",\n params: {\n actor: {\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n event: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"completed\", \"status\", \"conclusion\"],\n type: \"string\"\n },\n workflow_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/workflows/:workflow_id/runs\"\n },\n reRunWorkflow: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n run_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runs/:run_id/rerun\"\n },\n removeSelfHostedRunner: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n runner_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/actions/runners/:runner_id\"\n }\n },\n activity: {\n checkStarringRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/starred/:owner/:repo\"\n },\n deleteRepoSubscription: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/subscription\"\n },\n deleteThreadSubscription: {\n method: \"DELETE\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id/subscription\"\n },\n getRepoSubscription: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/subscription\"\n },\n getThread: {\n method: \"GET\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id\"\n },\n getThreadSubscription: {\n method: \"GET\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id/subscription\"\n },\n listEventsForOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/events/orgs/:org\"\n },\n listEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/events\"\n },\n listFeeds: {\n method: \"GET\",\n params: {},\n url: \"/feeds\"\n },\n listNotifications: {\n method: \"GET\",\n params: {\n all: {\n type: \"boolean\"\n },\n before: {\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n participating: {\n type: \"boolean\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/notifications\"\n },\n listNotificationsForRepo: {\n method: \"GET\",\n params: {\n all: {\n type: \"boolean\"\n },\n before: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n participating: {\n type: \"boolean\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/notifications\"\n },\n listPublicEvents: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/events\"\n },\n listPublicEventsForOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/events\"\n },\n listPublicEventsForRepoNetwork: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/networks/:owner/:repo/events\"\n },\n listPublicEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/events/public\"\n },\n listReceivedEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/received_events\"\n },\n listReceivedPublicEventsForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/received_events/public\"\n },\n listRepoEvents: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/events\"\n },\n listReposStarredByAuthenticatedUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/user/starred\"\n },\n listReposStarredByUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/starred\"\n },\n listReposWatchedByUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/subscriptions\"\n },\n listStargazersForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stargazers\"\n },\n listWatchedReposForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/subscriptions\"\n },\n listWatchersForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/subscribers\"\n },\n markAsRead: {\n method: \"PUT\",\n params: {\n last_read_at: {\n type: \"string\"\n }\n },\n url: \"/notifications\"\n },\n markNotificationsAsReadForRepo: {\n method: \"PUT\",\n params: {\n last_read_at: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/notifications\"\n },\n markThreadAsRead: {\n method: \"PATCH\",\n params: {\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id\"\n },\n setRepoSubscription: {\n method: \"PUT\",\n params: {\n ignored: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n subscribed: {\n type: \"boolean\"\n }\n },\n url: \"/repos/:owner/:repo/subscription\"\n },\n setThreadSubscription: {\n method: \"PUT\",\n params: {\n ignored: {\n type: \"boolean\"\n },\n thread_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/notifications/threads/:thread_id/subscription\"\n },\n starRepo: {\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/starred/:owner/:repo\"\n },\n unstarRepo: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/starred/:owner/:repo\"\n }\n },\n apps: {\n addRepoToInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"PUT\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n repository_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/installations/:installation_id/repositories/:repository_id\"\n },\n checkAccountIsAssociatedWithAny: {\n method: \"GET\",\n params: {\n account_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/accounts/:account_id\"\n },\n checkAccountIsAssociatedWithAnyStubbed: {\n method: \"GET\",\n params: {\n account_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/stubbed/accounts/:account_id\"\n },\n checkAuthorization: {\n deprecated: \"octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization\",\n method: \"GET\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n checkToken: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"POST\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/token\"\n },\n createContentAttachment: {\n headers: {\n accept: \"application/vnd.github.corsair-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n content_reference_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/content_references/:content_reference_id/attachments\"\n },\n createFromManifest: {\n headers: {\n accept: \"application/vnd.github.fury-preview+json\"\n },\n method: \"POST\",\n params: {\n code: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/app-manifests/:code/conversions\"\n },\n createInstallationToken: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"POST\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n permissions: {\n type: \"object\"\n },\n repository_ids: {\n type: \"integer[]\"\n }\n },\n url: \"/app/installations/:installation_id/access_tokens\"\n },\n deleteAuthorization: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"DELETE\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/grant\"\n },\n deleteInstallation: {\n headers: {\n accept: \"application/vnd.github.gambit-preview+json,application/vnd.github.machine-man-preview+json\"\n },\n method: \"DELETE\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/app/installations/:installation_id\"\n },\n deleteToken: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"DELETE\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/token\"\n },\n findOrgInstallation: {\n deprecated: \"octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)\",\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/installation\"\n },\n findRepoInstallation: {\n deprecated: \"octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)\",\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/installation\"\n },\n findUserInstallation: {\n deprecated: \"octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)\",\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/installation\"\n },\n getAuthenticated: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {},\n url: \"/app\"\n },\n getBySlug: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n app_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/apps/:app_slug\"\n },\n getInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/app/installations/:installation_id\"\n },\n getOrgInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/installation\"\n },\n getRepoInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/installation\"\n },\n getUserInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/installation\"\n },\n listAccountsUserOrOrgOnPlan: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n plan_id: {\n required: true,\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/marketplace_listing/plans/:plan_id/accounts\"\n },\n listAccountsUserOrOrgOnPlanStubbed: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n plan_id: {\n required: true,\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/marketplace_listing/stubbed/plans/:plan_id/accounts\"\n },\n listInstallationReposForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/installations/:installation_id/repositories\"\n },\n listInstallations: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/app/installations\"\n },\n listInstallationsForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/installations\"\n },\n listMarketplacePurchasesForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/marketplace_purchases\"\n },\n listMarketplacePurchasesForAuthenticatedUserStubbed: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/marketplace_purchases/stubbed\"\n },\n listPlans: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/plans\"\n },\n listPlansStubbed: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/marketplace_listing/stubbed/plans\"\n },\n listRepos: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/installation/repositories\"\n },\n removeRepoFromInstallation: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"DELETE\",\n params: {\n installation_id: {\n required: true,\n type: \"integer\"\n },\n repository_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/installations/:installation_id/repositories/:repository_id\"\n },\n resetAuthorization: {\n deprecated: \"octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization\",\n method: \"POST\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n resetToken: {\n headers: {\n accept: \"application/vnd.github.doctor-strange-preview+json\"\n },\n method: \"PATCH\",\n params: {\n access_token: {\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/token\"\n },\n revokeAuthorizationForApplication: {\n deprecated: \"octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n revokeGrantForApplication: {\n deprecated: \"octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/grants/:access_token\"\n },\n revokeInstallationToken: {\n headers: {\n accept: \"application/vnd.github.gambit-preview+json\"\n },\n method: \"DELETE\",\n params: {},\n url: \"/installation/token\"\n }\n },\n checks: {\n create: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"POST\",\n params: {\n actions: {\n type: \"object[]\"\n },\n \"actions[].description\": {\n required: true,\n type: \"string\"\n },\n \"actions[].identifier\": {\n required: true,\n type: \"string\"\n },\n \"actions[].label\": {\n required: true,\n type: \"string\"\n },\n completed_at: {\n type: \"string\"\n },\n conclusion: {\n enum: [\"success\", \"failure\", \"neutral\", \"cancelled\", \"timed_out\", \"action_required\"],\n type: \"string\"\n },\n details_url: {\n type: \"string\"\n },\n external_id: {\n type: \"string\"\n },\n head_sha: {\n required: true,\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n output: {\n type: \"object\"\n },\n \"output.annotations\": {\n type: \"object[]\"\n },\n \"output.annotations[].annotation_level\": {\n enum: [\"notice\", \"warning\", \"failure\"],\n required: true,\n type: \"string\"\n },\n \"output.annotations[].end_column\": {\n type: \"integer\"\n },\n \"output.annotations[].end_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].message\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].path\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].raw_details\": {\n type: \"string\"\n },\n \"output.annotations[].start_column\": {\n type: \"integer\"\n },\n \"output.annotations[].start_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].title\": {\n type: \"string\"\n },\n \"output.images\": {\n type: \"object[]\"\n },\n \"output.images[].alt\": {\n required: true,\n type: \"string\"\n },\n \"output.images[].caption\": {\n type: \"string\"\n },\n \"output.images[].image_url\": {\n required: true,\n type: \"string\"\n },\n \"output.summary\": {\n required: true,\n type: \"string\"\n },\n \"output.text\": {\n type: \"string\"\n },\n \"output.title\": {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n started_at: {\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs\"\n },\n createSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"POST\",\n params: {\n head_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites\"\n },\n get: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_run_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs/:check_run_id\"\n },\n getSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_suite_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/:check_suite_id\"\n },\n listAnnotations: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_run_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs/:check_run_id/annotations\"\n },\n listForRef: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_name: {\n type: \"string\"\n },\n filter: {\n enum: [\"latest\", \"all\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/check-runs\"\n },\n listForSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n check_name: {\n type: \"string\"\n },\n check_suite_id: {\n required: true,\n type: \"integer\"\n },\n filter: {\n enum: [\"latest\", \"all\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/:check_suite_id/check-runs\"\n },\n listSuitesForRef: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"GET\",\n params: {\n app_id: {\n type: \"integer\"\n },\n check_name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/check-suites\"\n },\n rerequestSuite: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"POST\",\n params: {\n check_suite_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/:check_suite_id/rerequest\"\n },\n setSuitesPreferences: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"PATCH\",\n params: {\n auto_trigger_checks: {\n type: \"object[]\"\n },\n \"auto_trigger_checks[].app_id\": {\n required: true,\n type: \"integer\"\n },\n \"auto_trigger_checks[].setting\": {\n required: true,\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-suites/preferences\"\n },\n update: {\n headers: {\n accept: \"application/vnd.github.antiope-preview+json\"\n },\n method: \"PATCH\",\n params: {\n actions: {\n type: \"object[]\"\n },\n \"actions[].description\": {\n required: true,\n type: \"string\"\n },\n \"actions[].identifier\": {\n required: true,\n type: \"string\"\n },\n \"actions[].label\": {\n required: true,\n type: \"string\"\n },\n check_run_id: {\n required: true,\n type: \"integer\"\n },\n completed_at: {\n type: \"string\"\n },\n conclusion: {\n enum: [\"success\", \"failure\", \"neutral\", \"cancelled\", \"timed_out\", \"action_required\"],\n type: \"string\"\n },\n details_url: {\n type: \"string\"\n },\n external_id: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n output: {\n type: \"object\"\n },\n \"output.annotations\": {\n type: \"object[]\"\n },\n \"output.annotations[].annotation_level\": {\n enum: [\"notice\", \"warning\", \"failure\"],\n required: true,\n type: \"string\"\n },\n \"output.annotations[].end_column\": {\n type: \"integer\"\n },\n \"output.annotations[].end_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].message\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].path\": {\n required: true,\n type: \"string\"\n },\n \"output.annotations[].raw_details\": {\n type: \"string\"\n },\n \"output.annotations[].start_column\": {\n type: \"integer\"\n },\n \"output.annotations[].start_line\": {\n required: true,\n type: \"integer\"\n },\n \"output.annotations[].title\": {\n type: \"string\"\n },\n \"output.images\": {\n type: \"object[]\"\n },\n \"output.images[].alt\": {\n required: true,\n type: \"string\"\n },\n \"output.images[].caption\": {\n type: \"string\"\n },\n \"output.images[].image_url\": {\n required: true,\n type: \"string\"\n },\n \"output.summary\": {\n required: true,\n type: \"string\"\n },\n \"output.text\": {\n type: \"string\"\n },\n \"output.title\": {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n started_at: {\n type: \"string\"\n },\n status: {\n enum: [\"queued\", \"in_progress\", \"completed\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/check-runs/:check_run_id\"\n }\n },\n codesOfConduct: {\n getConductCode: {\n headers: {\n accept: \"application/vnd.github.scarlet-witch-preview+json\"\n },\n method: \"GET\",\n params: {\n key: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/codes_of_conduct/:key\"\n },\n getForRepo: {\n headers: {\n accept: \"application/vnd.github.scarlet-witch-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/community/code_of_conduct\"\n },\n listConductCodes: {\n headers: {\n accept: \"application/vnd.github.scarlet-witch-preview+json\"\n },\n method: \"GET\",\n params: {},\n url: \"/codes_of_conduct\"\n }\n },\n emojis: {\n get: {\n method: \"GET\",\n params: {},\n url: \"/emojis\"\n }\n },\n gists: {\n checkIsStarred: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/star\"\n },\n create: {\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n files: {\n required: true,\n type: \"object\"\n },\n \"files.content\": {\n type: \"string\"\n },\n public: {\n type: \"boolean\"\n }\n },\n url: \"/gists\"\n },\n createComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments\"\n },\n delete: {\n method: \"DELETE\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id\"\n },\n deleteComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments/:comment_id\"\n },\n fork: {\n method: \"POST\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/forks\"\n },\n get: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id\"\n },\n getComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments/:comment_id\"\n },\n getRevision: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/:sha\"\n },\n list: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/gists\"\n },\n listComments: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/gists/:gist_id/comments\"\n },\n listCommits: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/gists/:gist_id/commits\"\n },\n listForks: {\n method: \"GET\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/gists/:gist_id/forks\"\n },\n listPublic: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/gists/public\"\n },\n listPublicForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/gists\"\n },\n listStarred: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/gists/starred\"\n },\n star: {\n method: \"PUT\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/star\"\n },\n unstar: {\n method: \"DELETE\",\n params: {\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/star\"\n },\n update: {\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n files: {\n type: \"object\"\n },\n \"files.content\": {\n type: \"string\"\n },\n \"files.filename\": {\n type: \"string\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id\"\n },\n updateComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n gist_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gists/:gist_id/comments/:comment_id\"\n }\n },\n git: {\n createBlob: {\n method: \"POST\",\n params: {\n content: {\n required: true,\n type: \"string\"\n },\n encoding: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/blobs\"\n },\n createCommit: {\n method: \"POST\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.date\": {\n type: \"string\"\n },\n \"author.email\": {\n type: \"string\"\n },\n \"author.name\": {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.date\": {\n type: \"string\"\n },\n \"committer.email\": {\n type: \"string\"\n },\n \"committer.name\": {\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n parents: {\n required: true,\n type: \"string[]\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n signature: {\n type: \"string\"\n },\n tree: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/commits\"\n },\n createRef: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs\"\n },\n createTag: {\n method: \"POST\",\n params: {\n message: {\n required: true,\n type: \"string\"\n },\n object: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag: {\n required: true,\n type: \"string\"\n },\n tagger: {\n type: \"object\"\n },\n \"tagger.date\": {\n type: \"string\"\n },\n \"tagger.email\": {\n type: \"string\"\n },\n \"tagger.name\": {\n type: \"string\"\n },\n type: {\n enum: [\"commit\", \"tree\", \"blob\"],\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/tags\"\n },\n createTree: {\n method: \"POST\",\n params: {\n base_tree: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tree: {\n required: true,\n type: \"object[]\"\n },\n \"tree[].content\": {\n type: \"string\"\n },\n \"tree[].mode\": {\n enum: [\"100644\", \"100755\", \"040000\", \"160000\", \"120000\"],\n type: \"string\"\n },\n \"tree[].path\": {\n type: \"string\"\n },\n \"tree[].sha\": {\n allowNull: true,\n type: \"string\"\n },\n \"tree[].type\": {\n enum: [\"blob\", \"tree\", \"commit\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/trees\"\n },\n deleteRef: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs/:ref\"\n },\n getBlob: {\n method: \"GET\",\n params: {\n file_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/blobs/:file_sha\"\n },\n getCommit: {\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/commits/:commit_sha\"\n },\n getRef: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/ref/:ref\"\n },\n getTag: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag_sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/tags/:tag_sha\"\n },\n getTree: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n recursive: {\n enum: [\"1\"],\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tree_sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/trees/:tree_sha\"\n },\n listMatchingRefs: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/matching-refs/:ref\"\n },\n listRefs: {\n method: \"GET\",\n params: {\n namespace: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs/:namespace\"\n },\n updateRef: {\n method: \"PATCH\",\n params: {\n force: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/git/refs/:ref\"\n }\n },\n gitignore: {\n getTemplate: {\n method: \"GET\",\n params: {\n name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/gitignore/templates/:name\"\n },\n listTemplates: {\n method: \"GET\",\n params: {},\n url: \"/gitignore/templates\"\n }\n },\n interactions: {\n addOrUpdateRestrictionsForOrg: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"PUT\",\n params: {\n limit: {\n enum: [\"existing_users\", \"contributors_only\", \"collaborators_only\"],\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/interaction-limits\"\n },\n addOrUpdateRestrictionsForRepo: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"PUT\",\n params: {\n limit: {\n enum: [\"existing_users\", \"contributors_only\", \"collaborators_only\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/interaction-limits\"\n },\n getRestrictionsForOrg: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/interaction-limits\"\n },\n getRestrictionsForRepo: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/interaction-limits\"\n },\n removeRestrictionsForOrg: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/interaction-limits\"\n },\n removeRestrictionsForRepo: {\n headers: {\n accept: \"application/vnd.github.sombra-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/interaction-limits\"\n }\n },\n issues: {\n addAssignees: {\n method: \"POST\",\n params: {\n assignees: {\n type: \"string[]\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/assignees\"\n },\n addLabels: {\n method: \"POST\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n labels: {\n required: true,\n type: \"string[]\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n checkAssignee: {\n method: \"GET\",\n params: {\n assignee: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/assignees/:assignee\"\n },\n create: {\n method: \"POST\",\n params: {\n assignee: {\n type: \"string\"\n },\n assignees: {\n type: \"string[]\"\n },\n body: {\n type: \"string\"\n },\n labels: {\n type: \"string[]\"\n },\n milestone: {\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues\"\n },\n createComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/comments\"\n },\n createLabel: {\n method: \"POST\",\n params: {\n color: {\n required: true,\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels\"\n },\n createMilestone: {\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n due_on: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones\"\n },\n deleteComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id\"\n },\n deleteLabel: {\n method: \"DELETE\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels/:name\"\n },\n deleteMilestone: {\n method: \"DELETE\",\n params: {\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number\"\n },\n get: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number\"\n },\n getComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id\"\n },\n getEvent: {\n method: \"GET\",\n params: {\n event_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/events/:event_id\"\n },\n getLabel: {\n method: \"GET\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels/:name\"\n },\n getMilestone: {\n method: \"GET\",\n params: {\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number\"\n },\n list: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n filter: {\n enum: [\"assigned\", \"created\", \"mentioned\", \"subscribed\", \"all\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/issues\"\n },\n listAssignees: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/assignees\"\n },\n listComments: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/comments\"\n },\n listCommentsForRepo: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments\"\n },\n listEvents: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/events\"\n },\n listEventsForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/events\"\n },\n listEventsForTimeline: {\n headers: {\n accept: \"application/vnd.github.mockingbird-preview+json\"\n },\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/timeline\"\n },\n listForAuthenticatedUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n filter: {\n enum: [\"assigned\", \"created\", \"mentioned\", \"subscribed\", \"all\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/user/issues\"\n },\n listForOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n filter: {\n enum: [\"assigned\", \"created\", \"mentioned\", \"subscribed\", \"all\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/issues\"\n },\n listForRepo: {\n method: \"GET\",\n params: {\n assignee: {\n type: \"string\"\n },\n creator: {\n type: \"string\"\n },\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n labels: {\n type: \"string\"\n },\n mentioned: {\n type: \"string\"\n },\n milestone: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"comments\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues\"\n },\n listLabelsForMilestone: {\n method: \"GET\",\n params: {\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number/labels\"\n },\n listLabelsForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels\"\n },\n listLabelsOnIssue: {\n method: \"GET\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n listMilestonesForRepo: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"due_on\", \"completeness\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones\"\n },\n lock: {\n method: \"PUT\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n lock_reason: {\n enum: [\"off-topic\", \"too heated\", \"resolved\", \"spam\"],\n type: \"string\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/lock\"\n },\n removeAssignees: {\n method: \"DELETE\",\n params: {\n assignees: {\n type: \"string[]\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/assignees\"\n },\n removeLabel: {\n method: \"DELETE\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels/:name\"\n },\n removeLabels: {\n method: \"DELETE\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n replaceLabels: {\n method: \"PUT\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n labels: {\n type: \"string[]\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/labels\"\n },\n unlock: {\n method: \"DELETE\",\n params: {\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/lock\"\n },\n update: {\n method: \"PATCH\",\n params: {\n assignee: {\n type: \"string\"\n },\n assignees: {\n type: \"string[]\"\n },\n body: {\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n labels: {\n type: \"string[]\"\n },\n milestone: {\n allowNull: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number\"\n },\n updateComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id\"\n },\n updateLabel: {\n method: \"PATCH\",\n params: {\n color: {\n type: \"string\"\n },\n current_name: {\n required: true,\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/labels/:current_name\"\n },\n updateMilestone: {\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n due_on: {\n type: \"string\"\n },\n milestone_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"milestone_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/milestones/:milestone_number\"\n }\n },\n licenses: {\n get: {\n method: \"GET\",\n params: {\n license: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/licenses/:license\"\n },\n getForRepo: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/license\"\n },\n list: {\n deprecated: \"octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)\",\n method: \"GET\",\n params: {},\n url: \"/licenses\"\n },\n listCommonlyUsed: {\n method: \"GET\",\n params: {},\n url: \"/licenses\"\n }\n },\n markdown: {\n render: {\n method: \"POST\",\n params: {\n context: {\n type: \"string\"\n },\n mode: {\n enum: [\"markdown\", \"gfm\"],\n type: \"string\"\n },\n text: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/markdown\"\n },\n renderRaw: {\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\"\n },\n method: \"POST\",\n params: {\n data: {\n mapTo: \"data\",\n required: true,\n type: \"string\"\n }\n },\n url: \"/markdown/raw\"\n }\n },\n meta: {\n get: {\n method: \"GET\",\n params: {},\n url: \"/meta\"\n }\n },\n migrations: {\n cancelImport: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n },\n deleteArchiveForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/migrations/:migration_id/archive\"\n },\n deleteArchiveForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/archive\"\n },\n downloadArchiveForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/archive\"\n },\n getArchiveForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/migrations/:migration_id/archive\"\n },\n getArchiveForOrg: {\n deprecated: \"octokit.migrations.getArchiveForOrg() has been renamed to octokit.migrations.downloadArchiveForOrg() (2020-01-27)\",\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/archive\"\n },\n getCommitAuthors: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/authors\"\n },\n getImportProgress: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n },\n getLargeFiles: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/large_files\"\n },\n getStatusForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/migrations/:migration_id\"\n },\n getStatusForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id\"\n },\n listForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/migrations\"\n },\n listForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/migrations\"\n },\n listReposForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/repositories\"\n },\n listReposForUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"GET\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/:migration_id/repositories\"\n },\n mapCommitAuthor: {\n method: \"PATCH\",\n params: {\n author_id: {\n required: true,\n type: \"integer\"\n },\n email: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/authors/:author_id\"\n },\n setLfsPreference: {\n method: \"PATCH\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n use_lfs: {\n enum: [\"opt_in\", \"opt_out\"],\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import/lfs\"\n },\n startForAuthenticatedUser: {\n method: \"POST\",\n params: {\n exclude_attachments: {\n type: \"boolean\"\n },\n lock_repositories: {\n type: \"boolean\"\n },\n repositories: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/user/migrations\"\n },\n startForOrg: {\n method: \"POST\",\n params: {\n exclude_attachments: {\n type: \"boolean\"\n },\n lock_repositories: {\n type: \"boolean\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n repositories: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/orgs/:org/migrations\"\n },\n startImport: {\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tfvc_project: {\n type: \"string\"\n },\n vcs: {\n enum: [\"subversion\", \"git\", \"mercurial\", \"tfvc\"],\n type: \"string\"\n },\n vcs_password: {\n type: \"string\"\n },\n vcs_url: {\n required: true,\n type: \"string\"\n },\n vcs_username: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n },\n unlockRepoForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n repo_name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/migrations/:migration_id/repos/:repo_name/lock\"\n },\n unlockRepoForOrg: {\n headers: {\n accept: \"application/vnd.github.wyandotte-preview+json\"\n },\n method: \"DELETE\",\n params: {\n migration_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n repo_name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/migrations/:migration_id/repos/:repo_name/lock\"\n },\n updateImport: {\n method: \"PATCH\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n vcs_password: {\n type: \"string\"\n },\n vcs_username: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/import\"\n }\n },\n oauthAuthorizations: {\n checkAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)\",\n method: \"GET\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n createAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization\",\n method: \"POST\",\n params: {\n client_id: {\n type: \"string\"\n },\n client_secret: {\n type: \"string\"\n },\n fingerprint: {\n type: \"string\"\n },\n note: {\n required: true,\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations\"\n },\n deleteAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization\",\n method: \"DELETE\",\n params: {\n authorization_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/authorizations/:authorization_id\"\n },\n deleteGrant: {\n deprecated: \"octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant\",\n method: \"DELETE\",\n params: {\n grant_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/applications/grants/:grant_id\"\n },\n getAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization\",\n method: \"GET\",\n params: {\n authorization_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/authorizations/:authorization_id\"\n },\n getGrant: {\n deprecated: \"octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant\",\n method: \"GET\",\n params: {\n grant_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/applications/grants/:grant_id\"\n },\n getOrCreateAuthorizationForApp: {\n deprecated: \"octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app\",\n method: \"PUT\",\n params: {\n client_id: {\n required: true,\n type: \"string\"\n },\n client_secret: {\n required: true,\n type: \"string\"\n },\n fingerprint: {\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/clients/:client_id\"\n },\n getOrCreateAuthorizationForAppAndFingerprint: {\n deprecated: \"octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint\",\n method: \"PUT\",\n params: {\n client_id: {\n required: true,\n type: \"string\"\n },\n client_secret: {\n required: true,\n type: \"string\"\n },\n fingerprint: {\n required: true,\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/clients/:client_id/:fingerprint\"\n },\n getOrCreateAuthorizationForAppFingerprint: {\n deprecated: \"octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() has been renamed to octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() (2018-12-27)\",\n method: \"PUT\",\n params: {\n client_id: {\n required: true,\n type: \"string\"\n },\n client_secret: {\n required: true,\n type: \"string\"\n },\n fingerprint: {\n required: true,\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/clients/:client_id/:fingerprint\"\n },\n listAuthorizations: {\n deprecated: \"octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/authorizations\"\n },\n listGrants: {\n deprecated: \"octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/applications/grants\"\n },\n resetAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)\",\n method: \"POST\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n revokeAuthorizationForApplication: {\n deprecated: \"octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/tokens/:access_token\"\n },\n revokeGrantForApplication: {\n deprecated: \"octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)\",\n method: \"DELETE\",\n params: {\n access_token: {\n required: true,\n type: \"string\"\n },\n client_id: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/applications/:client_id/grants/:access_token\"\n },\n updateAuthorization: {\n deprecated: \"octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization\",\n method: \"PATCH\",\n params: {\n add_scopes: {\n type: \"string[]\"\n },\n authorization_id: {\n required: true,\n type: \"integer\"\n },\n fingerprint: {\n type: \"string\"\n },\n note: {\n type: \"string\"\n },\n note_url: {\n type: \"string\"\n },\n remove_scopes: {\n type: \"string[]\"\n },\n scopes: {\n type: \"string[]\"\n }\n },\n url: \"/authorizations/:authorization_id\"\n }\n },\n orgs: {\n addOrUpdateMembership: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n role: {\n enum: [\"admin\", \"member\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/memberships/:username\"\n },\n blockUser: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks/:username\"\n },\n checkBlockedUser: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks/:username\"\n },\n checkMembership: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/members/:username\"\n },\n checkPublicMembership: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/public_members/:username\"\n },\n concealMembership: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/public_members/:username\"\n },\n convertMemberToOutsideCollaborator: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/outside_collaborators/:username\"\n },\n createHook: {\n method: \"POST\",\n params: {\n active: {\n type: \"boolean\"\n },\n config: {\n required: true,\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks\"\n },\n createInvitation: {\n method: \"POST\",\n params: {\n email: {\n type: \"string\"\n },\n invitee_id: {\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n role: {\n enum: [\"admin\", \"direct_member\", \"billing_manager\"],\n type: \"string\"\n },\n team_ids: {\n type: \"integer[]\"\n }\n },\n url: \"/orgs/:org/invitations\"\n },\n deleteHook: {\n method: \"DELETE\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id\"\n },\n get: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org\"\n },\n getHook: {\n method: \"GET\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id\"\n },\n getMembership: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/memberships/:username\"\n },\n getMembershipForAuthenticatedUser: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/memberships/orgs/:org\"\n },\n list: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"integer\"\n }\n },\n url: \"/organizations\"\n },\n listBlockedUsers: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks\"\n },\n listForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/orgs\"\n },\n listForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/orgs\"\n },\n listHooks: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/hooks\"\n },\n listInstallations: {\n headers: {\n accept: \"application/vnd.github.machine-man-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/installations\"\n },\n listInvitationTeams: {\n method: \"GET\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/invitations/:invitation_id/teams\"\n },\n listMembers: {\n method: \"GET\",\n params: {\n filter: {\n enum: [\"2fa_disabled\", \"all\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"all\", \"admin\", \"member\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/members\"\n },\n listMemberships: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n state: {\n enum: [\"active\", \"pending\"],\n type: \"string\"\n }\n },\n url: \"/user/memberships/orgs\"\n },\n listOutsideCollaborators: {\n method: \"GET\",\n params: {\n filter: {\n enum: [\"2fa_disabled\", \"all\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/outside_collaborators\"\n },\n listPendingInvitations: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/invitations\"\n },\n listPublicMembers: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/public_members\"\n },\n pingHook: {\n method: \"POST\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id/pings\"\n },\n publicizeMembership: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/public_members/:username\"\n },\n removeMember: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/members/:username\"\n },\n removeMembership: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/memberships/:username\"\n },\n removeOutsideCollaborator: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/outside_collaborators/:username\"\n },\n unblockUser: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/blocks/:username\"\n },\n update: {\n method: \"PATCH\",\n params: {\n billing_email: {\n type: \"string\"\n },\n company: {\n type: \"string\"\n },\n default_repository_permission: {\n enum: [\"read\", \"write\", \"admin\", \"none\"],\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n email: {\n type: \"string\"\n },\n has_organization_projects: {\n type: \"boolean\"\n },\n has_repository_projects: {\n type: \"boolean\"\n },\n location: {\n type: \"string\"\n },\n members_allowed_repository_creation_type: {\n enum: [\"all\", \"private\", \"none\"],\n type: \"string\"\n },\n members_can_create_internal_repositories: {\n type: \"boolean\"\n },\n members_can_create_private_repositories: {\n type: \"boolean\"\n },\n members_can_create_public_repositories: {\n type: \"boolean\"\n },\n members_can_create_repositories: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org\"\n },\n updateHook: {\n method: \"PATCH\",\n params: {\n active: {\n type: \"boolean\"\n },\n config: {\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n hook_id: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/hooks/:hook_id\"\n },\n updateMembership: {\n method: \"PATCH\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"active\"],\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/memberships/orgs/:org\"\n }\n },\n projects: {\n addCollaborator: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/:project_id/collaborators/:username\"\n },\n createCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n },\n content_id: {\n type: \"integer\"\n },\n content_type: {\n type: \"string\"\n },\n note: {\n type: \"string\"\n }\n },\n url: \"/projects/columns/:column_id/cards\"\n },\n createColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n name: {\n required: true,\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id/columns\"\n },\n createForAuthenticatedUser: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/projects\"\n },\n createForOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/projects\"\n },\n createForRepo: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/projects\"\n },\n delete: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id\"\n },\n deleteCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n card_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/cards/:card_id\"\n },\n deleteColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/:column_id\"\n },\n get: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id\"\n },\n getCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n card_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/cards/:card_id\"\n },\n getColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/columns/:column_id\"\n },\n listCards: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n archived_state: {\n enum: [\"all\", \"archived\", \"not_archived\"],\n type: \"string\"\n },\n column_id: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/projects/columns/:column_id/cards\"\n },\n listCollaborators: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n affiliation: {\n enum: [\"outside\", \"direct\", \"all\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id/collaborators\"\n },\n listColumns: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/projects/:project_id/columns\"\n },\n listForOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/projects\"\n },\n listForRepo: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/projects\"\n },\n listForUser: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/projects\"\n },\n moveCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n card_id: {\n required: true,\n type: \"integer\"\n },\n column_id: {\n type: \"integer\"\n },\n position: {\n required: true,\n type: \"string\",\n validation: \"^(top|bottom|after:\\\\d+)$\"\n }\n },\n url: \"/projects/columns/cards/:card_id/moves\"\n },\n moveColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"POST\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n },\n position: {\n required: true,\n type: \"string\",\n validation: \"^(first|last|after:\\\\d+)$\"\n }\n },\n url: \"/projects/columns/:column_id/moves\"\n },\n removeCollaborator: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/:project_id/collaborators/:username\"\n },\n reviewUserPermissionLevel: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/:project_id/collaborators/:username/permission\"\n },\n update: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n organization_permission: {\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n }\n },\n url: \"/projects/:project_id\"\n },\n updateCard: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PATCH\",\n params: {\n archived: {\n type: \"boolean\"\n },\n card_id: {\n required: true,\n type: \"integer\"\n },\n note: {\n type: \"string\"\n }\n },\n url: \"/projects/columns/cards/:card_id\"\n },\n updateColumn: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PATCH\",\n params: {\n column_id: {\n required: true,\n type: \"integer\"\n },\n name: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/projects/columns/:column_id\"\n }\n },\n pulls: {\n checkIfMerged: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/merge\"\n },\n create: {\n method: \"POST\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n body: {\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n maintainer_can_modify: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls\"\n },\n createComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n commit_id: {\n required: true,\n type: \"string\"\n },\n in_reply_to: {\n deprecated: true,\n description: \"The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.\",\n type: \"integer\"\n },\n line: {\n type: \"integer\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n position: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n side: {\n enum: [\"LEFT\", \"RIGHT\"],\n type: \"string\"\n },\n start_line: {\n type: \"integer\"\n },\n start_side: {\n enum: [\"LEFT\", \"RIGHT\", \"side\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments\"\n },\n createCommentReply: {\n deprecated: \"octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n commit_id: {\n required: true,\n type: \"string\"\n },\n in_reply_to: {\n deprecated: true,\n description: \"The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.\",\n type: \"integer\"\n },\n line: {\n type: \"integer\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n position: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n side: {\n enum: [\"LEFT\", \"RIGHT\"],\n type: \"string\"\n },\n start_line: {\n type: \"integer\"\n },\n start_side: {\n enum: [\"LEFT\", \"RIGHT\", \"side\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments\"\n },\n createFromIssue: {\n deprecated: \"octokit.pulls.createFromIssue() is deprecated, see https://developer.github.com/v3/pulls/#create-a-pull-request\",\n method: \"POST\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n issue: {\n required: true,\n type: \"integer\"\n },\n maintainer_can_modify: {\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls\"\n },\n createReview: {\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n comments: {\n type: \"object[]\"\n },\n \"comments[].body\": {\n required: true,\n type: \"string\"\n },\n \"comments[].path\": {\n required: true,\n type: \"string\"\n },\n \"comments[].position\": {\n required: true,\n type: \"integer\"\n },\n commit_id: {\n type: \"string\"\n },\n event: {\n enum: [\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"],\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews\"\n },\n createReviewCommentReply: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies\"\n },\n createReviewRequest: {\n method: \"POST\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n reviewers: {\n type: \"string[]\"\n },\n team_reviewers: {\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/requested_reviewers\"\n },\n deleteComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id\"\n },\n deletePendingReview: {\n method: \"DELETE\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id\"\n },\n deleteReviewRequest: {\n method: \"DELETE\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n reviewers: {\n type: \"string[]\"\n },\n team_reviewers: {\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/requested_reviewers\"\n },\n dismissReview: {\n method: \"PUT\",\n params: {\n message: {\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals\"\n },\n get: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number\"\n },\n getComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id\"\n },\n getCommentsForReview: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments\"\n },\n getReview: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id\"\n },\n list: {\n method: \"GET\",\n params: {\n base: {\n type: \"string\"\n },\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n head: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"popularity\", \"long-running\"],\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\", \"all\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls\"\n },\n listComments: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/comments\"\n },\n listCommentsForRepo: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments\"\n },\n listCommits: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/commits\"\n },\n listFiles: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/files\"\n },\n listReviewRequests: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/requested_reviewers\"\n },\n listReviews: {\n method: \"GET\",\n params: {\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews\"\n },\n merge: {\n method: \"PUT\",\n params: {\n commit_message: {\n type: \"string\"\n },\n commit_title: {\n type: \"string\"\n },\n merge_method: {\n enum: [\"merge\", \"squash\", \"rebase\"],\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/merge\"\n },\n submitReview: {\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n event: {\n enum: [\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"],\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events\"\n },\n update: {\n method: \"PATCH\",\n params: {\n base: {\n type: \"string\"\n },\n body: {\n type: \"string\"\n },\n maintainer_can_modify: {\n type: \"boolean\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"open\", \"closed\"],\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number\"\n },\n updateBranch: {\n headers: {\n accept: \"application/vnd.github.lydian-preview+json\"\n },\n method: \"PUT\",\n params: {\n expected_head_sha: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/update-branch\"\n },\n updateComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id\"\n },\n updateReview: {\n method: \"PUT\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n number: {\n alias: \"pull_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n pull_number: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n review_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id\"\n }\n },\n rateLimit: {\n get: {\n method: \"GET\",\n params: {},\n url: \"/rate_limit\"\n }\n },\n reactions: {\n createForCommitComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id/reactions\"\n },\n createForIssue: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/reactions\"\n },\n createForIssueComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id/reactions\"\n },\n createForPullRequestReviewComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id/reactions\"\n },\n createForTeamDiscussion: {\n deprecated: \"octokit.reactions.createForTeamDiscussion() has been renamed to octokit.reactions.createForTeamDiscussionLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n },\n createForTeamDiscussionComment: {\n deprecated: \"octokit.reactions.createForTeamDiscussionComment() has been renamed to octokit.reactions.createForTeamDiscussionCommentLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n createForTeamDiscussionCommentInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n createForTeamDiscussionCommentLegacy: {\n deprecated: \"octokit.reactions.createForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-comment-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n createForTeamDiscussionInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions\"\n },\n createForTeamDiscussionLegacy: {\n deprecated: \"octokit.reactions.createForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"POST\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n },\n delete: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"DELETE\",\n params: {\n reaction_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/reactions/:reaction_id\"\n },\n listForCommitComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id/reactions\"\n },\n listForIssue: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n issue_number: {\n required: true,\n type: \"integer\"\n },\n number: {\n alias: \"issue_number\",\n deprecated: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/:issue_number/reactions\"\n },\n listForIssueComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/issues/comments/:comment_id/reactions\"\n },\n listForPullRequestReviewComment: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pulls/comments/:comment_id/reactions\"\n },\n listForTeamDiscussion: {\n deprecated: \"octokit.reactions.listForTeamDiscussion() has been renamed to octokit.reactions.listForTeamDiscussionLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n },\n listForTeamDiscussionComment: {\n deprecated: \"octokit.reactions.listForTeamDiscussionComment() has been renamed to octokit.reactions.listForTeamDiscussionCommentLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n listForTeamDiscussionCommentInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n listForTeamDiscussionCommentLegacy: {\n deprecated: \"octokit.reactions.listForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-comment-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\"\n },\n listForTeamDiscussionInOrg: {\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions\"\n },\n listForTeamDiscussionLegacy: {\n deprecated: \"octokit.reactions.listForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-legacy\",\n headers: {\n accept: \"application/vnd.github.squirrel-girl-preview+json\"\n },\n method: \"GET\",\n params: {\n content: {\n enum: [\"+1\", \"-1\", \"laugh\", \"confused\", \"heart\", \"hooray\", \"rocket\", \"eyes\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/reactions\"\n }\n },\n repos: {\n acceptInvitation: {\n method: \"PATCH\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/repository_invitations/:invitation_id\"\n },\n addCollaborator: {\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username\"\n },\n addDeployKey: {\n method: \"POST\",\n params: {\n key: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n read_only: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys\"\n },\n addProtectedBranchAdminEnforcement: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/enforce_admins\"\n },\n addProtectedBranchAppRestrictions: {\n method: \"POST\",\n params: {\n apps: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n addProtectedBranchRequiredSignatures: {\n headers: {\n accept: \"application/vnd.github.zzzax-preview+json\"\n },\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_signatures\"\n },\n addProtectedBranchRequiredStatusChecksContexts: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n addProtectedBranchTeamRestrictions: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n teams: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n addProtectedBranchUserRestrictions: {\n method: \"POST\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n users: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n checkCollaborator: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username\"\n },\n checkVulnerabilityAlerts: {\n headers: {\n accept: \"application/vnd.github.dorian-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/vulnerability-alerts\"\n },\n compareCommits: {\n method: \"GET\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/compare/:base...:head\"\n },\n createCommitComment: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n commit_sha: {\n required: true,\n type: \"string\"\n },\n line: {\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n type: \"string\"\n },\n position: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n alias: \"commit_sha\",\n deprecated: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/comments\"\n },\n createDeployment: {\n method: \"POST\",\n params: {\n auto_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n environment: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n payload: {\n type: \"string\"\n },\n production_environment: {\n type: \"boolean\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n required_contexts: {\n type: \"string[]\"\n },\n task: {\n type: \"string\"\n },\n transient_environment: {\n type: \"boolean\"\n }\n },\n url: \"/repos/:owner/:repo/deployments\"\n },\n createDeploymentStatus: {\n method: \"POST\",\n params: {\n auto_inactive: {\n type: \"boolean\"\n },\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n description: {\n type: \"string\"\n },\n environment: {\n enum: [\"production\", \"staging\", \"qa\"],\n type: \"string\"\n },\n environment_url: {\n type: \"string\"\n },\n log_url: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"error\", \"failure\", \"inactive\", \"in_progress\", \"queued\", \"pending\", \"success\"],\n required: true,\n type: \"string\"\n },\n target_url: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id/statuses\"\n },\n createDispatchEvent: {\n method: \"POST\",\n params: {\n client_payload: {\n type: \"object\"\n },\n event_type: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/dispatches\"\n },\n createFile: {\n deprecated: \"octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)\",\n method: \"PUT\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n required: true,\n type: \"string\"\n },\n \"author.name\": {\n required: true,\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n required: true,\n type: \"string\"\n },\n \"committer.name\": {\n required: true,\n type: \"string\"\n },\n content: {\n required: true,\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n createForAuthenticatedUser: {\n method: \"POST\",\n params: {\n allow_merge_commit: {\n type: \"boolean\"\n },\n allow_rebase_merge: {\n type: \"boolean\"\n },\n allow_squash_merge: {\n type: \"boolean\"\n },\n auto_init: {\n type: \"boolean\"\n },\n delete_branch_on_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n gitignore_template: {\n type: \"string\"\n },\n has_issues: {\n type: \"boolean\"\n },\n has_projects: {\n type: \"boolean\"\n },\n has_wiki: {\n type: \"boolean\"\n },\n homepage: {\n type: \"string\"\n },\n is_template: {\n type: \"boolean\"\n },\n license_template: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n type: \"integer\"\n },\n visibility: {\n enum: [\"public\", \"private\", \"visibility\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/user/repos\"\n },\n createFork: {\n method: \"POST\",\n params: {\n organization: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/forks\"\n },\n createHook: {\n method: \"POST\",\n params: {\n active: {\n type: \"boolean\"\n },\n config: {\n required: true,\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks\"\n },\n createInOrg: {\n method: \"POST\",\n params: {\n allow_merge_commit: {\n type: \"boolean\"\n },\n allow_rebase_merge: {\n type: \"boolean\"\n },\n allow_squash_merge: {\n type: \"boolean\"\n },\n auto_init: {\n type: \"boolean\"\n },\n delete_branch_on_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n gitignore_template: {\n type: \"string\"\n },\n has_issues: {\n type: \"boolean\"\n },\n has_projects: {\n type: \"boolean\"\n },\n has_wiki: {\n type: \"boolean\"\n },\n homepage: {\n type: \"string\"\n },\n is_template: {\n type: \"boolean\"\n },\n license_template: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n type: \"integer\"\n },\n visibility: {\n enum: [\"public\", \"private\", \"visibility\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/repos\"\n },\n createOrUpdateFile: {\n method: \"PUT\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n required: true,\n type: \"string\"\n },\n \"author.name\": {\n required: true,\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n required: true,\n type: \"string\"\n },\n \"committer.name\": {\n required: true,\n type: \"string\"\n },\n content: {\n required: true,\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n createRelease: {\n method: \"POST\",\n params: {\n body: {\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n prerelease: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag_name: {\n required: true,\n type: \"string\"\n },\n target_commitish: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases\"\n },\n createStatus: {\n method: \"POST\",\n params: {\n context: {\n type: \"string\"\n },\n description: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n },\n state: {\n enum: [\"error\", \"failure\", \"pending\", \"success\"],\n required: true,\n type: \"string\"\n },\n target_url: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/statuses/:sha\"\n },\n createUsingTemplate: {\n headers: {\n accept: \"application/vnd.github.baptiste-preview+json\"\n },\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n owner: {\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n template_owner: {\n required: true,\n type: \"string\"\n },\n template_repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:template_owner/:template_repo/generate\"\n },\n declineInvitation: {\n method: \"DELETE\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/repository_invitations/:invitation_id\"\n },\n delete: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo\"\n },\n deleteCommitComment: {\n method: \"DELETE\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id\"\n },\n deleteDownload: {\n method: \"DELETE\",\n params: {\n download_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/downloads/:download_id\"\n },\n deleteFile: {\n method: \"DELETE\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n type: \"string\"\n },\n \"author.name\": {\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n type: \"string\"\n },\n \"committer.name\": {\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n deleteHook: {\n method: \"DELETE\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id\"\n },\n deleteInvitation: {\n method: \"DELETE\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/invitations/:invitation_id\"\n },\n deleteRelease: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id\"\n },\n deleteReleaseAsset: {\n method: \"DELETE\",\n params: {\n asset_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/assets/:asset_id\"\n },\n disableAutomatedSecurityFixes: {\n headers: {\n accept: \"application/vnd.github.london-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/automated-security-fixes\"\n },\n disablePagesSite: {\n headers: {\n accept: \"application/vnd.github.switcheroo-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n disableVulnerabilityAlerts: {\n headers: {\n accept: \"application/vnd.github.dorian-preview+json\"\n },\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/vulnerability-alerts\"\n },\n enableAutomatedSecurityFixes: {\n headers: {\n accept: \"application/vnd.github.london-preview+json\"\n },\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/automated-security-fixes\"\n },\n enablePagesSite: {\n headers: {\n accept: \"application/vnd.github.switcheroo-preview+json\"\n },\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n source: {\n type: \"object\"\n },\n \"source.branch\": {\n enum: [\"master\", \"gh-pages\"],\n type: \"string\"\n },\n \"source.path\": {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n enableVulnerabilityAlerts: {\n headers: {\n accept: \"application/vnd.github.dorian-preview+json\"\n },\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/vulnerability-alerts\"\n },\n get: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo\"\n },\n getAppsWithAccessToProtectedBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n getArchiveLink: {\n method: \"GET\",\n params: {\n archive_format: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/:archive_format/:ref\"\n },\n getBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch\"\n },\n getBranchProtection: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection\"\n },\n getClones: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n per: {\n enum: [\"day\", \"week\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/clones\"\n },\n getCodeFrequencyStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/code_frequency\"\n },\n getCollaboratorPermissionLevel: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username/permission\"\n },\n getCombinedStatusForRef: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/status\"\n },\n getCommit: {\n method: \"GET\",\n params: {\n commit_sha: {\n alias: \"ref\",\n deprecated: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n alias: \"ref\",\n deprecated: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref\"\n },\n getCommitActivityStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/commit_activity\"\n },\n getCommitComment: {\n method: \"GET\",\n params: {\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id\"\n },\n getCommitRefSha: {\n deprecated: \"octokit.repos.getCommitRefSha() is deprecated, see https://developer.github.com/v3/repos/commits/#get-a-single-commit\",\n headers: {\n accept: \"application/vnd.github.v3.sha\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref\"\n },\n getContents: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n ref: {\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n getContributorsStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/contributors\"\n },\n getDeployKey: {\n method: \"GET\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys/:key_id\"\n },\n getDeployment: {\n method: \"GET\",\n params: {\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id\"\n },\n getDeploymentStatus: {\n method: \"GET\",\n params: {\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n status_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id\"\n },\n getDownload: {\n method: \"GET\",\n params: {\n download_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/downloads/:download_id\"\n },\n getHook: {\n method: \"GET\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id\"\n },\n getLatestPagesBuild: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds/latest\"\n },\n getLatestRelease: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/latest\"\n },\n getPages: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n getPagesBuild: {\n method: \"GET\",\n params: {\n build_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds/:build_id\"\n },\n getParticipationStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/participation\"\n },\n getProtectedBranchAdminEnforcement: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/enforce_admins\"\n },\n getProtectedBranchPullRequestReviewEnforcement: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews\"\n },\n getProtectedBranchRequiredSignatures: {\n headers: {\n accept: \"application/vnd.github.zzzax-preview+json\"\n },\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_signatures\"\n },\n getProtectedBranchRequiredStatusChecks: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks\"\n },\n getProtectedBranchRestrictions: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions\"\n },\n getPunchCardStats: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/stats/punch_card\"\n },\n getReadme: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n ref: {\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/readme\"\n },\n getRelease: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id\"\n },\n getReleaseAsset: {\n method: \"GET\",\n params: {\n asset_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/assets/:asset_id\"\n },\n getReleaseByTag: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/tags/:tag\"\n },\n getTeamsWithAccessToProtectedBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n getTopPaths: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/popular/paths\"\n },\n getTopReferrers: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/popular/referrers\"\n },\n getUsersWithAccessToProtectedBranch: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n getViews: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n per: {\n enum: [\"day\", \"week\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/traffic/views\"\n },\n list: {\n method: \"GET\",\n params: {\n affiliation: {\n type: \"string\"\n },\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"pushed\", \"full_name\"],\n type: \"string\"\n },\n type: {\n enum: [\"all\", \"owner\", \"public\", \"private\", \"member\"],\n type: \"string\"\n },\n visibility: {\n enum: [\"all\", \"public\", \"private\"],\n type: \"string\"\n }\n },\n url: \"/user/repos\"\n },\n listAppsWithAccessToProtectedBranch: {\n deprecated: \"octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n listAssetsForRelease: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id/assets\"\n },\n listBranches: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n protected: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches\"\n },\n listBranchesForHeadCommit: {\n headers: {\n accept: \"application/vnd.github.groot-preview+json\"\n },\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/branches-where-head\"\n },\n listCollaborators: {\n method: \"GET\",\n params: {\n affiliation: {\n enum: [\"outside\", \"direct\", \"all\"],\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators\"\n },\n listCommentsForCommit: {\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n alias: \"commit_sha\",\n deprecated: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/comments\"\n },\n listCommitComments: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments\"\n },\n listCommits: {\n method: \"GET\",\n params: {\n author: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n path: {\n type: \"string\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n },\n since: {\n type: \"string\"\n },\n until: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits\"\n },\n listContributors: {\n method: \"GET\",\n params: {\n anon: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contributors\"\n },\n listDeployKeys: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys\"\n },\n listDeploymentStatuses: {\n method: \"GET\",\n params: {\n deployment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments/:deployment_id/statuses\"\n },\n listDeployments: {\n method: \"GET\",\n params: {\n environment: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n },\n task: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/deployments\"\n },\n listDownloads: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/downloads\"\n },\n listForOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"pushed\", \"full_name\"],\n type: \"string\"\n },\n type: {\n enum: [\"all\", \"public\", \"private\", \"forks\", \"sources\", \"member\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/orgs/:org/repos\"\n },\n listForUser: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\", \"pushed\", \"full_name\"],\n type: \"string\"\n },\n type: {\n enum: [\"all\", \"owner\", \"member\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/repos\"\n },\n listForks: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"newest\", \"oldest\", \"stargazers\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/forks\"\n },\n listHooks: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks\"\n },\n listInvitations: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/invitations\"\n },\n listInvitationsForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/repository_invitations\"\n },\n listLanguages: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/languages\"\n },\n listPagesBuilds: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds\"\n },\n listProtectedBranchRequiredStatusChecksContexts: {\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n listProtectedBranchTeamRestrictions: {\n deprecated: \"octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n listProtectedBranchUserRestrictions: {\n deprecated: \"octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n listPublic: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"integer\"\n }\n },\n url: \"/repositories\"\n },\n listPullRequestsAssociatedWithCommit: {\n headers: {\n accept: \"application/vnd.github.groot-preview+json\"\n },\n method: \"GET\",\n params: {\n commit_sha: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:commit_sha/pulls\"\n },\n listReleases: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases\"\n },\n listStatusesForRef: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n ref: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/commits/:ref/statuses\"\n },\n listTags: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/tags\"\n },\n listTeams: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/teams\"\n },\n listTeamsWithAccessToProtectedBranch: {\n deprecated: \"octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n listTopics: {\n headers: {\n accept: \"application/vnd.github.mercy-preview+json\"\n },\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/topics\"\n },\n listUsersWithAccessToProtectedBranch: {\n deprecated: \"octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)\",\n method: \"GET\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n merge: {\n method: \"POST\",\n params: {\n base: {\n required: true,\n type: \"string\"\n },\n commit_message: {\n type: \"string\"\n },\n head: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/merges\"\n },\n pingHook: {\n method: \"POST\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id/pings\"\n },\n removeBranchProtection: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection\"\n },\n removeCollaborator: {\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/collaborators/:username\"\n },\n removeDeployKey: {\n method: \"DELETE\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/keys/:key_id\"\n },\n removeProtectedBranchAdminEnforcement: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/enforce_admins\"\n },\n removeProtectedBranchAppRestrictions: {\n method: \"DELETE\",\n params: {\n apps: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n removeProtectedBranchPullRequestReviewEnforcement: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews\"\n },\n removeProtectedBranchRequiredSignatures: {\n headers: {\n accept: \"application/vnd.github.zzzax-preview+json\"\n },\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_signatures\"\n },\n removeProtectedBranchRequiredStatusChecks: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks\"\n },\n removeProtectedBranchRequiredStatusChecksContexts: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n removeProtectedBranchRestrictions: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions\"\n },\n removeProtectedBranchTeamRestrictions: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n teams: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n removeProtectedBranchUserRestrictions: {\n method: \"DELETE\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n users: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n replaceProtectedBranchAppRestrictions: {\n method: \"PUT\",\n params: {\n apps: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/apps\"\n },\n replaceProtectedBranchRequiredStatusChecksContexts: {\n method: \"PUT\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts\"\n },\n replaceProtectedBranchTeamRestrictions: {\n method: \"PUT\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n teams: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/teams\"\n },\n replaceProtectedBranchUserRestrictions: {\n method: \"PUT\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n users: {\n mapTo: \"data\",\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/restrictions/users\"\n },\n replaceTopics: {\n headers: {\n accept: \"application/vnd.github.mercy-preview+json\"\n },\n method: \"PUT\",\n params: {\n names: {\n required: true,\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/topics\"\n },\n requestPageBuild: {\n method: \"POST\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages/builds\"\n },\n retrieveCommunityProfileMetrics: {\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/community/profile\"\n },\n testPushHook: {\n method: \"POST\",\n params: {\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id/tests\"\n },\n transfer: {\n method: \"POST\",\n params: {\n new_owner: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_ids: {\n type: \"integer[]\"\n }\n },\n url: \"/repos/:owner/:repo/transfer\"\n },\n update: {\n method: \"PATCH\",\n params: {\n allow_merge_commit: {\n type: \"boolean\"\n },\n allow_rebase_merge: {\n type: \"boolean\"\n },\n allow_squash_merge: {\n type: \"boolean\"\n },\n archived: {\n type: \"boolean\"\n },\n default_branch: {\n type: \"string\"\n },\n delete_branch_on_merge: {\n type: \"boolean\"\n },\n description: {\n type: \"string\"\n },\n has_issues: {\n type: \"boolean\"\n },\n has_projects: {\n type: \"boolean\"\n },\n has_wiki: {\n type: \"boolean\"\n },\n homepage: {\n type: \"string\"\n },\n is_template: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n visibility: {\n enum: [\"public\", \"private\", \"visibility\", \"internal\"],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo\"\n },\n updateBranchProtection: {\n method: \"PUT\",\n params: {\n allow_deletions: {\n type: \"boolean\"\n },\n allow_force_pushes: {\n allowNull: true,\n type: \"boolean\"\n },\n branch: {\n required: true,\n type: \"string\"\n },\n enforce_admins: {\n allowNull: true,\n required: true,\n type: \"boolean\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n required_linear_history: {\n type: \"boolean\"\n },\n required_pull_request_reviews: {\n allowNull: true,\n required: true,\n type: \"object\"\n },\n \"required_pull_request_reviews.dismiss_stale_reviews\": {\n type: \"boolean\"\n },\n \"required_pull_request_reviews.dismissal_restrictions\": {\n type: \"object\"\n },\n \"required_pull_request_reviews.dismissal_restrictions.teams\": {\n type: \"string[]\"\n },\n \"required_pull_request_reviews.dismissal_restrictions.users\": {\n type: \"string[]\"\n },\n \"required_pull_request_reviews.require_code_owner_reviews\": {\n type: \"boolean\"\n },\n \"required_pull_request_reviews.required_approving_review_count\": {\n type: \"integer\"\n },\n required_status_checks: {\n allowNull: true,\n required: true,\n type: \"object\"\n },\n \"required_status_checks.contexts\": {\n required: true,\n type: \"string[]\"\n },\n \"required_status_checks.strict\": {\n required: true,\n type: \"boolean\"\n },\n restrictions: {\n allowNull: true,\n required: true,\n type: \"object\"\n },\n \"restrictions.apps\": {\n type: \"string[]\"\n },\n \"restrictions.teams\": {\n required: true,\n type: \"string[]\"\n },\n \"restrictions.users\": {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection\"\n },\n updateCommitComment: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/comments/:comment_id\"\n },\n updateFile: {\n deprecated: \"octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)\",\n method: \"PUT\",\n params: {\n author: {\n type: \"object\"\n },\n \"author.email\": {\n required: true,\n type: \"string\"\n },\n \"author.name\": {\n required: true,\n type: \"string\"\n },\n branch: {\n type: \"string\"\n },\n committer: {\n type: \"object\"\n },\n \"committer.email\": {\n required: true,\n type: \"string\"\n },\n \"committer.name\": {\n required: true,\n type: \"string\"\n },\n content: {\n required: true,\n type: \"string\"\n },\n message: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n path: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n sha: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/contents/:path\"\n },\n updateHook: {\n method: \"PATCH\",\n params: {\n active: {\n type: \"boolean\"\n },\n add_events: {\n type: \"string[]\"\n },\n config: {\n type: \"object\"\n },\n \"config.content_type\": {\n type: \"string\"\n },\n \"config.insecure_ssl\": {\n type: \"string\"\n },\n \"config.secret\": {\n type: \"string\"\n },\n \"config.url\": {\n required: true,\n type: \"string\"\n },\n events: {\n type: \"string[]\"\n },\n hook_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n remove_events: {\n type: \"string[]\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/hooks/:hook_id\"\n },\n updateInformationAboutPagesSite: {\n method: \"PUT\",\n params: {\n cname: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n source: {\n enum: ['\"gh-pages\"', '\"master\"', '\"master /docs\"'],\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/pages\"\n },\n updateInvitation: {\n method: \"PATCH\",\n params: {\n invitation_id: {\n required: true,\n type: \"integer\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n permissions: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/invitations/:invitation_id\"\n },\n updateProtectedBranchPullRequestReviewEnforcement: {\n method: \"PATCH\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n dismiss_stale_reviews: {\n type: \"boolean\"\n },\n dismissal_restrictions: {\n type: \"object\"\n },\n \"dismissal_restrictions.teams\": {\n type: \"string[]\"\n },\n \"dismissal_restrictions.users\": {\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n require_code_owner_reviews: {\n type: \"boolean\"\n },\n required_approving_review_count: {\n type: \"integer\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews\"\n },\n updateProtectedBranchRequiredStatusChecks: {\n method: \"PATCH\",\n params: {\n branch: {\n required: true,\n type: \"string\"\n },\n contexts: {\n type: \"string[]\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n strict: {\n type: \"boolean\"\n }\n },\n url: \"/repos/:owner/:repo/branches/:branch/protection/required_status_checks\"\n },\n updateRelease: {\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n draft: {\n type: \"boolean\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n prerelease: {\n type: \"boolean\"\n },\n release_id: {\n required: true,\n type: \"integer\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n tag_name: {\n type: \"string\"\n },\n target_commitish: {\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/:release_id\"\n },\n updateReleaseAsset: {\n method: \"PATCH\",\n params: {\n asset_id: {\n required: true,\n type: \"integer\"\n },\n label: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/repos/:owner/:repo/releases/assets/:asset_id\"\n },\n uploadReleaseAsset: {\n method: \"POST\",\n params: {\n data: {\n mapTo: \"data\",\n required: true,\n type: \"string | object\"\n },\n file: {\n alias: \"data\",\n deprecated: true,\n type: \"string | object\"\n },\n headers: {\n required: true,\n type: \"object\"\n },\n \"headers.content-length\": {\n required: true,\n type: \"integer\"\n },\n \"headers.content-type\": {\n required: true,\n type: \"string\"\n },\n label: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n url: {\n required: true,\n type: \"string\"\n }\n },\n url: \":url\"\n }\n },\n search: {\n code: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"indexed\"],\n type: \"string\"\n }\n },\n url: \"/search/code\"\n },\n commits: {\n headers: {\n accept: \"application/vnd.github.cloak-preview+json\"\n },\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"author-date\", \"committer-date\"],\n type: \"string\"\n }\n },\n url: \"/search/commits\"\n },\n issues: {\n deprecated: \"octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)\",\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"comments\", \"reactions\", \"reactions-+1\", \"reactions--1\", \"reactions-smile\", \"reactions-thinking_face\", \"reactions-heart\", \"reactions-tada\", \"interactions\", \"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/issues\"\n },\n issuesAndPullRequests: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"comments\", \"reactions\", \"reactions-+1\", \"reactions--1\", \"reactions-smile\", \"reactions-thinking_face\", \"reactions-heart\", \"reactions-tada\", \"interactions\", \"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/issues\"\n },\n labels: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n repository_id: {\n required: true,\n type: \"integer\"\n },\n sort: {\n enum: [\"created\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/labels\"\n },\n repos: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"stars\", \"forks\", \"help-wanted-issues\", \"updated\"],\n type: \"string\"\n }\n },\n url: \"/search/repositories\"\n },\n topics: {\n method: \"GET\",\n params: {\n q: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/search/topics\"\n },\n users: {\n method: \"GET\",\n params: {\n order: {\n enum: [\"desc\", \"asc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n q: {\n required: true,\n type: \"string\"\n },\n sort: {\n enum: [\"followers\", \"repositories\", \"joined\"],\n type: \"string\"\n }\n },\n url: \"/search/users\"\n }\n },\n teams: {\n addMember: {\n deprecated: \"octokit.teams.addMember() has been renamed to octokit.teams.addMemberLegacy() (2020-01-16)\",\n method: \"PUT\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n addMemberLegacy: {\n deprecated: \"octokit.teams.addMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member-legacy\",\n method: \"PUT\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n addOrUpdateMembership: {\n deprecated: \"octokit.teams.addOrUpdateMembership() has been renamed to octokit.teams.addOrUpdateMembershipLegacy() (2020-01-16)\",\n method: \"PUT\",\n params: {\n role: {\n enum: [\"member\", \"maintainer\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n addOrUpdateMembershipInOrg: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n role: {\n enum: [\"member\", \"maintainer\"],\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/memberships/:username\"\n },\n addOrUpdateMembershipLegacy: {\n deprecated: \"octokit.teams.addOrUpdateMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-or-update-team-membership-legacy\",\n method: \"PUT\",\n params: {\n role: {\n enum: [\"member\", \"maintainer\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n addOrUpdateProject: {\n deprecated: \"octokit.teams.addOrUpdateProject() has been renamed to octokit.teams.addOrUpdateProjectLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n addOrUpdateProjectInOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects/:project_id\"\n },\n addOrUpdateProjectLegacy: {\n deprecated: \"octokit.teams.addOrUpdateProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-project-legacy\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"PUT\",\n params: {\n permission: {\n enum: [\"read\", \"write\", \"admin\"],\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n addOrUpdateRepo: {\n deprecated: \"octokit.teams.addOrUpdateRepo() has been renamed to octokit.teams.addOrUpdateRepoLegacy() (2020-01-16)\",\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n addOrUpdateRepoInOrg: {\n method: \"PUT\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos/:owner/:repo\"\n },\n addOrUpdateRepoLegacy: {\n deprecated: \"octokit.teams.addOrUpdateRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-repository-legacy\",\n method: \"PUT\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n checkManagesRepo: {\n deprecated: \"octokit.teams.checkManagesRepo() has been renamed to octokit.teams.checkManagesRepoLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n checkManagesRepoInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos/:owner/:repo\"\n },\n checkManagesRepoLegacy: {\n deprecated: \"octokit.teams.checkManagesRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository-legacy\",\n method: \"GET\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n create: {\n method: \"POST\",\n params: {\n description: {\n type: \"string\"\n },\n maintainers: {\n type: \"string[]\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n repo_names: {\n type: \"string[]\"\n }\n },\n url: \"/orgs/:org/teams\"\n },\n createDiscussion: {\n deprecated: \"octokit.teams.createDiscussion() has been renamed to octokit.teams.createDiscussionLegacy() (2020-01-16)\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n createDiscussionComment: {\n deprecated: \"octokit.teams.createDiscussionComment() has been renamed to octokit.teams.createDiscussionCommentLegacy() (2020-01-16)\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n createDiscussionCommentInOrg: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments\"\n },\n createDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.createDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#create-a-comment-legacy\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n createDiscussionInOrg: {\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions\"\n },\n createDiscussionLegacy: {\n deprecated: \"octokit.teams.createDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#create-a-discussion-legacy\",\n method: \"POST\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n private: {\n type: \"boolean\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n delete: {\n deprecated: \"octokit.teams.delete() has been renamed to octokit.teams.deleteLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n deleteDiscussion: {\n deprecated: \"octokit.teams.deleteDiscussion() has been renamed to octokit.teams.deleteDiscussionLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n deleteDiscussionComment: {\n deprecated: \"octokit.teams.deleteDiscussionComment() has been renamed to octokit.teams.deleteDiscussionCommentLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n deleteDiscussionCommentInOrg: {\n method: \"DELETE\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number\"\n },\n deleteDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.deleteDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment-legacy\",\n method: \"DELETE\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n deleteDiscussionInOrg: {\n method: \"DELETE\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number\"\n },\n deleteDiscussionLegacy: {\n deprecated: \"octokit.teams.deleteDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#delete-a-discussion-legacy\",\n method: \"DELETE\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n deleteInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug\"\n },\n deleteLegacy: {\n deprecated: \"octokit.teams.deleteLegacy() is deprecated, see https://developer.github.com/v3/teams/#delete-team-legacy\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n get: {\n deprecated: \"octokit.teams.get() has been renamed to octokit.teams.getLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n getByName: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug\"\n },\n getDiscussion: {\n deprecated: \"octokit.teams.getDiscussion() has been renamed to octokit.teams.getDiscussionLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n getDiscussionComment: {\n deprecated: \"octokit.teams.getDiscussionComment() has been renamed to octokit.teams.getDiscussionCommentLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n getDiscussionCommentInOrg: {\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number\"\n },\n getDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.getDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment-legacy\",\n method: \"GET\",\n params: {\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n getDiscussionInOrg: {\n method: \"GET\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number\"\n },\n getDiscussionLegacy: {\n deprecated: \"octokit.teams.getDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#get-a-single-discussion-legacy\",\n method: \"GET\",\n params: {\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n getLegacy: {\n deprecated: \"octokit.teams.getLegacy() is deprecated, see https://developer.github.com/v3/teams/#get-team-legacy\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n getMember: {\n deprecated: \"octokit.teams.getMember() has been renamed to octokit.teams.getMemberLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n getMemberLegacy: {\n deprecated: \"octokit.teams.getMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member-legacy\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n getMembership: {\n deprecated: \"octokit.teams.getMembership() has been renamed to octokit.teams.getMembershipLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n getMembershipInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/memberships/:username\"\n },\n getMembershipLegacy: {\n deprecated: \"octokit.teams.getMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-membership-legacy\",\n method: \"GET\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n list: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/orgs/:org/teams\"\n },\n listChild: {\n deprecated: \"octokit.teams.listChild() has been renamed to octokit.teams.listChildLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/teams\"\n },\n listChildInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/teams\"\n },\n listChildLegacy: {\n deprecated: \"octokit.teams.listChildLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-child-teams-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/teams\"\n },\n listDiscussionComments: {\n deprecated: \"octokit.teams.listDiscussionComments() has been renamed to octokit.teams.listDiscussionCommentsLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n listDiscussionCommentsInOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments\"\n },\n listDiscussionCommentsLegacy: {\n deprecated: \"octokit.teams.listDiscussionCommentsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#list-comments-legacy\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments\"\n },\n listDiscussions: {\n deprecated: \"octokit.teams.listDiscussions() has been renamed to octokit.teams.listDiscussionsLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n listDiscussionsInOrg: {\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions\"\n },\n listDiscussionsLegacy: {\n deprecated: \"octokit.teams.listDiscussionsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#list-discussions-legacy\",\n method: \"GET\",\n params: {\n direction: {\n enum: [\"asc\", \"desc\"],\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions\"\n },\n listForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/teams\"\n },\n listMembers: {\n deprecated: \"octokit.teams.listMembers() has been renamed to octokit.teams.listMembersLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"member\", \"maintainer\", \"all\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/members\"\n },\n listMembersInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"member\", \"maintainer\", \"all\"],\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/members\"\n },\n listMembersLegacy: {\n deprecated: \"octokit.teams.listMembersLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-team-members-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n role: {\n enum: [\"member\", \"maintainer\", \"all\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/members\"\n },\n listPendingInvitations: {\n deprecated: \"octokit.teams.listPendingInvitations() has been renamed to octokit.teams.listPendingInvitationsLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/invitations\"\n },\n listPendingInvitationsInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/invitations\"\n },\n listPendingInvitationsLegacy: {\n deprecated: \"octokit.teams.listPendingInvitationsLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-pending-team-invitations-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/invitations\"\n },\n listProjects: {\n deprecated: \"octokit.teams.listProjects() has been renamed to octokit.teams.listProjectsLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects\"\n },\n listProjectsInOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects\"\n },\n listProjectsLegacy: {\n deprecated: \"octokit.teams.listProjectsLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-projects-legacy\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects\"\n },\n listRepos: {\n deprecated: \"octokit.teams.listRepos() has been renamed to octokit.teams.listReposLegacy() (2020-01-16)\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos\"\n },\n listReposInOrg: {\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos\"\n },\n listReposLegacy: {\n deprecated: \"octokit.teams.listReposLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-repos-legacy\",\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos\"\n },\n removeMember: {\n deprecated: \"octokit.teams.removeMember() has been renamed to octokit.teams.removeMemberLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n removeMemberLegacy: {\n deprecated: \"octokit.teams.removeMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member-legacy\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/members/:username\"\n },\n removeMembership: {\n deprecated: \"octokit.teams.removeMembership() has been renamed to octokit.teams.removeMembershipLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n removeMembershipInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/memberships/:username\"\n },\n removeMembershipLegacy: {\n deprecated: \"octokit.teams.removeMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-membership-legacy\",\n method: \"DELETE\",\n params: {\n team_id: {\n required: true,\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/memberships/:username\"\n },\n removeProject: {\n deprecated: \"octokit.teams.removeProject() has been renamed to octokit.teams.removeProjectLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n removeProjectInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects/:project_id\"\n },\n removeProjectLegacy: {\n deprecated: \"octokit.teams.removeProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-project-legacy\",\n method: \"DELETE\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n removeRepo: {\n deprecated: \"octokit.teams.removeRepo() has been renamed to octokit.teams.removeRepoLegacy() (2020-01-16)\",\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n removeRepoInOrg: {\n method: \"DELETE\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/repos/:owner/:repo\"\n },\n removeRepoLegacy: {\n deprecated: \"octokit.teams.removeRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-repository-legacy\",\n method: \"DELETE\",\n params: {\n owner: {\n required: true,\n type: \"string\"\n },\n repo: {\n required: true,\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/repos/:owner/:repo\"\n },\n reviewProject: {\n deprecated: \"octokit.teams.reviewProject() has been renamed to octokit.teams.reviewProjectLegacy() (2020-01-16)\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n reviewProjectInOrg: {\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n org: {\n required: true,\n type: \"string\"\n },\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/projects/:project_id\"\n },\n reviewProjectLegacy: {\n deprecated: \"octokit.teams.reviewProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#review-a-team-project-legacy\",\n headers: {\n accept: \"application/vnd.github.inertia-preview+json\"\n },\n method: \"GET\",\n params: {\n project_id: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/projects/:project_id\"\n },\n update: {\n deprecated: \"octokit.teams.update() has been renamed to octokit.teams.updateLegacy() (2020-01-16)\",\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n },\n updateDiscussion: {\n deprecated: \"octokit.teams.updateDiscussion() has been renamed to octokit.teams.updateDiscussionLegacy() (2020-01-16)\",\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n updateDiscussionComment: {\n deprecated: \"octokit.teams.updateDiscussionComment() has been renamed to octokit.teams.updateDiscussionCommentLegacy() (2020-01-16)\",\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n updateDiscussionCommentInOrg: {\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number\"\n },\n updateDiscussionCommentLegacy: {\n deprecated: \"octokit.teams.updateDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment-legacy\",\n method: \"PATCH\",\n params: {\n body: {\n required: true,\n type: \"string\"\n },\n comment_number: {\n required: true,\n type: \"integer\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number/comments/:comment_number\"\n },\n updateDiscussionInOrg: {\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug/discussions/:discussion_number\"\n },\n updateDiscussionLegacy: {\n deprecated: \"octokit.teams.updateDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#edit-a-discussion-legacy\",\n method: \"PATCH\",\n params: {\n body: {\n type: \"string\"\n },\n discussion_number: {\n required: true,\n type: \"integer\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/teams/:team_id/discussions/:discussion_number\"\n },\n updateInOrg: {\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n org: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n team_slug: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/orgs/:org/teams/:team_slug\"\n },\n updateLegacy: {\n deprecated: \"octokit.teams.updateLegacy() is deprecated, see https://developer.github.com/v3/teams/#edit-team-legacy\",\n method: \"PATCH\",\n params: {\n description: {\n type: \"string\"\n },\n name: {\n required: true,\n type: \"string\"\n },\n parent_team_id: {\n type: \"integer\"\n },\n permission: {\n enum: [\"pull\", \"push\", \"admin\"],\n type: \"string\"\n },\n privacy: {\n enum: [\"secret\", \"closed\"],\n type: \"string\"\n },\n team_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/teams/:team_id\"\n }\n },\n users: {\n addEmails: {\n method: \"POST\",\n params: {\n emails: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/user/emails\"\n },\n block: {\n method: \"PUT\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/blocks/:username\"\n },\n checkBlocked: {\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/blocks/:username\"\n },\n checkFollowing: {\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/following/:username\"\n },\n checkFollowingForUser: {\n method: \"GET\",\n params: {\n target_user: {\n required: true,\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/following/:target_user\"\n },\n createGpgKey: {\n method: \"POST\",\n params: {\n armored_public_key: {\n type: \"string\"\n }\n },\n url: \"/user/gpg_keys\"\n },\n createPublicKey: {\n method: \"POST\",\n params: {\n key: {\n type: \"string\"\n },\n title: {\n type: \"string\"\n }\n },\n url: \"/user/keys\"\n },\n deleteEmails: {\n method: \"DELETE\",\n params: {\n emails: {\n required: true,\n type: \"string[]\"\n }\n },\n url: \"/user/emails\"\n },\n deleteGpgKey: {\n method: \"DELETE\",\n params: {\n gpg_key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/gpg_keys/:gpg_key_id\"\n },\n deletePublicKey: {\n method: \"DELETE\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/keys/:key_id\"\n },\n follow: {\n method: \"PUT\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/following/:username\"\n },\n getAuthenticated: {\n method: \"GET\",\n params: {},\n url: \"/user\"\n },\n getByUsername: {\n method: \"GET\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username\"\n },\n getContextForUser: {\n method: \"GET\",\n params: {\n subject_id: {\n type: \"string\"\n },\n subject_type: {\n enum: [\"organization\", \"repository\", \"issue\", \"pull_request\"],\n type: \"string\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/hovercard\"\n },\n getGpgKey: {\n method: \"GET\",\n params: {\n gpg_key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/gpg_keys/:gpg_key_id\"\n },\n getPublicKey: {\n method: \"GET\",\n params: {\n key_id: {\n required: true,\n type: \"integer\"\n }\n },\n url: \"/user/keys/:key_id\"\n },\n list: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n since: {\n type: \"string\"\n }\n },\n url: \"/users\"\n },\n listBlocked: {\n method: \"GET\",\n params: {},\n url: \"/user/blocks\"\n },\n listEmails: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/emails\"\n },\n listFollowersForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/followers\"\n },\n listFollowersForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/followers\"\n },\n listFollowingForAuthenticatedUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/following\"\n },\n listFollowingForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/following\"\n },\n listGpgKeys: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/gpg_keys\"\n },\n listGpgKeysForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/gpg_keys\"\n },\n listPublicEmails: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/public_emails\"\n },\n listPublicKeys: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n }\n },\n url: \"/user/keys\"\n },\n listPublicKeysForUser: {\n method: \"GET\",\n params: {\n page: {\n type: \"integer\"\n },\n per_page: {\n type: \"integer\"\n },\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/users/:username/keys\"\n },\n togglePrimaryEmailVisibility: {\n method: \"PATCH\",\n params: {\n email: {\n required: true,\n type: \"string\"\n },\n visibility: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/email/visibility\"\n },\n unblock: {\n method: \"DELETE\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/blocks/:username\"\n },\n unfollow: {\n method: \"DELETE\",\n params: {\n username: {\n required: true,\n type: \"string\"\n }\n },\n url: \"/user/following/:username\"\n },\n updateAuthenticated: {\n method: \"PATCH\",\n params: {\n bio: {\n type: \"string\"\n },\n blog: {\n type: \"string\"\n },\n company: {\n type: \"string\"\n },\n email: {\n type: \"string\"\n },\n hireable: {\n type: \"boolean\"\n },\n location: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n }\n },\n url: \"/user\"\n }\n }\n};\n\nconst VERSION = \"2.4.0\";\n\nfunction registerEndpoints(octokit, routes) {\n Object.keys(routes).forEach(namespaceName => {\n if (!octokit[namespaceName]) {\n octokit[namespaceName] = {};\n }\n\n Object.keys(routes[namespaceName]).forEach(apiName => {\n const apiOptions = routes[namespaceName][apiName];\n const endpointDefaults = [\"method\", \"url\", \"headers\"].reduce((map, key) => {\n if (typeof apiOptions[key] !== \"undefined\") {\n map[key] = apiOptions[key];\n }\n\n return map;\n }, {});\n endpointDefaults.request = {\n validate: apiOptions.params\n };\n let request = octokit.request.defaults(endpointDefaults); // patch request & endpoint methods to support deprecated parameters.\n // Not the most elegant solution, but we don’t want to move deprecation\n // logic into octokit/endpoint.js as it’s out of scope\n\n const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(key => apiOptions.params[key].deprecated);\n\n if (hasDeprecatedParam) {\n const patch = patchForDeprecation.bind(null, octokit, apiOptions);\n request = patch(octokit.request.defaults(endpointDefaults), `.${namespaceName}.${apiName}()`);\n request.endpoint = patch(request.endpoint, `.${namespaceName}.${apiName}.endpoint()`);\n request.endpoint.merge = patch(request.endpoint.merge, `.${namespaceName}.${apiName}.endpoint.merge()`);\n }\n\n if (apiOptions.deprecated) {\n octokit[namespaceName][apiName] = Object.assign(function deprecatedEndpointMethod() {\n octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`));\n octokit[namespaceName][apiName] = request;\n return request.apply(null, arguments);\n }, request);\n return;\n }\n\n octokit[namespaceName][apiName] = request;\n });\n });\n}\n\nfunction patchForDeprecation(octokit, apiOptions, method, methodName) {\n const patchedMethod = options => {\n options = Object.assign({}, options);\n Object.keys(options).forEach(key => {\n if (apiOptions.params[key] && apiOptions.params[key].deprecated) {\n const aliasKey = apiOptions.params[key].alias;\n octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] \"${key}\" parameter is deprecated for \"${methodName}\". Use \"${aliasKey}\" instead`));\n\n if (!(aliasKey in options)) {\n options[aliasKey] = options[key];\n }\n\n delete options[key];\n }\n });\n return method(options);\n };\n\n Object.keys(method).forEach(key => {\n patchedMethod[key] = method[key];\n });\n return patchedMethod;\n}\n\n/**\n * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary\n * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is\n * done, we will remove the registerEndpoints methods and return the methods\n * directly as with the other plugins. At that point we will also remove the\n * legacy workarounds and deprecations.\n *\n * See the plan at\n * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1\n */\n\nfunction restEndpointMethods(octokit) {\n // @ts-ignore\n octokit.registerEndpoints = registerEndpoints.bind(null, octokit);\n registerEndpoints(octokit, endpointsByScope); // Aliasing scopes for backward compatibility\n // See https://github.com/octokit/rest.js/pull/1134\n\n [[\"gitdata\", \"git\"], [\"authorization\", \"oauthAuthorizations\"], [\"pullRequests\", \"pulls\"]].forEach(([deprecatedScope, scope]) => {\n Object.defineProperty(octokit, deprecatedScope, {\n get() {\n octokit.log.warn( // @ts-ignore\n new deprecation.Deprecation(`[@octokit/plugin-rest-endpoint-methods] \"octokit.${deprecatedScope}.*\" methods are deprecated, use \"octokit.${scope}.*\" instead`)); // @ts-ignore\n\n return octokit[scope];\n }\n\n });\n });\n return {};\n}\nrestEndpointMethods.VERSION = VERSION;\n\nexports.restEndpointMethods = restEndpointMethods;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar deprecation = require('deprecation');\nvar once = _interopDefault(require('once'));\n\nconst logOnceCode = once(deprecation => console.warn(deprecation));\nconst logOnceHeaders = once(deprecation => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\n\nclass RequestError extends Error {\n constructor(message, statusCode, options) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.status = statusCode;\n let headers;\n\n if (\"headers\" in options && typeof options.headers !== \"undefined\") {\n headers = options.headers;\n }\n\n if (\"response\" in options) {\n this.response = options.response;\n headers = options.response.headers;\n } // redact request credentials without mutating original request options\n\n\n const requestCopy = Object.assign({}, options.request);\n\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n });\n }\n\n requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit\n // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\") // OAuth tokens can be passed as URL query parameters, although it is not recommended\n // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy; // deprecations\n\n Object.defineProperty(this, \"code\", {\n get() {\n logOnceCode(new deprecation.Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n return statusCode;\n }\n\n });\n Object.defineProperty(this, \"headers\", {\n get() {\n logOnceHeaders(new deprecation.Deprecation(\"[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.\"));\n return headers || {};\n }\n\n });\n }\n\n}\n\nexports.RequestError = RequestError;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar endpoint = require('@octokit/endpoint');\nvar universalUserAgent = require('universal-user-agent');\nvar isPlainObject = require('is-plain-object');\nvar nodeFetch = _interopDefault(require('node-fetch'));\nvar requestError = require('@octokit/request-error');\n\nconst VERSION = \"5.6.3\";\n\nfunction getBufferResponse(response) {\n return response.arrayBuffer();\n}\n\nfunction fetchWrapper(requestOptions) {\n const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;\n\n if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {\n requestOptions.body = JSON.stringify(requestOptions.body);\n }\n\n let headers = {};\n let status;\n let url;\n const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;\n return fetch(requestOptions.url, Object.assign({\n method: requestOptions.method,\n body: requestOptions.body,\n headers: requestOptions.headers,\n redirect: requestOptions.redirect\n }, // `requestOptions.request.agent` type is incompatible\n // see https://github.com/octokit/types.ts/pull/264\n requestOptions.request)).then(async response => {\n url = response.url;\n status = response.status;\n\n for (const keyAndValue of response.headers) {\n headers[keyAndValue[0]] = keyAndValue[1];\n }\n\n if (\"deprecation\" in headers) {\n const matches = headers.link && headers.link.match(/<([^>]+)>; rel=\"deprecation\"/);\n const deprecationLink = matches && matches.pop();\n log.warn(`[@octokit/request] \"${requestOptions.method} ${requestOptions.url}\" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : \"\"}`);\n }\n\n if (status === 204 || status === 205) {\n return;\n } // GitHub API returns 200 for HEAD requests\n\n\n if (requestOptions.method === \"HEAD\") {\n if (status < 400) {\n return;\n }\n\n throw new requestError.RequestError(response.statusText, status, {\n response: {\n url,\n status,\n headers,\n data: undefined\n },\n request: requestOptions\n });\n }\n\n if (status === 304) {\n throw new requestError.RequestError(\"Not modified\", status, {\n response: {\n url,\n status,\n headers,\n data: await getResponseData(response)\n },\n request: requestOptions\n });\n }\n\n if (status >= 400) {\n const data = await getResponseData(response);\n const error = new requestError.RequestError(toErrorMessage(data), status, {\n response: {\n url,\n status,\n headers,\n data\n },\n request: requestOptions\n });\n throw error;\n }\n\n return getResponseData(response);\n }).then(data => {\n return {\n status,\n url,\n headers,\n data\n };\n }).catch(error => {\n if (error instanceof requestError.RequestError) throw error;\n throw new requestError.RequestError(error.message, 500, {\n request: requestOptions\n });\n });\n}\n\nasync function getResponseData(response) {\n const contentType = response.headers.get(\"content-type\");\n\n if (/application\\/json/.test(contentType)) {\n return response.json();\n }\n\n if (!contentType || /^text\\/|charset=utf-8$/.test(contentType)) {\n return response.text();\n }\n\n return getBufferResponse(response);\n}\n\nfunction toErrorMessage(data) {\n if (typeof data === \"string\") return data; // istanbul ignore else - just in case\n\n if (\"message\" in data) {\n if (Array.isArray(data.errors)) {\n return `${data.message}: ${data.errors.map(JSON.stringify).join(\", \")}`;\n }\n\n return data.message;\n } // istanbul ignore next - just in case\n\n\n return `Unknown error: ${JSON.stringify(data)}`;\n}\n\nfunction withDefaults(oldEndpoint, newDefaults) {\n const endpoint = oldEndpoint.defaults(newDefaults);\n\n const newApi = function (route, parameters) {\n const endpointOptions = endpoint.merge(route, parameters);\n\n if (!endpointOptions.request || !endpointOptions.request.hook) {\n return fetchWrapper(endpoint.parse(endpointOptions));\n }\n\n const request = (route, parameters) => {\n return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));\n };\n\n Object.assign(request, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n return endpointOptions.request.hook(request, endpointOptions);\n };\n\n return Object.assign(newApi, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n}\n\nconst request = withDefaults(endpoint.endpoint, {\n headers: {\n \"user-agent\": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n }\n});\n\nexports.request = request;\n//# sourceMappingURL=index.js.map\n","const { requestLog } = require(\"@octokit/plugin-request-log\");\nconst {\n restEndpointMethods\n} = require(\"@octokit/plugin-rest-endpoint-methods\");\n\nconst Core = require(\"./lib/core\");\n\nconst CORE_PLUGINS = [\n require(\"./plugins/authentication\"),\n require(\"./plugins/authentication-deprecated\"), // deprecated: remove in v17\n requestLog,\n require(\"./plugins/pagination\"),\n restEndpointMethods,\n require(\"./plugins/validate\"),\n\n require(\"octokit-pagination-methods\") // deprecated: remove in v17\n];\n\nconst OctokitRest = Core.plugin(CORE_PLUGINS);\n\nfunction DeprecatedOctokit(options) {\n const warn =\n options && options.log && options.log.warn\n ? options.log.warn\n : console.warn;\n warn(\n '[@octokit/rest] `const Octokit = require(\"@octokit/rest\")` is deprecated. Use `const { Octokit } = require(\"@octokit/rest\")` instead'\n );\n return new OctokitRest(options);\n}\n\nconst Octokit = Object.assign(DeprecatedOctokit, {\n Octokit: OctokitRest\n});\n\nObject.keys(OctokitRest).forEach(key => {\n /* istanbul ignore else */\n if (OctokitRest.hasOwnProperty(key)) {\n Octokit[key] = OctokitRest[key];\n }\n});\n\nmodule.exports = Octokit;\n","module.exports = Octokit;\n\nconst { request } = require(\"@octokit/request\");\nconst Hook = require(\"before-after-hook\");\n\nconst parseClientOptions = require(\"./parse-client-options\");\n\nfunction Octokit(plugins, options) {\n options = options || {};\n const hook = new Hook.Collection();\n const log = Object.assign(\n {\n debug: () => {},\n info: () => {},\n warn: console.warn,\n error: console.error\n },\n options && options.log\n );\n const api = {\n hook,\n log,\n request: request.defaults(parseClientOptions(options, log, hook))\n };\n\n plugins.forEach(pluginFunction => pluginFunction(api, options));\n\n return api;\n}\n","const factory = require(\"./factory\");\n\nmodule.exports = factory();\n","module.exports = factory;\n\nconst Octokit = require(\"./constructor\");\nconst registerPlugin = require(\"./register-plugin\");\n\nfunction factory(plugins) {\n const Api = Octokit.bind(null, plugins || []);\n Api.plugin = registerPlugin.bind(null, plugins || []);\n return Api;\n}\n","module.exports = parseOptions;\n\nconst { Deprecation } = require(\"deprecation\");\nconst { getUserAgent } = require(\"universal-user-agent\");\nconst once = require(\"once\");\n\nconst pkg = require(\"../package.json\");\n\nconst deprecateOptionsTimeout = once((log, deprecation) =>\n log.warn(deprecation)\n);\nconst deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation));\nconst deprecateOptionsHeaders = once((log, deprecation) =>\n log.warn(deprecation)\n);\n\nfunction parseOptions(options, log, hook) {\n if (options.headers) {\n options.headers = Object.keys(options.headers).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = options.headers[key];\n return newObj;\n }, {});\n }\n\n const clientDefaults = {\n headers: options.headers || {},\n request: options.request || {},\n mediaType: {\n previews: [],\n format: \"\"\n }\n };\n\n if (options.baseUrl) {\n clientDefaults.baseUrl = options.baseUrl;\n }\n\n if (options.userAgent) {\n clientDefaults.headers[\"user-agent\"] = options.userAgent;\n }\n\n if (options.previews) {\n clientDefaults.mediaType.previews = options.previews;\n }\n\n if (options.timeZone) {\n clientDefaults.headers[\"time-zone\"] = options.timeZone;\n }\n\n if (options.timeout) {\n deprecateOptionsTimeout(\n log,\n new Deprecation(\n \"[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request\"\n )\n );\n clientDefaults.request.timeout = options.timeout;\n }\n\n if (options.agent) {\n deprecateOptionsAgent(\n log,\n new Deprecation(\n \"[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request\"\n )\n );\n clientDefaults.request.agent = options.agent;\n }\n\n if (options.headers) {\n deprecateOptionsHeaders(\n log,\n new Deprecation(\n \"[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request\"\n )\n );\n }\n\n const userAgentOption = clientDefaults.headers[\"user-agent\"];\n const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`;\n\n clientDefaults.headers[\"user-agent\"] = [userAgentOption, defaultUserAgent]\n .filter(Boolean)\n .join(\" \");\n\n clientDefaults.request.hook = hook.bind(null, \"request\");\n\n return clientDefaults;\n}\n","module.exports = registerPlugin;\n\nconst factory = require(\"./factory\");\n\nfunction registerPlugin(plugins, pluginFunction) {\n return factory(\n plugins.includes(pluginFunction) ? plugins : plugins.concat(pluginFunction)\n );\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar deprecation = require('deprecation');\nvar once = _interopDefault(require('once'));\n\nconst logOnce = once(deprecation => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\n\nclass RequestError extends Error {\n constructor(message, statusCode, options) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.status = statusCode;\n Object.defineProperty(this, \"code\", {\n get() {\n logOnce(new deprecation.Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n return statusCode;\n }\n\n });\n this.headers = options.headers || {}; // redact request credentials without mutating original request options\n\n const requestCopy = Object.assign({}, options.request);\n\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n });\n }\n\n requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit\n // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\") // OAuth tokens can be passed as URL query parameters, although it is not recommended\n // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy;\n }\n\n}\n\nexports.RequestError = RequestError;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar osName = _interopDefault(require('os-name'));\n\nfunction getUserAgent() {\n try {\n return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;\n } catch (error) {\n if (/wmic os get Caption/.test(error.message)) {\n return \"Windows \";\n }\n\n throw error;\n }\n}\n\nexports.getUserAgent = getUserAgent;\n//# sourceMappingURL=index.js.map\n","module.exports = authenticate;\n\nconst { Deprecation } = require(\"deprecation\");\nconst once = require(\"once\");\n\nconst deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));\n\nfunction authenticate(state, options) {\n deprecateAuthenticate(\n state.octokit.log,\n new Deprecation(\n '[@octokit/rest] octokit.authenticate() is deprecated. Use \"auth\" constructor option instead.'\n )\n );\n\n if (!options) {\n state.auth = false;\n return;\n }\n\n switch (options.type) {\n case \"basic\":\n if (!options.username || !options.password) {\n throw new Error(\n \"Basic authentication requires both a username and password to be set\"\n );\n }\n break;\n\n case \"oauth\":\n if (!options.token && !(options.key && options.secret)) {\n throw new Error(\n \"OAuth2 authentication requires a token or key & secret to be set\"\n );\n }\n break;\n\n case \"token\":\n case \"app\":\n if (!options.token) {\n throw new Error(\"Token authentication requires a token to be set\");\n }\n break;\n\n default:\n throw new Error(\n \"Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'\"\n );\n }\n\n state.auth = options;\n}\n","module.exports = authenticationBeforeRequest;\n\nconst btoa = require(\"btoa-lite\");\nconst uniq = require(\"lodash.uniq\");\n\nfunction authenticationBeforeRequest(state, options) {\n if (!state.auth.type) {\n return;\n }\n\n if (state.auth.type === \"basic\") {\n const hash = btoa(`${state.auth.username}:${state.auth.password}`);\n options.headers.authorization = `Basic ${hash}`;\n return;\n }\n\n if (state.auth.type === \"token\") {\n options.headers.authorization = `token ${state.auth.token}`;\n return;\n }\n\n if (state.auth.type === \"app\") {\n options.headers.authorization = `Bearer ${state.auth.token}`;\n const acceptHeaders = options.headers.accept\n .split(\",\")\n .concat(\"application/vnd.github.machine-man-preview+json\");\n options.headers.accept = uniq(acceptHeaders)\n .filter(Boolean)\n .join(\",\");\n return;\n }\n\n options.url += options.url.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n\n if (state.auth.token) {\n options.url += `access_token=${encodeURIComponent(state.auth.token)}`;\n return;\n }\n\n const key = encodeURIComponent(state.auth.key);\n const secret = encodeURIComponent(state.auth.secret);\n options.url += `client_id=${key}&client_secret=${secret}`;\n}\n","module.exports = authenticationPlugin;\n\nconst { Deprecation } = require(\"deprecation\");\nconst once = require(\"once\");\n\nconst deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));\n\nconst authenticate = require(\"./authenticate\");\nconst beforeRequest = require(\"./before-request\");\nconst requestError = require(\"./request-error\");\n\nfunction authenticationPlugin(octokit, options) {\n if (options.auth) {\n octokit.authenticate = () => {\n deprecateAuthenticate(\n octokit.log,\n new Deprecation(\n '[@octokit/rest] octokit.authenticate() is deprecated and has no effect when \"auth\" option is set on Octokit constructor'\n )\n );\n };\n return;\n }\n const state = {\n octokit,\n auth: false\n };\n octokit.authenticate = authenticate.bind(null, state);\n octokit.hook.before(\"request\", beforeRequest.bind(null, state));\n octokit.hook.error(\"request\", requestError.bind(null, state));\n}\n","module.exports = authenticationRequestError;\n\nconst { RequestError } = require(\"@octokit/request-error\");\n\nfunction authenticationRequestError(state, error, options) {\n /* istanbul ignore next */\n if (!error.headers) throw error;\n\n const otpRequired = /required/.test(error.headers[\"x-github-otp\"] || \"\");\n // handle \"2FA required\" error only\n if (error.status !== 401 || !otpRequired) {\n throw error;\n }\n\n if (\n error.status === 401 &&\n otpRequired &&\n error.request &&\n error.request.headers[\"x-github-otp\"]\n ) {\n throw new RequestError(\n \"Invalid one-time password for two-factor authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n\n if (typeof state.auth.on2fa !== \"function\") {\n throw new RequestError(\n \"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n\n return Promise.resolve()\n .then(() => {\n return state.auth.on2fa();\n })\n .then(oneTimePassword => {\n const newOptions = Object.assign(options, {\n headers: Object.assign(\n { \"x-github-otp\": oneTimePassword },\n options.headers\n )\n });\n return state.octokit.request(newOptions);\n });\n}\n","module.exports = authenticationBeforeRequest;\n\nconst btoa = require(\"btoa-lite\");\n\nconst withAuthorizationPrefix = require(\"./with-authorization-prefix\");\n\nfunction authenticationBeforeRequest(state, options) {\n if (typeof state.auth === \"string\") {\n options.headers.authorization = withAuthorizationPrefix(state.auth);\n return;\n }\n\n if (state.auth.username) {\n const hash = btoa(`${state.auth.username}:${state.auth.password}`);\n options.headers.authorization = `Basic ${hash}`;\n if (state.otp) {\n options.headers[\"x-github-otp\"] = state.otp;\n }\n return;\n }\n\n if (state.auth.clientId) {\n // There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as\n // Basic Authorization instead of query parameters. The only routes where that applies share the same\n // URL though: `/applications/:client_id/tokens/:access_token`.\n //\n // 1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization)\n // 2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization)\n // 3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application)\n //\n // We identify by checking the URL. It must merge both \"/applications/:client_id/tokens/:access_token\"\n // as well as \"/applications/123/tokens/token456\"\n if (/\\/applications\\/:?[\\w_]+\\/tokens\\/:?[\\w_]+($|\\?)/.test(options.url)) {\n const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`);\n options.headers.authorization = `Basic ${hash}`;\n return;\n }\n\n options.url += options.url.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`;\n return;\n }\n\n return Promise.resolve()\n\n .then(() => {\n return state.auth();\n })\n\n .then(authorization => {\n options.headers.authorization = withAuthorizationPrefix(authorization);\n });\n}\n","module.exports = authenticationPlugin;\n\nconst { createTokenAuth } = require(\"@octokit/auth-token\");\nconst { Deprecation } = require(\"deprecation\");\nconst once = require(\"once\");\n\nconst beforeRequest = require(\"./before-request\");\nconst requestError = require(\"./request-error\");\nconst validate = require(\"./validate\");\nconst withAuthorizationPrefix = require(\"./with-authorization-prefix\");\n\nconst deprecateAuthBasic = once((log, deprecation) => log.warn(deprecation));\nconst deprecateAuthObject = once((log, deprecation) => log.warn(deprecation));\n\nfunction authenticationPlugin(octokit, options) {\n // If `options.authStrategy` is set then use it and pass in `options.auth`\n if (options.authStrategy) {\n const auth = options.authStrategy(options.auth);\n octokit.hook.wrap(\"request\", auth.hook);\n octokit.auth = auth;\n return;\n }\n\n // If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance\n // is unauthenticated. The `octokit.auth()` method is a no-op and no request hook is registred.\n if (!options.auth) {\n octokit.auth = () =>\n Promise.resolve({\n type: \"unauthenticated\"\n });\n return;\n }\n\n const isBasicAuthString =\n typeof options.auth === \"string\" &&\n /^basic/.test(withAuthorizationPrefix(options.auth));\n\n // If only `options.auth` is set to a string, use the default token authentication strategy.\n if (typeof options.auth === \"string\" && !isBasicAuthString) {\n const auth = createTokenAuth(options.auth);\n octokit.hook.wrap(\"request\", auth.hook);\n octokit.auth = auth;\n return;\n }\n\n // Otherwise log a deprecation message\n const [deprecationMethod, deprecationMessapge] = isBasicAuthString\n ? [\n deprecateAuthBasic,\n 'Setting the \"new Octokit({ auth })\" option to a Basic Auth string is deprecated. Use https://github.com/octokit/auth-basic.js instead. See (https://octokit.github.io/rest.js/#authentication)'\n ]\n : [\n deprecateAuthObject,\n 'Setting the \"new Octokit({ auth })\" option to an object without also setting the \"authStrategy\" option is deprecated and will be removed in v17. See (https://octokit.github.io/rest.js/#authentication)'\n ];\n deprecationMethod(\n octokit.log,\n new Deprecation(\"[@octokit/rest] \" + deprecationMessapge)\n );\n\n octokit.auth = () =>\n Promise.resolve({\n type: \"deprecated\",\n message: deprecationMessapge\n });\n\n validate(options.auth);\n\n const state = {\n octokit,\n auth: options.auth\n };\n\n octokit.hook.before(\"request\", beforeRequest.bind(null, state));\n octokit.hook.error(\"request\", requestError.bind(null, state));\n}\n","module.exports = authenticationRequestError;\n\nconst { RequestError } = require(\"@octokit/request-error\");\n\nfunction authenticationRequestError(state, error, options) {\n if (!error.headers) throw error;\n\n const otpRequired = /required/.test(error.headers[\"x-github-otp\"] || \"\");\n // handle \"2FA required\" error only\n if (error.status !== 401 || !otpRequired) {\n throw error;\n }\n\n if (\n error.status === 401 &&\n otpRequired &&\n error.request &&\n error.request.headers[\"x-github-otp\"]\n ) {\n if (state.otp) {\n delete state.otp; // no longer valid, request again\n } else {\n throw new RequestError(\n \"Invalid one-time password for two-factor authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n }\n\n if (typeof state.auth.on2fa !== \"function\") {\n throw new RequestError(\n \"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication\",\n 401,\n {\n headers: error.headers,\n request: options\n }\n );\n }\n\n return Promise.resolve()\n .then(() => {\n return state.auth.on2fa();\n })\n .then(oneTimePassword => {\n const newOptions = Object.assign(options, {\n headers: Object.assign(options.headers, {\n \"x-github-otp\": oneTimePassword\n })\n });\n return state.octokit.request(newOptions).then(response => {\n // If OTP still valid, then persist it for following requests\n state.otp = oneTimePassword;\n return response;\n });\n });\n}\n","module.exports = validateAuth;\n\nfunction validateAuth(auth) {\n if (typeof auth === \"string\") {\n return;\n }\n\n if (typeof auth === \"function\") {\n return;\n }\n\n if (auth.username && auth.password) {\n return;\n }\n\n if (auth.clientId && auth.clientSecret) {\n return;\n }\n\n throw new Error(`Invalid \"auth\" option: ${JSON.stringify(auth)}`);\n}\n","module.exports = withAuthorizationPrefix;\n\nconst atob = require(\"atob-lite\");\n\nconst REGEX_IS_BASIC_AUTH = /^[\\w-]+:/;\n\nfunction withAuthorizationPrefix(authorization) {\n if (/^(basic|bearer|token) /i.test(authorization)) {\n return authorization;\n }\n\n try {\n if (REGEX_IS_BASIC_AUTH.test(atob(authorization))) {\n return `basic ${authorization}`;\n }\n } catch (error) {}\n\n if (authorization.split(/\\./).length === 3) {\n return `bearer ${authorization}`;\n }\n\n return `token ${authorization}`;\n}\n","module.exports = paginatePlugin;\n\nconst { paginateRest } = require(\"@octokit/plugin-paginate-rest\");\n\nfunction paginatePlugin(octokit) {\n Object.assign(octokit, paginateRest(octokit));\n}\n","module.exports = octokitValidate;\n\nconst validate = require(\"./validate\");\n\nfunction octokitValidate(octokit) {\n octokit.hook.before(\"request\", validate.bind(null, octokit));\n}\n","\"use strict\";\n\nmodule.exports = validate;\n\nconst { RequestError } = require(\"@octokit/request-error\");\nconst get = require(\"lodash.get\");\nconst set = require(\"lodash.set\");\n\nfunction validate(octokit, options) {\n if (!options.request.validate) {\n return;\n }\n const { validate: params } = options.request;\n\n Object.keys(params).forEach(parameterName => {\n const parameter = get(params, parameterName);\n\n const expectedType = parameter.type;\n let parentParameterName;\n let parentValue;\n let parentParamIsPresent = true;\n let parentParameterIsArray = false;\n\n if (/\\./.test(parameterName)) {\n parentParameterName = parameterName.replace(/\\.[^.]+$/, \"\");\n parentParameterIsArray = parentParameterName.slice(-2) === \"[]\";\n if (parentParameterIsArray) {\n parentParameterName = parentParameterName.slice(0, -2);\n }\n parentValue = get(options, parentParameterName);\n parentParamIsPresent =\n parentParameterName === \"headers\" ||\n (typeof parentValue === \"object\" && parentValue !== null);\n }\n\n const values = parentParameterIsArray\n ? (get(options, parentParameterName) || []).map(\n value => value[parameterName.split(/\\./).pop()]\n )\n : [get(options, parameterName)];\n\n values.forEach((value, i) => {\n const valueIsPresent = typeof value !== \"undefined\";\n const valueIsNull = value === null;\n const currentParameterName = parentParameterIsArray\n ? parameterName.replace(/\\[\\]/, `[${i}]`)\n : parameterName;\n\n if (!parameter.required && !valueIsPresent) {\n return;\n }\n\n // if the parent parameter is of type object but allows null\n // then the child parameters can be ignored\n if (!parentParamIsPresent) {\n return;\n }\n\n if (parameter.allowNull && valueIsNull) {\n return;\n }\n\n if (!parameter.allowNull && valueIsNull) {\n throw new RequestError(\n `'${currentParameterName}' cannot be null`,\n 400,\n {\n request: options\n }\n );\n }\n\n if (parameter.required && !valueIsPresent) {\n throw new RequestError(\n `Empty value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n\n // parse to integer before checking for enum\n // so that string \"1\" will match enum with number 1\n if (expectedType === \"integer\") {\n const unparsedValue = value;\n value = parseInt(value, 10);\n if (isNaN(value)) {\n throw new RequestError(\n `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(\n unparsedValue\n )} is NaN`,\n 400,\n {\n request: options\n }\n );\n }\n }\n\n if (parameter.enum && parameter.enum.indexOf(String(value)) === -1) {\n throw new RequestError(\n `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n\n if (parameter.validation) {\n const regex = new RegExp(parameter.validation);\n if (!regex.test(value)) {\n throw new RequestError(\n `Invalid value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n }\n\n if (expectedType === \"object\" && typeof value === \"string\") {\n try {\n value = JSON.parse(value);\n } catch (exception) {\n throw new RequestError(\n `JSON parse error of value for parameter '${currentParameterName}': ${JSON.stringify(\n value\n )}`,\n 400,\n {\n request: options\n }\n );\n }\n }\n\n set(options, parameter.mapTo || currentParameterName, value);\n });\n });\n\n return options;\n}\n","module.exports = function atob(str) {\n return Buffer.from(str, 'base64').toString('binary')\n}\n","var register = require('./lib/register')\nvar addHook = require('./lib/add')\nvar removeHook = require('./lib/remove')\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nvar bind = Function.bind\nvar bindable = bind.bind(bind)\n\nfunction bindApi (hook, state, name) {\n var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])\n hook.api = { remove: removeHookRef }\n hook.remove = removeHookRef\n\n ;['before', 'error', 'after', 'wrap'].forEach(function (kind) {\n var args = name ? [state, kind, name] : [state, kind]\n hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)\n })\n}\n\nfunction HookSingular () {\n var singularHookName = 'h'\n var singularHookState = {\n registry: {}\n }\n var singularHook = register.bind(null, singularHookState, singularHookName)\n bindApi(singularHook, singularHookState, singularHookName)\n return singularHook\n}\n\nfunction HookCollection () {\n var state = {\n registry: {}\n }\n\n var hook = register.bind(null, state)\n bindApi(hook, state)\n\n return hook\n}\n\nvar collectionHookDeprecationMessageDisplayed = false\nfunction Hook () {\n if (!collectionHookDeprecationMessageDisplayed) {\n console.warn('[before-after-hook]: \"Hook()\" repurposing warning, use \"Hook.Collection()\". Read more: https://git.io/upgrade-before-after-hook-to-1.4')\n collectionHookDeprecationMessageDisplayed = true\n }\n return HookCollection()\n}\n\nHook.Singular = HookSingular.bind()\nHook.Collection = HookCollection.bind()\n\nmodule.exports = Hook\n// expose constructors as a named property for TypeScript\nmodule.exports.Hook = Hook\nmodule.exports.Singular = Hook.Singular\nmodule.exports.Collection = Hook.Collection\n","module.exports = addHook;\n\nfunction addHook(state, kind, name, hook) {\n var orig = hook;\n if (!state.registry[name]) {\n state.registry[name] = [];\n }\n\n if (kind === \"before\") {\n hook = function (method, options) {\n return Promise.resolve()\n .then(orig.bind(null, options))\n .then(method.bind(null, options));\n };\n }\n\n if (kind === \"after\") {\n hook = function (method, options) {\n var result;\n return Promise.resolve()\n .then(method.bind(null, options))\n .then(function (result_) {\n result = result_;\n return orig(result, options);\n })\n .then(function () {\n return result;\n });\n };\n }\n\n if (kind === \"error\") {\n hook = function (method, options) {\n return Promise.resolve()\n .then(method.bind(null, options))\n .catch(function (error) {\n return orig(error, options);\n });\n };\n }\n\n state.registry[name].push({\n hook: hook,\n orig: orig,\n });\n}\n","module.exports = register;\n\nfunction register(state, name, method, options) {\n if (typeof method !== \"function\") {\n throw new Error(\"method for before hook must be a function\");\n }\n\n if (!options) {\n options = {};\n }\n\n if (Array.isArray(name)) {\n return name.reverse().reduce(function (callback, name) {\n return register.bind(null, state, name, callback, options);\n }, method)();\n }\n\n return Promise.resolve().then(function () {\n if (!state.registry[name]) {\n return method(options);\n }\n\n return state.registry[name].reduce(function (method, registered) {\n return registered.hook.bind(null, method, options);\n }, method)();\n });\n}\n","module.exports = removeHook;\n\nfunction removeHook(state, name, method) {\n if (!state.registry[name]) {\n return;\n }\n\n var index = state.registry[name]\n .map(function (registered) {\n return registered.orig;\n })\n .indexOf(method);\n\n if (index === -1) {\n return;\n }\n\n state.registry[name].splice(index, 1);\n}\n","module.exports = function btoa(str) {\n return new Buffer(str).toString('base64')\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass Deprecation extends Error {\n constructor(message) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = 'Deprecation';\n }\n\n}\n\nexports.Deprecation = Deprecation;\n","var once = require('once');\n\nvar noop = function() {};\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tprocess.nextTick(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n","'use strict';\nconst {PassThrough} = require('stream');\n\nmodule.exports = options => {\n\toptions = Object.assign({}, options);\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst buffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || buffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (buffer) {\n\t\tencoding = null;\n\t}\n\n\tlet len = 0;\n\tconst ret = [];\n\tconst stream = new PassThrough({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tstream.on('data', chunk => {\n\t\tret.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlen = ret.length;\n\t\t} else {\n\t\t\tlen += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn buffer ? Buffer.concat(ret, len) : ret.join('');\n\t};\n\n\tstream.getBufferedLength = () => len;\n\n\treturn stream;\n};\n","'use strict';\nconst pump = require('pump');\nconst bufferStream = require('./buffer-stream');\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nfunction getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\treturn Promise.reject(new Error('Expected a stream'));\n\t}\n\n\toptions = Object.assign({maxBuffer: Infinity}, options);\n\n\tconst {maxBuffer} = options;\n\n\tlet stream;\n\treturn new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\tif (error) { // A null check\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\t\t\treject(error);\n\t\t};\n\n\t\tstream = pump(inputStream, bufferStream(options), error => {\n\t\t\tif (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t});\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t}).then(() => stream.getBufferedValue());\n}\n\nmodule.exports = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'}));\nmodule.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true}));\nmodule.exports.MaxBufferError = MaxBufferError;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n core = require('./windows.js')\n} else {\n core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n if (!cb) {\n if (typeof Promise !== 'function') {\n throw new TypeError('callback not provided')\n }\n\n return new Promise(function (resolve, reject) {\n isexe(path, options || {}, function (er, is) {\n if (er) {\n reject(er)\n } else {\n resolve(is)\n }\n })\n })\n }\n\n core(path, options || {}, function (er, is) {\n // ignore EACCES because that just means we aren't allowed to run it\n if (er) {\n if (er.code === 'EACCES' || options && options.ignoreErrors) {\n er = null\n is = false\n }\n }\n cb(er, is)\n })\n}\n\nfunction sync (path, options) {\n // my kingdom for a filtered catch\n try {\n return core.sync(path, options || {})\n } catch (er) {\n if (options && options.ignoreErrors || er.code === 'EACCES') {\n return false\n } else {\n throw er\n }\n }\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n var mod = stat.mode\n var uid = stat.uid\n var gid = stat.gid\n\n var myUid = options.uid !== undefined ?\n options.uid : process.getuid && process.getuid()\n var myGid = options.gid !== undefined ?\n options.gid : process.getgid && process.getgid()\n\n var u = parseInt('100', 8)\n var g = parseInt('010', 8)\n var o = parseInt('001', 8)\n var ug = u | g\n\n var ret = (mod & o) ||\n (mod & g) && gid === myGid ||\n (mod & u) && uid === myUid ||\n (mod & ug) && myUid === 0\n\n return ret\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n var pathext = options.pathExt !== undefined ?\n options.pathExt : process.env.PATHEXT\n\n if (!pathext) {\n return true\n }\n\n pathext = pathext.split(';')\n if (pathext.indexOf('') !== -1) {\n return true\n }\n for (var i = 0; i < pathext.length; i++) {\n var p = pathext[i].toLowerCase()\n if (p && path.substr(-p.length).toLowerCase() === p) {\n return true\n }\n }\n return false\n}\n\nfunction checkStat (stat, path, options) {\n if (!stat.isSymbolicLink() && !stat.isFile()) {\n return false\n }\n return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, path, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), path, options)\n}\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n Set = getNative(root, 'Set'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each\n * element is kept.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length)\n ? baseUniq(array)\n : [];\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = uniq;\n","'use strict';\nconst os = require('os');\n\nconst nameMap = new Map([\n\t[21, ['Monterey', '12']],\n\t[20, ['Big Sur', '11']],\n\t[19, ['Catalina', '10.15']],\n\t[18, ['Mojave', '10.14']],\n\t[17, ['High Sierra', '10.13']],\n\t[16, ['Sierra', '10.12']],\n\t[15, ['El Capitan', '10.11']],\n\t[14, ['Yosemite', '10.10']],\n\t[13, ['Mavericks', '10.9']],\n\t[12, ['Mountain Lion', '10.8']],\n\t[11, ['Lion', '10.7']],\n\t[10, ['Snow Leopard', '10.6']],\n\t[9, ['Leopard', '10.5']],\n\t[8, ['Tiger', '10.4']],\n\t[7, ['Panther', '10.3']],\n\t[6, ['Jaguar', '10.2']],\n\t[5, ['Puma', '10.1']]\n]);\n\nconst macosRelease = release => {\n\trelease = Number((release || os.release()).split('.')[0]);\n\n\tconst [name, version] = nameMap.get(release);\n\n\treturn {\n\t\tname,\n\t\tversion\n\t};\n};\n\nmodule.exports = macosRelease;\n// TODO: remove this in the next major version\nmodule.exports.default = macosRelease;\n","'use strict'\n\n/**\n * Tries to execute a function and discards any error that occurs.\n * @param {Function} fn - Function that might or might not throw an error.\n * @returns {?*} Return-value of the function when no error occurred.\n */\nmodule.exports = function(fn) {\n\n\ttry { return fn() } catch (e) {}\n\n}","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Stream = _interopDefault(require('stream'));\nvar http = _interopDefault(require('http'));\nvar Url = _interopDefault(require('url'));\nvar whatwgUrl = _interopDefault(require('whatwg-url'));\nvar https = _interopDefault(require('https'));\nvar zlib = _interopDefault(require('zlib'));\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\t\t\tfinalize();\n\t\t});\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nmodule.exports = exports = fetch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports;\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.FetchError = FetchError;\n","module.exports = paginationMethodsPlugin\n\nfunction paginationMethodsPlugin (octokit) {\n octokit.getFirstPage = require('./lib/get-first-page').bind(null, octokit)\n octokit.getLastPage = require('./lib/get-last-page').bind(null, octokit)\n octokit.getNextPage = require('./lib/get-next-page').bind(null, octokit)\n octokit.getPreviousPage = require('./lib/get-previous-page').bind(null, octokit)\n octokit.hasFirstPage = require('./lib/has-first-page')\n octokit.hasLastPage = require('./lib/has-last-page')\n octokit.hasNextPage = require('./lib/has-next-page')\n octokit.hasPreviousPage = require('./lib/has-previous-page')\n}\n","module.exports = deprecate\n\nconst loggedMessages = {}\n\nfunction deprecate (message) {\n if (loggedMessages[message]) {\n return\n }\n\n console.warn(`DEPRECATED (@octokit/rest): ${message}`)\n loggedMessages[message] = 1\n}\n","module.exports = getFirstPage\n\nconst getPage = require('./get-page')\n\nfunction getFirstPage (octokit, link, headers) {\n return getPage(octokit, link, 'first', headers)\n}\n","module.exports = getLastPage\n\nconst getPage = require('./get-page')\n\nfunction getLastPage (octokit, link, headers) {\n return getPage(octokit, link, 'last', headers)\n}\n","module.exports = getNextPage\n\nconst getPage = require('./get-page')\n\nfunction getNextPage (octokit, link, headers) {\n return getPage(octokit, link, 'next', headers)\n}\n","module.exports = getPageLinks\n\nfunction getPageLinks (link) {\n link = link.link || link.headers.link || ''\n\n const links = {}\n\n // link format:\n // '; rel=\"next\", ; rel=\"last\"'\n link.replace(/<([^>]*)>;\\s*rel=\"([\\w]*)\"/g, (m, uri, type) => {\n links[type] = uri\n })\n\n return links\n}\n","module.exports = getPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\nconst HttpError = require('./http-error')\n\nfunction getPage (octokit, link, which, headers) {\n deprecate(`octokit.get${which.charAt(0).toUpperCase() + which.slice(1)}Page() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n const url = getPageLinks(link)[which]\n\n if (!url) {\n const urlError = new HttpError(`No ${which} page found`, 404)\n return Promise.reject(urlError)\n }\n\n const requestOptions = {\n url,\n headers: applyAcceptHeader(link, headers)\n }\n\n const promise = octokit.request(requestOptions)\n\n return promise\n}\n\nfunction applyAcceptHeader (res, headers) {\n const previous = res.headers && res.headers['x-github-media-type']\n\n if (!previous || (headers && headers.accept)) {\n return headers\n }\n headers = headers || {}\n headers.accept = 'application/vnd.' + previous\n .replace('; param=', '.')\n .replace('; format=', '+')\n\n return headers\n}\n","module.exports = getPreviousPage\n\nconst getPage = require('./get-page')\n\nfunction getPreviousPage (octokit, link, headers) {\n return getPage(octokit, link, 'prev', headers)\n}\n","module.exports = hasFirstPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasFirstPage (link) {\n deprecate(`octokit.hasFirstPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).first\n}\n","module.exports = hasLastPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasLastPage (link) {\n deprecate(`octokit.hasLastPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).last\n}\n","module.exports = hasNextPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasNextPage (link) {\n deprecate(`octokit.hasNextPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).next\n}\n","module.exports = hasPreviousPage\n\nconst deprecate = require('./deprecate')\nconst getPageLinks = require('./get-page-links')\n\nfunction hasPreviousPage (link) {\n deprecate(`octokit.hasPreviousPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)\n return getPageLinks(link).prev\n}\n","module.exports = class HttpError extends Error {\n constructor (message, code, headers) {\n super(message)\n\n // Maintains proper stack trace (only available on V8)\n /* istanbul ignore next */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n\n this.name = 'HttpError'\n this.code = code\n this.headers = headers\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","'use strict';\nconst os = require('os');\nconst macosRelease = require('macos-release');\nconst winRelease = require('windows-release');\n\nconst osName = (platform, release) => {\n\tif (!platform && release) {\n\t\tthrow new Error('You can\\'t specify a `release` without specifying `platform`');\n\t}\n\n\tplatform = platform || os.platform();\n\n\tlet id;\n\n\tif (platform === 'darwin') {\n\t\tif (!release && os.platform() === 'darwin') {\n\t\t\trelease = os.release();\n\t\t}\n\n\t\tconst prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS';\n\t\tid = release ? macosRelease(release).name : '';\n\t\treturn prefix + (id ? ' ' + id : '');\n\t}\n\n\tif (platform === 'linux') {\n\t\tif (!release && os.platform() === 'linux') {\n\t\t\trelease = os.release();\n\t\t}\n\n\t\tid = release ? release.replace(/^(\\d+\\.\\d+).*/, '$1') : '';\n\t\treturn 'Linux' + (id ? ' ' + id : '');\n\t}\n\n\tif (platform === 'win32') {\n\t\tif (!release && os.platform() === 'win32') {\n\t\t\trelease = os.release();\n\t\t}\n\n\t\tid = release ? winRelease(release) : '';\n\t\treturn 'Windows' + (id ? ' ' + id : '');\n\t}\n\n\treturn platform;\n};\n\nmodule.exports = osName;\n","'use strict';\nmodule.exports = (promise, onFinally) => {\n\tonFinally = onFinally || (() => {});\n\n\treturn promise.then(\n\t\tval => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => val),\n\t\terr => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => {\n\t\t\tthrow err;\n\t\t})\n\t);\n};\n","var once = require('once')\nvar eos = require('end-of-stream')\nvar fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes\n\nvar noop = function () {}\nvar ancient = /^v?\\.0/.test(process.version)\n\nvar isFn = function (fn) {\n return typeof fn === 'function'\n}\n\nvar isFS = function (stream) {\n if (!ancient) return false // newer node version do not need to care about fs is a special way\n if (!fs) return false // browser\n return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)\n}\n\nvar isRequest = function (stream) {\n return stream.setHeader && isFn(stream.abort)\n}\n\nvar destroyer = function (stream, reading, writing, callback) {\n callback = once(callback)\n\n var closed = false\n stream.on('close', function () {\n closed = true\n })\n\n eos(stream, {readable: reading, writable: writing}, function (err) {\n if (err) return callback(err)\n closed = true\n callback()\n })\n\n var destroyed = false\n return function (err) {\n if (closed) return\n if (destroyed) return\n destroyed = true\n\n if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks\n if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want\n\n if (isFn(stream.destroy)) return stream.destroy()\n\n callback(err || new Error('stream was destroyed'))\n }\n}\n\nvar call = function (fn) {\n fn()\n}\n\nvar pipe = function (from, to) {\n return from.pipe(to)\n}\n\nvar pump = function () {\n var streams = Array.prototype.slice.call(arguments)\n var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop\n\n if (Array.isArray(streams[0])) streams = streams[0]\n if (streams.length < 2) throw new Error('pump requires two streams per minimum')\n\n var error\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1\n var writing = i > 0\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err\n if (err) destroys.forEach(call)\n if (reading) return\n destroys.forEach(call)\n callback(error)\n })\n })\n\n return streams.reduce(pipe)\n}\n\nmodule.exports = pump\n","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { : , ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n","// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n","'use strict';\nmodule.exports = function (x) {\n\tvar lf = typeof x === 'string' ? '\\n' : '\\n'.charCodeAt();\n\tvar cr = typeof x === 'string' ? '\\r' : '\\r'.charCodeAt();\n\n\tif (x[x.length - 1] === lf) {\n\t\tx = x.slice(0, x.length - 1);\n\t}\n\n\tif (x[x.length - 1] === cr) {\n\t\tx = x.slice(0, x.length - 1);\n\t}\n\n\treturn x;\n};\n","\"use strict\";\n\nvar punycode = require(\"punycode\");\nvar mappingTable = require(\"./lib/mappingTable.json\");\n\nvar PROCESSING_OPTIONS = {\n TRANSITIONAL: 0,\n NONTRANSITIONAL: 1\n};\n\nfunction normalize(str) { // fix bug in v8\n return str.split('\\u0000').map(function (s) { return s.normalize('NFC'); }).join('\\u0000');\n}\n\nfunction findStatus(val) {\n var start = 0;\n var end = mappingTable.length - 1;\n\n while (start <= end) {\n var mid = Math.floor((start + end) / 2);\n\n var target = mappingTable[mid];\n if (target[0][0] <= val && target[0][1] >= val) {\n return target;\n } else if (target[0][0] > val) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n\n return null;\n}\n\nvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\nfunction countSymbols(string) {\n return string\n // replace every surrogate pair with a BMP symbol\n .replace(regexAstralSymbols, '_')\n // then get the length\n .length;\n}\n\nfunction mapChars(domain_name, useSTD3, processing_option) {\n var hasError = false;\n var processed = \"\";\n\n var len = countSymbols(domain_name);\n for (var i = 0; i < len; ++i) {\n var codePoint = domain_name.codePointAt(i);\n var status = findStatus(codePoint);\n\n switch (status[1]) {\n case \"disallowed\":\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n break;\n case \"ignored\":\n break;\n case \"mapped\":\n processed += String.fromCodePoint.apply(String, status[2]);\n break;\n case \"deviation\":\n if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {\n processed += String.fromCodePoint.apply(String, status[2]);\n } else {\n processed += String.fromCodePoint(codePoint);\n }\n break;\n case \"valid\":\n processed += String.fromCodePoint(codePoint);\n break;\n case \"disallowed_STD3_mapped\":\n if (useSTD3) {\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n } else {\n processed += String.fromCodePoint.apply(String, status[2]);\n }\n break;\n case \"disallowed_STD3_valid\":\n if (useSTD3) {\n hasError = true;\n }\n\n processed += String.fromCodePoint(codePoint);\n break;\n }\n }\n\n return {\n string: processed,\n error: hasError\n };\n}\n\nvar combiningMarksRegex = /[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2D]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDE2C-\\uDE37\\uDEDF-\\uDEEA\\uDF01-\\uDF03\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDE30-\\uDE40\\uDEAB-\\uDEB7]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF51-\\uDF7E\\uDF8F-\\uDF92]|\\uD82F[\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nfunction validateLabel(label, processing_option) {\n if (label.substr(0, 4) === \"xn--\") {\n label = punycode.toUnicode(label);\n processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;\n }\n\n var error = false;\n\n if (normalize(label) !== label ||\n (label[3] === \"-\" && label[4] === \"-\") ||\n label[0] === \"-\" || label[label.length - 1] === \"-\" ||\n label.indexOf(\".\") !== -1 ||\n label.search(combiningMarksRegex) === 0) {\n error = true;\n }\n\n var len = countSymbols(label);\n for (var i = 0; i < len; ++i) {\n var status = findStatus(label.codePointAt(i));\n if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== \"valid\") ||\n (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&\n status[1] !== \"valid\" && status[1] !== \"deviation\")) {\n error = true;\n break;\n }\n }\n\n return {\n label: label,\n error: error\n };\n}\n\nfunction processing(domain_name, useSTD3, processing_option) {\n var result = mapChars(domain_name, useSTD3, processing_option);\n result.string = normalize(result.string);\n\n var labels = result.string.split(\".\");\n for (var i = 0; i < labels.length; ++i) {\n try {\n var validation = validateLabel(labels[i]);\n labels[i] = validation.label;\n result.error = result.error || validation.error;\n } catch(e) {\n result.error = true;\n }\n }\n\n return {\n string: labels.join(\".\"),\n error: result.error\n };\n}\n\nmodule.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {\n var result = processing(domain_name, useSTD3, processing_option);\n var labels = result.string.split(\".\");\n labels = labels.map(function(l) {\n try {\n return punycode.toASCII(l);\n } catch(e) {\n result.error = true;\n return l;\n }\n });\n\n if (verifyDnsLength) {\n var total = labels.slice(0, labels.length - 1).join(\".\").length;\n if (total.length > 253 || total.length === 0) {\n result.error = true;\n }\n\n for (var i=0; i < labels.length; ++i) {\n if (labels.length > 63 || labels.length === 0) {\n result.error = true;\n break;\n }\n }\n }\n\n if (result.error) return null;\n return labels.join(\".\");\n};\n\nmodule.exports.toUnicode = function(domain_name, useSTD3) {\n var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);\n\n return {\n domain: result.string,\n error: result.error\n };\n};\n\nmodule.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;\n","module.exports = require('./lib/tunnel');\n","'use strict';\n\nvar net = require('net');\nvar tls = require('tls');\nvar http = require('http');\nvar https = require('https');\nvar events = require('events');\nvar assert = require('assert');\nvar util = require('util');\n\n\nexports.httpOverHttp = httpOverHttp;\nexports.httpsOverHttp = httpsOverHttp;\nexports.httpOverHttps = httpOverHttps;\nexports.httpsOverHttps = httpsOverHttps;\n\n\nfunction httpOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n return agent;\n}\n\nfunction httpsOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\nfunction httpOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n return agent;\n}\n\nfunction httpsOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\n\nfunction TunnelingAgent(options) {\n var self = this;\n self.options = options || {};\n self.proxyOptions = self.options.proxy || {};\n self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;\n self.requests = [];\n self.sockets = [];\n\n self.on('free', function onFree(socket, host, port, localAddress) {\n var options = toOptions(host, port, localAddress);\n for (var i = 0, len = self.requests.length; i < len; ++i) {\n var pending = self.requests[i];\n if (pending.host === options.host && pending.port === options.port) {\n // Detect the request to connect same origin server,\n // reuse the connection.\n self.requests.splice(i, 1);\n pending.request.onSocket(socket);\n return;\n }\n }\n socket.destroy();\n self.removeSocket(socket);\n });\n}\nutil.inherits(TunnelingAgent, events.EventEmitter);\n\nTunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {\n var self = this;\n var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));\n\n if (self.sockets.length >= this.maxSockets) {\n // We are over limit so we'll add it to the queue.\n self.requests.push(options);\n return;\n }\n\n // If we are under maxSockets create a new one.\n self.createSocket(options, function(socket) {\n socket.on('free', onFree);\n socket.on('close', onCloseOrRemove);\n socket.on('agentRemove', onCloseOrRemove);\n req.onSocket(socket);\n\n function onFree() {\n self.emit('free', socket, options);\n }\n\n function onCloseOrRemove(err) {\n self.removeSocket(socket);\n socket.removeListener('free', onFree);\n socket.removeListener('close', onCloseOrRemove);\n socket.removeListener('agentRemove', onCloseOrRemove);\n }\n });\n};\n\nTunnelingAgent.prototype.createSocket = function createSocket(options, cb) {\n var self = this;\n var placeholder = {};\n self.sockets.push(placeholder);\n\n var connectOptions = mergeOptions({}, self.proxyOptions, {\n method: 'CONNECT',\n path: options.host + ':' + options.port,\n agent: false,\n headers: {\n host: options.host + ':' + options.port\n }\n });\n if (options.localAddress) {\n connectOptions.localAddress = options.localAddress;\n }\n if (connectOptions.proxyAuth) {\n connectOptions.headers = connectOptions.headers || {};\n connectOptions.headers['Proxy-Authorization'] = 'Basic ' +\n new Buffer(connectOptions.proxyAuth).toString('base64');\n }\n\n debug('making CONNECT request');\n var connectReq = self.request(connectOptions);\n connectReq.useChunkedEncodingByDefault = false; // for v0.6\n connectReq.once('response', onResponse); // for v0.6\n connectReq.once('upgrade', onUpgrade); // for v0.6\n connectReq.once('connect', onConnect); // for v0.7 or later\n connectReq.once('error', onError);\n connectReq.end();\n\n function onResponse(res) {\n // Very hacky. This is necessary to avoid http-parser leaks.\n res.upgrade = true;\n }\n\n function onUpgrade(res, socket, head) {\n // Hacky.\n process.nextTick(function() {\n onConnect(res, socket, head);\n });\n }\n\n function onConnect(res, socket, head) {\n connectReq.removeAllListeners();\n socket.removeAllListeners();\n\n if (res.statusCode !== 200) {\n debug('tunneling socket could not be established, statusCode=%d',\n res.statusCode);\n socket.destroy();\n var error = new Error('tunneling socket could not be established, ' +\n 'statusCode=' + res.statusCode);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n if (head.length > 0) {\n debug('got illegal response body from proxy');\n socket.destroy();\n var error = new Error('got illegal response body from proxy');\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n debug('tunneling connection has established');\n self.sockets[self.sockets.indexOf(placeholder)] = socket;\n return cb(socket);\n }\n\n function onError(cause) {\n connectReq.removeAllListeners();\n\n debug('tunneling socket could not be established, cause=%s\\n',\n cause.message, cause.stack);\n var error = new Error('tunneling socket could not be established, ' +\n 'cause=' + cause.message);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n }\n};\n\nTunnelingAgent.prototype.removeSocket = function removeSocket(socket) {\n var pos = this.sockets.indexOf(socket)\n if (pos === -1) {\n return;\n }\n this.sockets.splice(pos, 1);\n\n var pending = this.requests.shift();\n if (pending) {\n // If we have pending requests and a socket gets closed a new one\n // needs to be created to take over in the pool for the one that closed.\n this.createSocket(pending, function(socket) {\n pending.request.onSocket(socket);\n });\n }\n};\n\nfunction createSecureSocket(options, cb) {\n var self = this;\n TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {\n var hostHeader = options.request.getHeader('host');\n var tlsOptions = mergeOptions({}, self.options, {\n socket: socket,\n servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host\n });\n\n // 0 is dummy port for v0.6\n var secureSocket = tls.connect(0, tlsOptions);\n self.sockets[self.sockets.indexOf(socket)] = secureSocket;\n cb(secureSocket);\n });\n}\n\n\nfunction toOptions(host, port, localAddress) {\n if (typeof host === 'string') { // since v0.10\n return {\n host: host,\n port: port,\n localAddress: localAddress\n };\n }\n return host; // for v0.11 or later\n}\n\nfunction mergeOptions(target) {\n for (var i = 1, len = arguments.length; i < len; ++i) {\n var overrides = arguments[i];\n if (typeof overrides === 'object') {\n var keys = Object.keys(overrides);\n for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {\n var k = keys[j];\n if (overrides[k] !== undefined) {\n target[k] = overrides[k];\n }\n }\n }\n }\n return target;\n}\n\n\nvar debug;\nif (process.env.NODE_DEBUG && /\\btunnel\\b/.test(process.env.NODE_DEBUG)) {\n debug = function() {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'string') {\n args[0] = 'TUNNEL: ' + args[0];\n } else {\n args.unshift('TUNNEL:');\n }\n console.error.apply(console, args);\n }\n} else {\n debug = function() {};\n}\nexports.debug = debug; // for test\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction getUserAgent() {\n if (typeof navigator === \"object\" && \"userAgent\" in navigator) {\n return navigator.userAgent;\n }\n\n if (typeof process === \"object\" && \"version\" in process) {\n return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;\n }\n\n return \"\";\n}\n\nexports.getUserAgent = getUserAgent;\n//# sourceMappingURL=index.js.map\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"crypto\");;","import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import crypto from 'crypto';\n\nfunction md5(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return crypto.createHash('md5').update(bytes).digest();\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nconst v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import crypto from 'crypto';\n\nfunction sha1(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return crypto.createHash('sha1').update(bytes).digest();\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","export { default as v1 } from './v1.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as NIL } from './nil.js';\nexport { default as version } from './version.js';\nexport { default as validate } from './validate.js';\nexport { default as stringify } from './stringify.js';\nexport { default as parse } from './parse.js';","\"use strict\";\n\nvar conversions = {};\nmodule.exports = conversions;\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction evenRound(x) {\n // Round x to the nearest integer, choosing the even integer if it lies halfway between two.\n if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)\n return Math.floor(x);\n } else {\n return Math.round(x);\n }\n}\n\nfunction createNumberConversion(bitLength, typeOpts) {\n if (!typeOpts.unsigned) {\n --bitLength;\n }\n const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);\n const upperBound = Math.pow(2, bitLength) - 1;\n\n const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);\n const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);\n\n return function(V, opts) {\n if (!opts) opts = {};\n\n let x = +V;\n\n if (opts.enforceRange) {\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite number\");\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(\"Argument is not in byte range\");\n }\n\n return x;\n }\n\n if (!isNaN(x) && opts.clamp) {\n x = evenRound(x);\n\n if (x < lowerBound) x = lowerBound;\n if (x > upperBound) x = upperBound;\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n x = x % moduloVal;\n\n if (!typeOpts.unsigned && x >= moduloBound) {\n return x - moduloVal;\n } else if (typeOpts.unsigned) {\n if (x < 0) {\n x += moduloVal;\n } else if (x === -0) { // don't return negative zero\n return 0;\n }\n }\n\n return x;\n }\n}\n\nconversions[\"void\"] = function () {\n return undefined;\n};\n\nconversions[\"boolean\"] = function (val) {\n return !!val;\n};\n\nconversions[\"byte\"] = createNumberConversion(8, { unsigned: false });\nconversions[\"octet\"] = createNumberConversion(8, { unsigned: true });\n\nconversions[\"short\"] = createNumberConversion(16, { unsigned: false });\nconversions[\"unsigned short\"] = createNumberConversion(16, { unsigned: true });\n\nconversions[\"long\"] = createNumberConversion(32, { unsigned: false });\nconversions[\"unsigned long\"] = createNumberConversion(32, { unsigned: true });\n\nconversions[\"long long\"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });\nconversions[\"unsigned long long\"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });\n\nconversions[\"double\"] = function (V) {\n const x = +V;\n\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite floating-point value\");\n }\n\n return x;\n};\n\nconversions[\"unrestricted double\"] = function (V) {\n const x = +V;\n\n if (isNaN(x)) {\n throw new TypeError(\"Argument is NaN\");\n }\n\n return x;\n};\n\n// not quite valid, but good enough for JS\nconversions[\"float\"] = conversions[\"double\"];\nconversions[\"unrestricted float\"] = conversions[\"unrestricted double\"];\n\nconversions[\"DOMString\"] = function (V, opts) {\n if (!opts) opts = {};\n\n if (opts.treatNullAsEmptyString && V === null) {\n return \"\";\n }\n\n return String(V);\n};\n\nconversions[\"ByteString\"] = function (V, opts) {\n const x = String(V);\n let c = undefined;\n for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n if (c > 255) {\n throw new TypeError(\"Argument is not a valid bytestring\");\n }\n }\n\n return x;\n};\n\nconversions[\"USVString\"] = function (V) {\n const S = String(V);\n const n = S.length;\n const U = [];\n for (let i = 0; i < n; ++i) {\n const c = S.charCodeAt(i);\n if (c < 0xD800 || c > 0xDFFF) {\n U.push(String.fromCodePoint(c));\n } else if (0xDC00 <= c && c <= 0xDFFF) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n if (i === n - 1) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n const d = S.charCodeAt(i + 1);\n if (0xDC00 <= d && d <= 0xDFFF) {\n const a = c & 0x3FF;\n const b = d & 0x3FF;\n U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));\n ++i;\n } else {\n U.push(String.fromCodePoint(0xFFFD));\n }\n }\n }\n }\n\n return U.join('');\n};\n\nconversions[\"Date\"] = function (V, opts) {\n if (!(V instanceof Date)) {\n throw new TypeError(\"Argument is not a Date object\");\n }\n if (isNaN(V)) {\n return undefined;\n }\n\n return V;\n};\n\nconversions[\"RegExp\"] = function (V, opts) {\n if (!(V instanceof RegExp)) {\n V = new RegExp(V);\n }\n\n return V;\n};\n","\"use strict\";\nconst usm = require(\"./url-state-machine\");\n\nexports.implementation = class URLImpl {\n constructor(constructorArgs) {\n const url = constructorArgs[0];\n const base = constructorArgs[1];\n\n let parsedBase = null;\n if (base !== undefined) {\n parsedBase = usm.basicURLParse(base);\n if (parsedBase === \"failure\") {\n throw new TypeError(\"Invalid base URL\");\n }\n }\n\n const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n\n // TODO: query stuff\n }\n\n get href() {\n return usm.serializeURL(this._url);\n }\n\n set href(v) {\n const parsedURL = usm.basicURLParse(v);\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n }\n\n get origin() {\n return usm.serializeURLOrigin(this._url);\n }\n\n get protocol() {\n return this._url.scheme + \":\";\n }\n\n set protocol(v) {\n usm.basicURLParse(v + \":\", { url: this._url, stateOverride: \"scheme start\" });\n }\n\n get username() {\n return this._url.username;\n }\n\n set username(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setTheUsername(this._url, v);\n }\n\n get password() {\n return this._url.password;\n }\n\n set password(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setThePassword(this._url, v);\n }\n\n get host() {\n const url = this._url;\n\n if (url.host === null) {\n return \"\";\n }\n\n if (url.port === null) {\n return usm.serializeHost(url.host);\n }\n\n return usm.serializeHost(url.host) + \":\" + usm.serializeInteger(url.port);\n }\n\n set host(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n }\n\n get hostname() {\n if (this._url.host === null) {\n return \"\";\n }\n\n return usm.serializeHost(this._url.host);\n }\n\n set hostname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n }\n\n get port() {\n if (this._url.port === null) {\n return \"\";\n }\n\n return usm.serializeInteger(this._url.port);\n }\n\n set port(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n if (v === \"\") {\n this._url.port = null;\n } else {\n usm.basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n }\n }\n\n get pathname() {\n if (this._url.cannotBeABaseURL) {\n return this._url.path[0];\n }\n\n if (this._url.path.length === 0) {\n return \"\";\n }\n\n return \"/\" + this._url.path.join(\"/\");\n }\n\n set pathname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n this._url.path = [];\n usm.basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n }\n\n get search() {\n if (this._url.query === null || this._url.query === \"\") {\n return \"\";\n }\n\n return \"?\" + this._url.query;\n }\n\n set search(v) {\n // TODO: query stuff\n\n const url = this._url;\n\n if (v === \"\") {\n url.query = null;\n return;\n }\n\n const input = v[0] === \"?\" ? v.substring(1) : v;\n url.query = \"\";\n usm.basicURLParse(input, { url, stateOverride: \"query\" });\n }\n\n get hash() {\n if (this._url.fragment === null || this._url.fragment === \"\") {\n return \"\";\n }\n\n return \"#\" + this._url.fragment;\n }\n\n set hash(v) {\n if (v === \"\") {\n this._url.fragment = null;\n return;\n }\n\n const input = v[0] === \"#\" ? v.substring(1) : v;\n this._url.fragment = \"\";\n usm.basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n }\n\n toJSON() {\n return this.href;\n }\n};\n","\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\nconst Impl = require(\".//URL-impl.js\");\n\nconst impl = utils.implSymbol;\n\nfunction URL(url) {\n if (!this || this[impl] || !(this instanceof URL)) {\n throw new TypeError(\"Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.\");\n }\n if (arguments.length < 1) {\n throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only \" + arguments.length + \" present.\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 2; ++i) {\n args[i] = arguments[i];\n }\n args[0] = conversions[\"USVString\"](args[0]);\n if (args[1] !== undefined) {\n args[1] = conversions[\"USVString\"](args[1]);\n }\n\n module.exports.setup(this, args);\n}\n\nURL.prototype.toJSON = function toJSON() {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 0; ++i) {\n args[i] = arguments[i];\n }\n return this[impl].toJSON.apply(this[impl], args);\n};\nObject.defineProperty(URL.prototype, \"href\", {\n get() {\n return this[impl].href;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].href = V;\n },\n enumerable: true,\n configurable: true\n});\n\nURL.prototype.toString = function () {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n return this.href;\n};\n\nObject.defineProperty(URL.prototype, \"origin\", {\n get() {\n return this[impl].origin;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"protocol\", {\n get() {\n return this[impl].protocol;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].protocol = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"username\", {\n get() {\n return this[impl].username;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].username = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"password\", {\n get() {\n return this[impl].password;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].password = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"host\", {\n get() {\n return this[impl].host;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].host = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hostname\", {\n get() {\n return this[impl].hostname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hostname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"port\", {\n get() {\n return this[impl].port;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].port = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"pathname\", {\n get() {\n return this[impl].pathname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].pathname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"search\", {\n get() {\n return this[impl].search;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].search = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hash\", {\n get() {\n return this[impl].hash;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hash = V;\n },\n enumerable: true,\n configurable: true\n});\n\n\nmodule.exports = {\n is(obj) {\n return !!obj && obj[impl] instanceof Impl.implementation;\n },\n create(constructorArgs, privateData) {\n let obj = Object.create(URL.prototype);\n this.setup(obj, constructorArgs, privateData);\n return obj;\n },\n setup(obj, constructorArgs, privateData) {\n if (!privateData) privateData = {};\n privateData.wrapper = obj;\n\n obj[impl] = new Impl.implementation(constructorArgs, privateData);\n obj[impl][utils.wrapperSymbol] = obj;\n },\n interface: URL,\n expose: {\n Window: { URL: URL },\n Worker: { URL: URL }\n }\n};\n\n","\"use strict\";\n\nexports.URL = require(\"./URL\").interface;\nexports.serializeURL = require(\"./url-state-machine\").serializeURL;\nexports.serializeURLOrigin = require(\"./url-state-machine\").serializeURLOrigin;\nexports.basicURLParse = require(\"./url-state-machine\").basicURLParse;\nexports.setTheUsername = require(\"./url-state-machine\").setTheUsername;\nexports.setThePassword = require(\"./url-state-machine\").setThePassword;\nexports.serializeHost = require(\"./url-state-machine\").serializeHost;\nexports.serializeInteger = require(\"./url-state-machine\").serializeInteger;\nexports.parseURL = require(\"./url-state-machine\").parseURL;\n","\"use strict\";\r\nconst punycode = require(\"punycode\");\r\nconst tr46 = require(\"tr46\");\r\n\r\nconst specialSchemes = {\r\n ftp: 21,\r\n file: null,\r\n gopher: 70,\r\n http: 80,\r\n https: 443,\r\n ws: 80,\r\n wss: 443\r\n};\r\n\r\nconst failure = Symbol(\"failure\");\r\n\r\nfunction countSymbols(str) {\r\n return punycode.ucs2.decode(str).length;\r\n}\r\n\r\nfunction at(input, idx) {\r\n const c = input[idx];\r\n return isNaN(c) ? undefined : String.fromCodePoint(c);\r\n}\r\n\r\nfunction isASCIIDigit(c) {\r\n return c >= 0x30 && c <= 0x39;\r\n}\r\n\r\nfunction isASCIIAlpha(c) {\r\n return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);\r\n}\r\n\r\nfunction isASCIIAlphanumeric(c) {\r\n return isASCIIAlpha(c) || isASCIIDigit(c);\r\n}\r\n\r\nfunction isASCIIHex(c) {\r\n return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);\r\n}\r\n\r\nfunction isSingleDot(buffer) {\r\n return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\r\n}\r\n\r\nfunction isDoubleDot(buffer) {\r\n buffer = buffer.toLowerCase();\r\n return buffer === \"..\" || buffer === \"%2e.\" || buffer === \".%2e\" || buffer === \"%2e%2e\";\r\n}\r\n\r\nfunction isWindowsDriveLetterCodePoints(cp1, cp2) {\r\n return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);\r\n}\r\n\r\nfunction isWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === \":\" || string[1] === \"|\");\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === \":\";\r\n}\r\n\r\nfunction containsForbiddenHostCodePoint(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|%|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction containsForbiddenHostCodePointExcludingPercent(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction isSpecialScheme(scheme) {\r\n return specialSchemes[scheme] !== undefined;\r\n}\r\n\r\nfunction isSpecial(url) {\r\n return isSpecialScheme(url.scheme);\r\n}\r\n\r\nfunction defaultPort(scheme) {\r\n return specialSchemes[scheme];\r\n}\r\n\r\nfunction percentEncode(c) {\r\n let hex = c.toString(16).toUpperCase();\r\n if (hex.length === 1) {\r\n hex = \"0\" + hex;\r\n }\r\n\r\n return \"%\" + hex;\r\n}\r\n\r\nfunction utf8PercentEncode(c) {\r\n const buf = new Buffer(c);\r\n\r\n let str = \"\";\r\n\r\n for (let i = 0; i < buf.length; ++i) {\r\n str += percentEncode(buf[i]);\r\n }\r\n\r\n return str;\r\n}\r\n\r\nfunction utf8PercentDecode(str) {\r\n const input = new Buffer(str);\r\n const output = [];\r\n for (let i = 0; i < input.length; ++i) {\r\n if (input[i] !== 37) {\r\n output.push(input[i]);\r\n } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {\r\n output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));\r\n i += 2;\r\n } else {\r\n output.push(input[i]);\r\n }\r\n }\r\n return new Buffer(output).toString();\r\n}\r\n\r\nfunction isC0ControlPercentEncode(c) {\r\n return c <= 0x1F || c > 0x7E;\r\n}\r\n\r\nconst extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);\r\nfunction isPathPercentEncode(c) {\r\n return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);\r\n}\r\n\r\nconst extraUserinfoPercentEncodeSet =\r\n new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);\r\nfunction isUserinfoPercentEncode(c) {\r\n return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\r\n}\r\n\r\nfunction percentEncodeChar(c, encodeSetPredicate) {\r\n const cStr = String.fromCodePoint(c);\r\n\r\n if (encodeSetPredicate(c)) {\r\n return utf8PercentEncode(cStr);\r\n }\r\n\r\n return cStr;\r\n}\r\n\r\nfunction parseIPv4Number(input) {\r\n let R = 10;\r\n\r\n if (input.length >= 2 && input.charAt(0) === \"0\" && input.charAt(1).toLowerCase() === \"x\") {\r\n input = input.substring(2);\r\n R = 16;\r\n } else if (input.length >= 2 && input.charAt(0) === \"0\") {\r\n input = input.substring(1);\r\n R = 8;\r\n }\r\n\r\n if (input === \"\") {\r\n return 0;\r\n }\r\n\r\n const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);\r\n if (regex.test(input)) {\r\n return failure;\r\n }\r\n\r\n return parseInt(input, R);\r\n}\r\n\r\nfunction parseIPv4(input) {\r\n const parts = input.split(\".\");\r\n if (parts[parts.length - 1] === \"\") {\r\n if (parts.length > 1) {\r\n parts.pop();\r\n }\r\n }\r\n\r\n if (parts.length > 4) {\r\n return input;\r\n }\r\n\r\n const numbers = [];\r\n for (const part of parts) {\r\n if (part === \"\") {\r\n return input;\r\n }\r\n const n = parseIPv4Number(part);\r\n if (n === failure) {\r\n return input;\r\n }\r\n\r\n numbers.push(n);\r\n }\r\n\r\n for (let i = 0; i < numbers.length - 1; ++i) {\r\n if (numbers[i] > 255) {\r\n return failure;\r\n }\r\n }\r\n if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {\r\n return failure;\r\n }\r\n\r\n let ipv4 = numbers.pop();\r\n let counter = 0;\r\n\r\n for (const n of numbers) {\r\n ipv4 += n * Math.pow(256, 3 - counter);\r\n ++counter;\r\n }\r\n\r\n return ipv4;\r\n}\r\n\r\nfunction serializeIPv4(address) {\r\n let output = \"\";\r\n let n = address;\r\n\r\n for (let i = 1; i <= 4; ++i) {\r\n output = String(n % 256) + output;\r\n if (i !== 4) {\r\n output = \".\" + output;\r\n }\r\n n = Math.floor(n / 256);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseIPv6(input) {\r\n const address = [0, 0, 0, 0, 0, 0, 0, 0];\r\n let pieceIndex = 0;\r\n let compress = null;\r\n let pointer = 0;\r\n\r\n input = punycode.ucs2.decode(input);\r\n\r\n if (input[pointer] === 58) {\r\n if (input[pointer + 1] !== 58) {\r\n return failure;\r\n }\r\n\r\n pointer += 2;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n }\r\n\r\n while (pointer < input.length) {\r\n if (pieceIndex === 8) {\r\n return failure;\r\n }\r\n\r\n if (input[pointer] === 58) {\r\n if (compress !== null) {\r\n return failure;\r\n }\r\n ++pointer;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n continue;\r\n }\r\n\r\n let value = 0;\r\n let length = 0;\r\n\r\n while (length < 4 && isASCIIHex(input[pointer])) {\r\n value = value * 0x10 + parseInt(at(input, pointer), 16);\r\n ++pointer;\r\n ++length;\r\n }\r\n\r\n if (input[pointer] === 46) {\r\n if (length === 0) {\r\n return failure;\r\n }\r\n\r\n pointer -= length;\r\n\r\n if (pieceIndex > 6) {\r\n return failure;\r\n }\r\n\r\n let numbersSeen = 0;\r\n\r\n while (input[pointer] !== undefined) {\r\n let ipv4Piece = null;\r\n\r\n if (numbersSeen > 0) {\r\n if (input[pointer] === 46 && numbersSeen < 4) {\r\n ++pointer;\r\n } else {\r\n return failure;\r\n }\r\n }\r\n\r\n if (!isASCIIDigit(input[pointer])) {\r\n return failure;\r\n }\r\n\r\n while (isASCIIDigit(input[pointer])) {\r\n const number = parseInt(at(input, pointer));\r\n if (ipv4Piece === null) {\r\n ipv4Piece = number;\r\n } else if (ipv4Piece === 0) {\r\n return failure;\r\n } else {\r\n ipv4Piece = ipv4Piece * 10 + number;\r\n }\r\n if (ipv4Piece > 255) {\r\n return failure;\r\n }\r\n ++pointer;\r\n }\r\n\r\n address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;\r\n\r\n ++numbersSeen;\r\n\r\n if (numbersSeen === 2 || numbersSeen === 4) {\r\n ++pieceIndex;\r\n }\r\n }\r\n\r\n if (numbersSeen !== 4) {\r\n return failure;\r\n }\r\n\r\n break;\r\n } else if (input[pointer] === 58) {\r\n ++pointer;\r\n if (input[pointer] === undefined) {\r\n return failure;\r\n }\r\n } else if (input[pointer] !== undefined) {\r\n return failure;\r\n }\r\n\r\n address[pieceIndex] = value;\r\n ++pieceIndex;\r\n }\r\n\r\n if (compress !== null) {\r\n let swaps = pieceIndex - compress;\r\n pieceIndex = 7;\r\n while (pieceIndex !== 0 && swaps > 0) {\r\n const temp = address[compress + swaps - 1];\r\n address[compress + swaps - 1] = address[pieceIndex];\r\n address[pieceIndex] = temp;\r\n --pieceIndex;\r\n --swaps;\r\n }\r\n } else if (compress === null && pieceIndex !== 8) {\r\n return failure;\r\n }\r\n\r\n return address;\r\n}\r\n\r\nfunction serializeIPv6(address) {\r\n let output = \"\";\r\n const seqResult = findLongestZeroSequence(address);\r\n const compress = seqResult.idx;\r\n let ignore0 = false;\r\n\r\n for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\r\n if (ignore0 && address[pieceIndex] === 0) {\r\n continue;\r\n } else if (ignore0) {\r\n ignore0 = false;\r\n }\r\n\r\n if (compress === pieceIndex) {\r\n const separator = pieceIndex === 0 ? \"::\" : \":\";\r\n output += separator;\r\n ignore0 = true;\r\n continue;\r\n }\r\n\r\n output += address[pieceIndex].toString(16);\r\n\r\n if (pieceIndex !== 7) {\r\n output += \":\";\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseHost(input, isSpecialArg) {\r\n if (input[0] === \"[\") {\r\n if (input[input.length - 1] !== \"]\") {\r\n return failure;\r\n }\r\n\r\n return parseIPv6(input.substring(1, input.length - 1));\r\n }\r\n\r\n if (!isSpecialArg) {\r\n return parseOpaqueHost(input);\r\n }\r\n\r\n const domain = utf8PercentDecode(input);\r\n const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);\r\n if (asciiDomain === null) {\r\n return failure;\r\n }\r\n\r\n if (containsForbiddenHostCodePoint(asciiDomain)) {\r\n return failure;\r\n }\r\n\r\n const ipv4Host = parseIPv4(asciiDomain);\r\n if (typeof ipv4Host === \"number\" || ipv4Host === failure) {\r\n return ipv4Host;\r\n }\r\n\r\n return asciiDomain;\r\n}\r\n\r\nfunction parseOpaqueHost(input) {\r\n if (containsForbiddenHostCodePointExcludingPercent(input)) {\r\n return failure;\r\n }\r\n\r\n let output = \"\";\r\n const decoded = punycode.ucs2.decode(input);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);\r\n }\r\n return output;\r\n}\r\n\r\nfunction findLongestZeroSequence(arr) {\r\n let maxIdx = null;\r\n let maxLen = 1; // only find elements > 1\r\n let currStart = null;\r\n let currLen = 0;\r\n\r\n for (let i = 0; i < arr.length; ++i) {\r\n if (arr[i] !== 0) {\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n currStart = null;\r\n currLen = 0;\r\n } else {\r\n if (currStart === null) {\r\n currStart = i;\r\n }\r\n ++currLen;\r\n }\r\n }\r\n\r\n // if trailing zeros\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n return {\r\n idx: maxIdx,\r\n len: maxLen\r\n };\r\n}\r\n\r\nfunction serializeHost(host) {\r\n if (typeof host === \"number\") {\r\n return serializeIPv4(host);\r\n }\r\n\r\n // IPv6 serializer\r\n if (host instanceof Array) {\r\n return \"[\" + serializeIPv6(host) + \"]\";\r\n }\r\n\r\n return host;\r\n}\r\n\r\nfunction trimControlChars(url) {\r\n return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/g, \"\");\r\n}\r\n\r\nfunction trimTabAndNewline(url) {\r\n return url.replace(/\\u0009|\\u000A|\\u000D/g, \"\");\r\n}\r\n\r\nfunction shortenPath(url) {\r\n const path = url.path;\r\n if (path.length === 0) {\r\n return;\r\n }\r\n if (url.scheme === \"file\" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {\r\n return;\r\n }\r\n\r\n path.pop();\r\n}\r\n\r\nfunction includesCredentials(url) {\r\n return url.username !== \"\" || url.password !== \"\";\r\n}\r\n\r\nfunction cannotHaveAUsernamePasswordPort(url) {\r\n return url.host === null || url.host === \"\" || url.cannotBeABaseURL || url.scheme === \"file\";\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetter(string) {\r\n return /^[A-Za-z]:$/.test(string);\r\n}\r\n\r\nfunction URLStateMachine(input, base, encodingOverride, url, stateOverride) {\r\n this.pointer = 0;\r\n this.input = input;\r\n this.base = base || null;\r\n this.encodingOverride = encodingOverride || \"utf-8\";\r\n this.stateOverride = stateOverride;\r\n this.url = url;\r\n this.failure = false;\r\n this.parseError = false;\r\n\r\n if (!this.url) {\r\n this.url = {\r\n scheme: \"\",\r\n username: \"\",\r\n password: \"\",\r\n host: null,\r\n port: null,\r\n path: [],\r\n query: null,\r\n fragment: null,\r\n\r\n cannotBeABaseURL: false\r\n };\r\n\r\n const res = trimControlChars(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n }\r\n\r\n const res = trimTabAndNewline(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n\r\n this.state = stateOverride || \"scheme start\";\r\n\r\n this.buffer = \"\";\r\n this.atFlag = false;\r\n this.arrFlag = false;\r\n this.passwordTokenSeenFlag = false;\r\n\r\n this.input = punycode.ucs2.decode(this.input);\r\n\r\n for (; this.pointer <= this.input.length; ++this.pointer) {\r\n const c = this.input[this.pointer];\r\n const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\r\n\r\n // exec state machine\r\n const ret = this[\"parse \" + this.state](c, cStr);\r\n if (!ret) {\r\n break; // terminate algorithm\r\n } else if (ret === failure) {\r\n this.failure = true;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nURLStateMachine.prototype[\"parse scheme start\"] = function parseSchemeStart(c, cStr) {\r\n if (isASCIIAlpha(c)) {\r\n this.buffer += cStr.toLowerCase();\r\n this.state = \"scheme\";\r\n } else if (!this.stateOverride) {\r\n this.state = \"no scheme\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse scheme\"] = function parseScheme(c, cStr) {\r\n if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {\r\n this.buffer += cStr.toLowerCase();\r\n } else if (c === 58) {\r\n if (this.stateOverride) {\r\n if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === \"file\") {\r\n return false;\r\n }\r\n\r\n if (this.url.scheme === \"file\" && (this.url.host === \"\" || this.url.host === null)) {\r\n return false;\r\n }\r\n }\r\n this.url.scheme = this.buffer;\r\n this.buffer = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n if (this.url.scheme === \"file\") {\r\n if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file\";\r\n } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {\r\n this.state = \"special relative or authority\";\r\n } else if (isSpecial(this.url)) {\r\n this.state = \"special authority slashes\";\r\n } else if (this.input[this.pointer + 1] === 47) {\r\n this.state = \"path or authority\";\r\n ++this.pointer;\r\n } else {\r\n this.url.cannotBeABaseURL = true;\r\n this.url.path.push(\"\");\r\n this.state = \"cannot-be-a-base-URL path\";\r\n }\r\n } else if (!this.stateOverride) {\r\n this.buffer = \"\";\r\n this.state = \"no scheme\";\r\n this.pointer = -1;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse no scheme\"] = function parseNoScheme(c) {\r\n if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {\r\n return failure;\r\n } else if (this.base.cannotBeABaseURL && c === 35) {\r\n this.url.scheme = this.base.scheme;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.url.cannotBeABaseURL = true;\r\n this.state = \"fragment\";\r\n } else if (this.base.scheme === \"file\") {\r\n this.state = \"file\";\r\n --this.pointer;\r\n } else {\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special relative or authority\"] = function parseSpecialRelativeOrAuthority(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path or authority\"] = function parsePathOrAuthority(c) {\r\n if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative\"] = function parseRelative(c) {\r\n this.url.scheme = this.base.scheme;\r\n if (isNaN(c)) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 47) {\r\n this.state = \"relative slash\";\r\n } else if (c === 63) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n this.state = \"relative slash\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice(0, this.base.path.length - 1);\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative slash\"] = function parseRelativeSlash(c) {\r\n if (isSpecial(this.url) && (c === 47 || c === 92)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"special authority ignore slashes\";\r\n } else if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority slashes\"] = function parseSpecialAuthoritySlashes(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"special authority ignore slashes\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority ignore slashes\"] = function parseSpecialAuthorityIgnoreSlashes(c) {\r\n if (c !== 47 && c !== 92) {\r\n this.state = \"authority\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse authority\"] = function parseAuthority(c, cStr) {\r\n if (c === 64) {\r\n this.parseError = true;\r\n if (this.atFlag) {\r\n this.buffer = \"%40\" + this.buffer;\r\n }\r\n this.atFlag = true;\r\n\r\n // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\r\n const len = countSymbols(this.buffer);\r\n for (let pointer = 0; pointer < len; ++pointer) {\r\n const codePoint = this.buffer.codePointAt(pointer);\r\n\r\n if (codePoint === 58 && !this.passwordTokenSeenFlag) {\r\n this.passwordTokenSeenFlag = true;\r\n continue;\r\n }\r\n const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);\r\n if (this.passwordTokenSeenFlag) {\r\n this.url.password += encodedCodePoints;\r\n } else {\r\n this.url.username += encodedCodePoints;\r\n }\r\n }\r\n this.buffer = \"\";\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n if (this.atFlag && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.pointer -= countSymbols(this.buffer) + 1;\r\n this.buffer = \"\";\r\n this.state = \"host\";\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse hostname\"] =\r\nURLStateMachine.prototype[\"parse host\"] = function parseHostName(c, cStr) {\r\n if (this.stateOverride && this.url.scheme === \"file\") {\r\n --this.pointer;\r\n this.state = \"file host\";\r\n } else if (c === 58 && !this.arrFlag) {\r\n if (this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"port\";\r\n if (this.stateOverride === \"hostname\") {\r\n return false;\r\n }\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n --this.pointer;\r\n if (isSpecial(this.url) && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n } else if (this.stateOverride && this.buffer === \"\" &&\r\n (includesCredentials(this.url) || this.url.port !== null)) {\r\n this.parseError = true;\r\n return false;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n } else {\r\n if (c === 91) {\r\n this.arrFlag = true;\r\n } else if (c === 93) {\r\n this.arrFlag = false;\r\n }\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse port\"] = function parsePort(c, cStr) {\r\n if (isASCIIDigit(c)) {\r\n this.buffer += cStr;\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92) ||\r\n this.stateOverride) {\r\n if (this.buffer !== \"\") {\r\n const port = parseInt(this.buffer);\r\n if (port > Math.pow(2, 16) - 1) {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.url.port = port === defaultPort(this.url.scheme) ? null : port;\r\n this.buffer = \"\";\r\n }\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);\r\n\r\nURLStateMachine.prototype[\"parse file\"] = function parseFile(c) {\r\n this.url.scheme = \"file\";\r\n\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file slash\";\r\n } else if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNaN(c)) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 63) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points\r\n !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||\r\n (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points\r\n !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n shortenPath(this.url);\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file slash\"] = function parseFileSlash(c) {\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file host\";\r\n } else {\r\n if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {\r\n this.url.path.push(this.base.path[0]);\r\n } else {\r\n this.url.host = this.base.host;\r\n }\r\n }\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file host\"] = function parseFileHost(c, cStr) {\r\n if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {\r\n --this.pointer;\r\n if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\r\n this.parseError = true;\r\n this.state = \"path\";\r\n } else if (this.buffer === \"\") {\r\n this.url.host = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n } else {\r\n let host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n if (host === \"localhost\") {\r\n host = \"\";\r\n }\r\n this.url.host = host;\r\n\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n }\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path start\"] = function parsePathStart(c) {\r\n if (isSpecial(this.url)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"path\";\r\n\r\n if (c !== 47 && c !== 92) {\r\n --this.pointer;\r\n }\r\n } else if (!this.stateOverride && c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (!this.stateOverride && c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (c !== undefined) {\r\n this.state = \"path\";\r\n if (c !== 47) {\r\n --this.pointer;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path\"] = function parsePath(c) {\r\n if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||\r\n (!this.stateOverride && (c === 63 || c === 35))) {\r\n if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n }\r\n\r\n if (isDoubleDot(this.buffer)) {\r\n shortenPath(this.url);\r\n if (c !== 47 && !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n }\r\n } else if (isSingleDot(this.buffer) && c !== 47 &&\r\n !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n } else if (!isSingleDot(this.buffer)) {\r\n if (this.url.scheme === \"file\" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {\r\n if (this.url.host !== \"\" && this.url.host !== null) {\r\n this.parseError = true;\r\n this.url.host = \"\";\r\n }\r\n this.buffer = this.buffer[0] + \":\";\r\n }\r\n this.url.path.push(this.buffer);\r\n }\r\n this.buffer = \"\";\r\n if (this.url.scheme === \"file\" && (c === undefined || c === 63 || c === 35)) {\r\n while (this.url.path.length > 1 && this.url.path[0] === \"\") {\r\n this.parseError = true;\r\n this.url.path.shift();\r\n }\r\n }\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n }\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += percentEncodeChar(c, isPathPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse cannot-be-a-base-URL path\"] = function parseCannotBeABaseURLPath(c) {\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n // TODO: Add: not a URL code point\r\n if (!isNaN(c) && c !== 37) {\r\n this.parseError = true;\r\n }\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n if (!isNaN(c)) {\r\n this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse query\"] = function parseQuery(c, cStr) {\r\n if (isNaN(c) || (!this.stateOverride && c === 35)) {\r\n if (!isSpecial(this.url) || this.url.scheme === \"ws\" || this.url.scheme === \"wss\") {\r\n this.encodingOverride = \"utf-8\";\r\n }\r\n\r\n const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead\r\n for (let i = 0; i < buffer.length; ++i) {\r\n if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||\r\n buffer[i] === 0x3C || buffer[i] === 0x3E) {\r\n this.url.query += percentEncode(buffer[i]);\r\n } else {\r\n this.url.query += String.fromCodePoint(buffer[i]);\r\n }\r\n }\r\n\r\n this.buffer = \"\";\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse fragment\"] = function parseFragment(c) {\r\n if (isNaN(c)) { // do nothing\r\n } else if (c === 0x0) {\r\n this.parseError = true;\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nfunction serializeURL(url, excludeFragment) {\r\n let output = url.scheme + \":\";\r\n if (url.host !== null) {\r\n output += \"//\";\r\n\r\n if (url.username !== \"\" || url.password !== \"\") {\r\n output += url.username;\r\n if (url.password !== \"\") {\r\n output += \":\" + url.password;\r\n }\r\n output += \"@\";\r\n }\r\n\r\n output += serializeHost(url.host);\r\n\r\n if (url.port !== null) {\r\n output += \":\" + url.port;\r\n }\r\n } else if (url.host === null && url.scheme === \"file\") {\r\n output += \"//\";\r\n }\r\n\r\n if (url.cannotBeABaseURL) {\r\n output += url.path[0];\r\n } else {\r\n for (const string of url.path) {\r\n output += \"/\" + string;\r\n }\r\n }\r\n\r\n if (url.query !== null) {\r\n output += \"?\" + url.query;\r\n }\r\n\r\n if (!excludeFragment && url.fragment !== null) {\r\n output += \"#\" + url.fragment;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction serializeOrigin(tuple) {\r\n let result = tuple.scheme + \"://\";\r\n result += serializeHost(tuple.host);\r\n\r\n if (tuple.port !== null) {\r\n result += \":\" + tuple.port;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nmodule.exports.serializeURL = serializeURL;\r\n\r\nmodule.exports.serializeURLOrigin = function (url) {\r\n // https://url.spec.whatwg.org/#concept-url-origin\r\n switch (url.scheme) {\r\n case \"blob\":\r\n try {\r\n return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));\r\n } catch (e) {\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n case \"ftp\":\r\n case \"gopher\":\r\n case \"http\":\r\n case \"https\":\r\n case \"ws\":\r\n case \"wss\":\r\n return serializeOrigin({\r\n scheme: url.scheme,\r\n host: url.host,\r\n port: url.port\r\n });\r\n case \"file\":\r\n // spec says \"exercise to the reader\", chrome says \"file://\"\r\n return \"file://\";\r\n default:\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n};\r\n\r\nmodule.exports.basicURLParse = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);\r\n if (usm.failure) {\r\n return \"failure\";\r\n }\r\n\r\n return usm.url;\r\n};\r\n\r\nmodule.exports.setTheUsername = function (url, username) {\r\n url.username = \"\";\r\n const decoded = punycode.ucs2.decode(username);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.setThePassword = function (url, password) {\r\n url.password = \"\";\r\n const decoded = punycode.ucs2.decode(password);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.serializeHost = serializeHost;\r\n\r\nmodule.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;\r\n\r\nmodule.exports.serializeInteger = function (integer) {\r\n return String(integer);\r\n};\r\n\r\nmodule.exports.parseURL = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n // We don't handle blobs, so this just delegates:\r\n return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });\r\n};\r\n","\"use strict\";\n\nmodule.exports.mixin = function mixin(target, source) {\n const keys = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keys.length; ++i) {\n Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));\n }\n};\n\nmodule.exports.wrapperSymbol = Symbol(\"wrapper\");\nmodule.exports.implSymbol = Symbol(\"impl\");\n\nmodule.exports.wrapperForImpl = function (impl) {\n return impl[module.exports.wrapperSymbol];\n};\n\nmodule.exports.implForWrapper = function (wrapper) {\n return wrapper[module.exports.implSymbol];\n};\n\n","'use strict';\nconst os = require('os');\nconst execa = require('execa');\n\n// Reference: https://www.gaijin.at/en/lstwinver.php\nconst names = new Map([\n\t['10.0', '10'],\n\t['6.3', '8.1'],\n\t['6.2', '8'],\n\t['6.1', '7'],\n\t['6.0', 'Vista'],\n\t['5.2', 'Server 2003'],\n\t['5.1', 'XP'],\n\t['5.0', '2000'],\n\t['4.9', 'ME'],\n\t['4.1', '98'],\n\t['4.0', '95']\n]);\n\nconst windowsRelease = release => {\n\tconst version = /\\d+\\.\\d/.exec(release || os.release());\n\n\tif (release && !version) {\n\t\tthrow new Error('`release` argument doesn\\'t match `n.n`');\n\t}\n\n\tconst ver = (version || [])[0];\n\n\t// Server 2008, 2012, 2016, and 2019 versions are ambiguous with desktop versions and must be detected at runtime.\n\t// If `release` is omitted or we're on a Windows system, and the version number is an ambiguous version\n\t// then use `wmic` to get the OS caption: https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx\n\t// If `wmic` is obsoloete (later versions of Windows 10), use PowerShell instead.\n\t// If the resulting caption contains the year 2008, 2012, 2016 or 2019, it is a server version, so return a server OS name.\n\tif ((!release || release === os.release()) && ['6.1', '6.2', '6.3', '10.0'].includes(ver)) {\n\t\tlet stdout;\n\t\ttry {\n\t\t\tstdout = execa.sync('wmic', ['os', 'get', 'Caption']).stdout || '';\n\t\t} catch (_) {\n\t\t\tstdout = execa.sync('powershell', ['(Get-CimInstance -ClassName Win32_OperatingSystem).caption']).stdout || '';\n\t\t}\n\n\t\tconst year = (stdout.match(/2008|2012|2016|2019/) || [])[0];\n\n\t\tif (year) {\n\t\t\treturn `Server ${year}`;\n\t\t}\n\t}\n\n\treturn names.get(ver);\n};\n\nmodule.exports = windowsRelease;\n","'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n // Hook into child process \"exit\" event to emit an error if the command\n // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n enoent.hookChildProcess(spawned, parsed);\n\n return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n","'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n code: 'ENOENT',\n errno: 'ENOENT',\n syscall: `${syscall} ${original.command}`,\n path: original.command,\n spawnargs: original.args,\n });\n}\n\nfunction hookChildProcess(cp, parsed) {\n if (!isWin) {\n return;\n }\n\n const originalEmit = cp.emit;\n\n cp.emit = function (name, arg1) {\n // If emitting \"exit\" event and exit code is 1, we need to check if\n // the command exists and emit an \"error\" instead\n // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n if (name === 'exit') {\n const err = verifyENOENT(arg1, parsed, 'spawn');\n\n if (err) {\n return originalEmit.call(cp, 'error', err);\n }\n }\n\n return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n };\n}\n\nfunction verifyENOENT(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n\n return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n\n return null;\n}\n\nmodule.exports = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n","'use strict';\n\nconst path = require('path');\nconst niceTry = require('nice-try');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\nconst semver = require('semver');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\n// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0\nconst supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false;\n\nfunction detectShebang(parsed) {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n\n if (shebang) {\n parsed.args.unshift(parsed.file);\n parsed.command = shebang;\n\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n if (!isWin) {\n return parsed;\n }\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile);\n\n // If a shell is required, use cmd.exe and take care of escaping everything correctly\n // Note that `forceShell` is an hidden option used only in tests\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n // we need to double escape them\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n // This is necessary otherwise it will always fail with ENOENT in those cases\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escape.command(parsed.command);\n parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n }\n\n return parsed;\n}\n\nfunction parseShell(parsed) {\n // If node supports the shell option, there's no need to mimic its behavior\n if (supportsShellOption) {\n return parsed;\n }\n\n // Mimic node shell option\n // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWin) {\n parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n } else {\n if (typeof parsed.options.shell === 'string') {\n parsed.command = parsed.options.shell;\n } else if (process.platform === 'android') {\n parsed.command = '/system/bin/sh';\n } else {\n parsed.command = '/bin/sh';\n }\n\n parsed.args = ['-c', shellCommand];\n }\n\n return parsed;\n}\n\nfunction parse(command, args, options) {\n // Normalize arguments, similar to nodejs\n if (args && !Array.isArray(args)) {\n options = args;\n args = null;\n }\n\n args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n options = Object.assign({}, options); // Clone object to avoid changing the original\n\n // Build our parsed object\n const parsed = {\n command,\n args,\n options,\n file: undefined,\n original: {\n command,\n args,\n },\n };\n\n // Delegate further parsing to shell or non-shell\n return options.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n","'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n // Convert to string\n arg = `${arg}`;\n\n // Algorithm below is based on https://qntm.org/cmd\n\n // Sequence of backslashes followed by a double quote:\n // double up all the backslashes and escape the double quote\n arg = arg.replace(/(\\\\*)\"/g, '$1$1\\\\\"');\n\n // Sequence of backslashes followed by the end of the string\n // (which will become a double quote later):\n // double up all the backslashes\n arg = arg.replace(/(\\\\*)$/, '$1$1');\n\n // All other backslashes occur literally\n\n // Quote the whole thing:\n arg = `\"${arg}\"`;\n\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n // Double escape meta chars if necessary\n if (doubleEscapeMetaChars) {\n arg = arg.replace(metaCharsRegExp, '^$1');\n }\n\n return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n","'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n // Read the first 150 bytes from the file\n const size = 150;\n let buffer;\n\n if (Buffer.alloc) {\n // Node.js v4.5+ / v5.10+\n buffer = Buffer.alloc(size);\n } else {\n // Old Node.js API\n buffer = new Buffer(size);\n buffer.fill(0); // zero-fill\n }\n\n let fd;\n\n try {\n fd = fs.openSync(command, 'r');\n fs.readSync(fd, buffer, 0, size, 0);\n fs.closeSync(fd);\n } catch (e) { /* Empty */ }\n\n // Attempt to extract shebang (null is returned if not a shebang)\n return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n","'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst pathKey = require('path-key')();\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n const cwd = process.cwd();\n const hasCustomCwd = parsed.options.cwd != null;\n\n // If a custom `cwd` was specified, we need to change the process cwd\n // because `which` will do stat calls but does not support a custom cwd\n if (hasCustomCwd) {\n try {\n process.chdir(parsed.options.cwd);\n } catch (err) {\n /* Empty */\n }\n }\n\n let resolved;\n\n try {\n resolved = which.sync(parsed.command, {\n path: (parsed.options.env || process.env)[pathKey],\n pathExt: withoutPathExt ? path.delimiter : undefined,\n });\n } catch (e) {\n /* Empty */\n } finally {\n process.chdir(cwd);\n }\n\n // If we successfully resolved, ensure that an absolute path is returned\n // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n }\n\n return resolved;\n}\n\nfunction resolveCommand(parsed) {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n","'use strict';\nconst path = require('path');\nconst childProcess = require('child_process');\nconst crossSpawn = require('cross-spawn');\nconst stripEof = require('strip-eof');\nconst npmRunPath = require('npm-run-path');\nconst isStream = require('is-stream');\nconst _getStream = require('get-stream');\nconst pFinally = require('p-finally');\nconst onExit = require('signal-exit');\nconst errname = require('./lib/errname');\nconst stdio = require('./lib/stdio');\n\nconst TEN_MEGABYTES = 1000 * 1000 * 10;\n\nfunction handleArgs(cmd, args, opts) {\n\tlet parsed;\n\n\topts = Object.assign({\n\t\textendEnv: true,\n\t\tenv: {}\n\t}, opts);\n\n\tif (opts.extendEnv) {\n\t\topts.env = Object.assign({}, process.env, opts.env);\n\t}\n\n\tif (opts.__winShell === true) {\n\t\tdelete opts.__winShell;\n\t\tparsed = {\n\t\t\tcommand: cmd,\n\t\t\targs,\n\t\t\toptions: opts,\n\t\t\tfile: cmd,\n\t\t\toriginal: {\n\t\t\t\tcmd,\n\t\t\t\targs\n\t\t\t}\n\t\t};\n\t} else {\n\t\tparsed = crossSpawn._parse(cmd, args, opts);\n\t}\n\n\topts = Object.assign({\n\t\tmaxBuffer: TEN_MEGABYTES,\n\t\tbuffer: true,\n\t\tstripEof: true,\n\t\tpreferLocal: true,\n\t\tlocalDir: parsed.options.cwd || process.cwd(),\n\t\tencoding: 'utf8',\n\t\treject: true,\n\t\tcleanup: true\n\t}, parsed.options);\n\n\topts.stdio = stdio(opts);\n\n\tif (opts.preferLocal) {\n\t\topts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir}));\n\t}\n\n\tif (opts.detached) {\n\t\t// #115\n\t\topts.cleanup = false;\n\t}\n\n\tif (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') {\n\t\t// #116\n\t\tparsed.args.unshift('/q');\n\t}\n\n\treturn {\n\t\tcmd: parsed.command,\n\t\targs: parsed.args,\n\t\topts,\n\t\tparsed\n\t};\n}\n\nfunction handleInput(spawned, input) {\n\tif (input === null || input === undefined) {\n\t\treturn;\n\t}\n\n\tif (isStream(input)) {\n\t\tinput.pipe(spawned.stdin);\n\t} else {\n\t\tspawned.stdin.end(input);\n\t}\n}\n\nfunction handleOutput(opts, val) {\n\tif (val && opts.stripEof) {\n\t\tval = stripEof(val);\n\t}\n\n\treturn val;\n}\n\nfunction handleShell(fn, cmd, opts) {\n\tlet file = '/bin/sh';\n\tlet args = ['-c', cmd];\n\n\topts = Object.assign({}, opts);\n\n\tif (process.platform === 'win32') {\n\t\topts.__winShell = true;\n\t\tfile = process.env.comspec || 'cmd.exe';\n\t\targs = ['/s', '/c', `\"${cmd}\"`];\n\t\topts.windowsVerbatimArguments = true;\n\t}\n\n\tif (opts.shell) {\n\t\tfile = opts.shell;\n\t\tdelete opts.shell;\n\t}\n\n\treturn fn(file, args, opts);\n}\n\nfunction getStream(process, stream, {encoding, buffer, maxBuffer}) {\n\tif (!process[stream]) {\n\t\treturn null;\n\t}\n\n\tlet ret;\n\n\tif (!buffer) {\n\t\t// TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10\n\t\tret = new Promise((resolve, reject) => {\n\t\t\tprocess[stream]\n\t\t\t\t.once('end', resolve)\n\t\t\t\t.once('error', reject);\n\t\t});\n\t} else if (encoding) {\n\t\tret = _getStream(process[stream], {\n\t\t\tencoding,\n\t\t\tmaxBuffer\n\t\t});\n\t} else {\n\t\tret = _getStream.buffer(process[stream], {maxBuffer});\n\t}\n\n\treturn ret.catch(err => {\n\t\terr.stream = stream;\n\t\terr.message = `${stream} ${err.message}`;\n\t\tthrow err;\n\t});\n}\n\nfunction makeError(result, options) {\n\tconst {stdout, stderr} = result;\n\n\tlet err = result.error;\n\tconst {code, signal} = result;\n\n\tconst {parsed, joinedCmd} = options;\n\tconst timedOut = options.timedOut || false;\n\n\tif (!err) {\n\t\tlet output = '';\n\n\t\tif (Array.isArray(parsed.opts.stdio)) {\n\t\t\tif (parsed.opts.stdio[2] !== 'inherit') {\n\t\t\t\toutput += output.length > 0 ? stderr : `\\n${stderr}`;\n\t\t\t}\n\n\t\t\tif (parsed.opts.stdio[1] !== 'inherit') {\n\t\t\t\toutput += `\\n${stdout}`;\n\t\t\t}\n\t\t} else if (parsed.opts.stdio !== 'inherit') {\n\t\t\toutput = `\\n${stderr}${stdout}`;\n\t\t}\n\n\t\terr = new Error(`Command failed: ${joinedCmd}${output}`);\n\t\terr.code = code < 0 ? errname(code) : code;\n\t}\n\n\terr.stdout = stdout;\n\terr.stderr = stderr;\n\terr.failed = true;\n\terr.signal = signal || null;\n\terr.cmd = joinedCmd;\n\terr.timedOut = timedOut;\n\n\treturn err;\n}\n\nfunction joinCmd(cmd, args) {\n\tlet joinedCmd = cmd;\n\n\tif (Array.isArray(args) && args.length > 0) {\n\t\tjoinedCmd += ' ' + args.join(' ');\n\t}\n\n\treturn joinedCmd;\n}\n\nmodule.exports = (cmd, args, opts) => {\n\tconst parsed = handleArgs(cmd, args, opts);\n\tconst {encoding, buffer, maxBuffer} = parsed.opts;\n\tconst joinedCmd = joinCmd(cmd, args);\n\n\tlet spawned;\n\ttry {\n\t\tspawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts);\n\t} catch (err) {\n\t\treturn Promise.reject(err);\n\t}\n\n\tlet removeExitHandler;\n\tif (parsed.opts.cleanup) {\n\t\tremoveExitHandler = onExit(() => {\n\t\t\tspawned.kill();\n\t\t});\n\t}\n\n\tlet timeoutId = null;\n\tlet timedOut = false;\n\n\tconst cleanup = () => {\n\t\tif (timeoutId) {\n\t\t\tclearTimeout(timeoutId);\n\t\t\ttimeoutId = null;\n\t\t}\n\n\t\tif (removeExitHandler) {\n\t\t\tremoveExitHandler();\n\t\t}\n\t};\n\n\tif (parsed.opts.timeout > 0) {\n\t\ttimeoutId = setTimeout(() => {\n\t\t\ttimeoutId = null;\n\t\t\ttimedOut = true;\n\t\t\tspawned.kill(parsed.opts.killSignal);\n\t\t}, parsed.opts.timeout);\n\t}\n\n\tconst processDone = new Promise(resolve => {\n\t\tspawned.on('exit', (code, signal) => {\n\t\t\tcleanup();\n\t\t\tresolve({code, signal});\n\t\t});\n\n\t\tspawned.on('error', err => {\n\t\t\tcleanup();\n\t\t\tresolve({error: err});\n\t\t});\n\n\t\tif (spawned.stdin) {\n\t\t\tspawned.stdin.on('error', err => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve({error: err});\n\t\t\t});\n\t\t}\n\t});\n\n\tfunction destroy() {\n\t\tif (spawned.stdout) {\n\t\t\tspawned.stdout.destroy();\n\t\t}\n\n\t\tif (spawned.stderr) {\n\t\t\tspawned.stderr.destroy();\n\t\t}\n\t}\n\n\tconst handlePromise = () => pFinally(Promise.all([\n\t\tprocessDone,\n\t\tgetStream(spawned, 'stdout', {encoding, buffer, maxBuffer}),\n\t\tgetStream(spawned, 'stderr', {encoding, buffer, maxBuffer})\n\t]).then(arr => {\n\t\tconst result = arr[0];\n\t\tresult.stdout = arr[1];\n\t\tresult.stderr = arr[2];\n\n\t\tif (result.error || result.code !== 0 || result.signal !== null) {\n\t\t\tconst err = makeError(result, {\n\t\t\t\tjoinedCmd,\n\t\t\t\tparsed,\n\t\t\t\ttimedOut\n\t\t\t});\n\n\t\t\t// TODO: missing some timeout logic for killed\n\t\t\t// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203\n\t\t\t// err.killed = spawned.killed || killed;\n\t\t\terr.killed = err.killed || spawned.killed;\n\n\t\t\tif (!parsed.opts.reject) {\n\t\t\t\treturn err;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\n\t\treturn {\n\t\t\tstdout: handleOutput(parsed.opts, result.stdout),\n\t\t\tstderr: handleOutput(parsed.opts, result.stderr),\n\t\t\tcode: 0,\n\t\t\tfailed: false,\n\t\t\tkilled: false,\n\t\t\tsignal: null,\n\t\t\tcmd: joinedCmd,\n\t\t\ttimedOut: false\n\t\t};\n\t}), destroy);\n\n\tcrossSpawn._enoent.hookChildProcess(spawned, parsed.parsed);\n\n\thandleInput(spawned, parsed.opts.input);\n\n\tspawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected);\n\tspawned.catch = onrejected => handlePromise().catch(onrejected);\n\n\treturn spawned;\n};\n\n// TODO: set `stderr: 'ignore'` when that option is implemented\nmodule.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout);\n\n// TODO: set `stdout: 'ignore'` when that option is implemented\nmodule.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr);\n\nmodule.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);\n\nmodule.exports.sync = (cmd, args, opts) => {\n\tconst parsed = handleArgs(cmd, args, opts);\n\tconst joinedCmd = joinCmd(cmd, args);\n\n\tif (isStream(parsed.opts.input)) {\n\t\tthrow new TypeError('The `input` option cannot be a stream in sync mode');\n\t}\n\n\tconst result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);\n\tresult.code = result.status;\n\n\tif (result.error || result.status !== 0 || result.signal !== null) {\n\t\tconst err = makeError(result, {\n\t\t\tjoinedCmd,\n\t\t\tparsed\n\t\t});\n\n\t\tif (!parsed.opts.reject) {\n\t\t\treturn err;\n\t\t}\n\n\t\tthrow err;\n\t}\n\n\treturn {\n\t\tstdout: handleOutput(parsed.opts, result.stdout),\n\t\tstderr: handleOutput(parsed.opts, result.stderr),\n\t\tcode: 0,\n\t\tfailed: false,\n\t\tsignal: null,\n\t\tcmd: joinedCmd,\n\t\ttimedOut: false\n\t};\n};\n\nmodule.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);\n","'use strict';\n// Older verions of Node.js might not have `util.getSystemErrorName()`.\n// In that case, fall back to a deprecated internal.\nconst util = require('util');\n\nlet uv;\n\nif (typeof util.getSystemErrorName === 'function') {\n\tmodule.exports = util.getSystemErrorName;\n} else {\n\ttry {\n\t\tuv = process.binding('uv');\n\n\t\tif (typeof uv.errname !== 'function') {\n\t\t\tthrow new TypeError('uv.errname is not a function');\n\t\t}\n\t} catch (err) {\n\t\tconsole.error('execa/lib/errname: unable to establish process.binding(\\'uv\\')', err);\n\t\tuv = null;\n\t}\n\n\tmodule.exports = code => errname(uv, code);\n}\n\n// Used for testing the fallback behavior\nmodule.exports.__test__ = errname;\n\nfunction errname(uv, code) {\n\tif (uv) {\n\t\treturn uv.errname(code);\n\t}\n\n\tif (!(code < 0)) {\n\t\tthrow new Error('err >= 0');\n\t}\n\n\treturn `Unknown system error ${code}`;\n}\n\n","'use strict';\nconst alias = ['stdin', 'stdout', 'stderr'];\n\nconst hasAlias = opts => alias.some(x => Boolean(opts[x]));\n\nmodule.exports = opts => {\n\tif (!opts) {\n\t\treturn null;\n\t}\n\n\tif (opts.stdio && hasAlias(opts)) {\n\t\tthrow new Error(`It's not possible to provide \\`stdio\\` in combination with one of ${alias.map(x => `\\`${x}\\``).join(', ')}`);\n\t}\n\n\tif (typeof opts.stdio === 'string') {\n\t\treturn opts.stdio;\n\t}\n\n\tconst stdio = opts.stdio || [];\n\n\tif (!Array.isArray(stdio)) {\n\t\tthrow new TypeError(`Expected \\`stdio\\` to be of type \\`string\\` or \\`Array\\`, got \\`${typeof stdio}\\``);\n\t}\n\n\tconst result = [];\n\tconst len = Math.max(stdio.length, alias.length);\n\n\tfor (let i = 0; i < len; i++) {\n\t\tlet value = null;\n\n\t\tif (stdio[i] !== undefined) {\n\t\t\tvalue = stdio[i];\n\t\t} else if (opts[alias[i]] !== undefined) {\n\t\t\tvalue = opts[alias[i]];\n\t\t}\n\n\t\tresult[i] = value;\n\t}\n\n\treturn result;\n};\n","'use strict';\n\nvar isStream = module.exports = function (stream) {\n\treturn stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';\n};\n\nisStream.writable = function (stream) {\n\treturn isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';\n};\n\nisStream.readable = function (stream) {\n\treturn isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';\n};\n\nisStream.duplex = function (stream) {\n\treturn isStream.writable(stream) && isStream.readable(stream);\n};\n\nisStream.transform = function (stream) {\n\treturn isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';\n};\n","'use strict';\nconst path = require('path');\nconst pathKey = require('path-key');\n\nmodule.exports = opts => {\n\topts = Object.assign({\n\t\tcwd: process.cwd(),\n\t\tpath: process.env[pathKey()]\n\t}, opts);\n\n\tlet prev;\n\tlet pth = path.resolve(opts.cwd);\n\tconst ret = [];\n\n\twhile (prev !== pth) {\n\t\tret.push(path.join(pth, 'node_modules/.bin'));\n\t\tprev = pth;\n\t\tpth = path.resolve(pth, '..');\n\t}\n\n\t// ensure the running `node` binary is used\n\tret.push(path.dirname(process.execPath));\n\n\treturn ret.concat(opts.path).join(path.delimiter);\n};\n\nmodule.exports.env = opts => {\n\topts = Object.assign({\n\t\tenv: process.env\n\t}, opts);\n\n\tconst env = Object.assign({}, opts.env);\n\tconst path = pathKey({env});\n\n\topts.path = env[path];\n\tenv[path] = module.exports(opts);\n\n\treturn env;\n};\n","'use strict';\nmodule.exports = opts => {\n\topts = opts || {};\n\n\tconst env = opts.env || process.env;\n\tconst platform = opts.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path';\n};\n","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","'use strict';\nvar shebangRegex = require('shebang-regex');\n\nmodule.exports = function (str) {\n\tvar match = str.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tvar arr = match[0].replace(/#! ?/, '').split(' ');\n\tvar bin = arr[0].split('/').pop();\n\tvar arg = arr[1];\n\n\treturn (bin === 'env' ?\n\t\targ :\n\t\tbin + (arg ? ' ' + arg : '')\n\t);\n};\n","'use strict';\nmodule.exports = /^#!.*/;\n","module.exports = which\nwhich.sync = whichSync\n\nvar isWindows = process.platform === 'win32' ||\n process.env.OSTYPE === 'cygwin' ||\n process.env.OSTYPE === 'msys'\n\nvar path = require('path')\nvar COLON = isWindows ? ';' : ':'\nvar isexe = require('isexe')\n\nfunction getNotFoundError (cmd) {\n var er = new Error('not found: ' + cmd)\n er.code = 'ENOENT'\n\n return er\n}\n\nfunction getPathInfo (cmd, opt) {\n var colon = opt.colon || COLON\n var pathEnv = opt.path || process.env.PATH || ''\n var pathExt = ['']\n\n pathEnv = pathEnv.split(colon)\n\n var pathExtExe = ''\n if (isWindows) {\n pathEnv.unshift(process.cwd())\n pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')\n pathExt = pathExtExe.split(colon)\n\n\n // Always test the cmd itself first. isexe will check to make sure\n // it's found in the pathExt set.\n if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n pathExt.unshift('')\n }\n\n // If it has a slash, then we don't bother searching the pathenv.\n // just check the file itself, and that's it.\n if (cmd.match(/\\//) || isWindows && cmd.match(/\\\\/))\n pathEnv = ['']\n\n return {\n env: pathEnv,\n ext: pathExt,\n extExe: pathExtExe\n }\n}\n\nfunction which (cmd, opt, cb) {\n if (typeof opt === 'function') {\n cb = opt\n opt = {}\n }\n\n var info = getPathInfo(cmd, opt)\n var pathEnv = info.env\n var pathExt = info.ext\n var pathExtExe = info.extExe\n var found = []\n\n ;(function F (i, l) {\n if (i === l) {\n if (opt.all && found.length)\n return cb(null, found)\n else\n return cb(getNotFoundError(cmd))\n }\n\n var pathPart = pathEnv[i]\n if (pathPart.charAt(0) === '\"' && pathPart.slice(-1) === '\"')\n pathPart = pathPart.slice(1, -1)\n\n var p = path.join(pathPart, cmd)\n if (!pathPart && (/^\\.[\\\\\\/]/).test(cmd)) {\n p = cmd.slice(0, 2) + p\n }\n ;(function E (ii, ll) {\n if (ii === ll) return F(i + 1, l)\n var ext = pathExt[ii]\n isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {\n if (!er && is) {\n if (opt.all)\n found.push(p + ext)\n else\n return cb(null, p + ext)\n }\n return E(ii + 1, ll)\n })\n })(0, pathExt.length)\n })(0, pathEnv.length)\n}\n\nfunction whichSync (cmd, opt) {\n opt = opt || {}\n\n var info = getPathInfo(cmd, opt)\n var pathEnv = info.env\n var pathExt = info.ext\n var pathExtExe = info.extExe\n var found = []\n\n for (var i = 0, l = pathEnv.length; i < l; i ++) {\n var pathPart = pathEnv[i]\n if (pathPart.charAt(0) === '\"' && pathPart.slice(-1) === '\"')\n pathPart = pathPart.slice(1, -1)\n\n var p = path.join(pathPart, cmd)\n if (!pathPart && /^\\.[\\\\\\/]/.test(cmd)) {\n p = cmd.slice(0, 2) + p\n }\n for (var j = 0, ll = pathExt.length; j < ll; j ++) {\n var cur = p + pathExt[j]\n var is\n try {\n is = isexe.sync(cur, { pathExt: pathExtExe })\n if (is) {\n if (opt.all)\n found.push(cur)\n else\n return cur\n }\n } catch (ex) {}\n }\n }\n\n if (opt.all && found.length)\n return found\n\n if (opt.nothrow)\n return null\n\n throw getNotFoundError(cmd)\n}\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n",null,"module.exports = require(\"assert\");;","module.exports = require(\"child_process\");;","module.exports = require(\"events\");;","module.exports = require(\"fs\");;","module.exports = require(\"http\");;","module.exports = require(\"https\");;","module.exports = require(\"net\");;","module.exports = require(\"os\");;","module.exports = require(\"path\");;","module.exports = require(\"punycode\");;","module.exports = require(\"stream\");;","module.exports = require(\"tls\");;","module.exports = require(\"url\");;","module.exports = require(\"util\");;","module.exports = require(\"zlib\");;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tvar threw = true;\n\ttry {\n\t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\tthrew = false;\n\t} finally {\n\t\tif(threw) delete __webpack_module_cache__[moduleId];\n\t}\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => module['default'] :\n\t\t() => module;\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","\n__webpack_require__.ab = __dirname + \"/\";","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(2932);\n"],"mappings":";;;;;;;;;;A;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AChVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC7lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC74ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC9BA;AACA;AACA;AACA;AACA;A;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxJA;AACA;AACA;AACA;AACA;A;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACpBA;AACA;AACA;AACA;AACA;A;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACp6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC/9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACj4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClqDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AC3MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClMA;AACA;AACA;A;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;;;;;;;ACnBA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;;ACHA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AClxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;AC58CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;ACpBA;AACA;AACA;AACA;A;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;AClCA;AACA;AACA;A;;;;;;;;A;;;;;;ACFA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;;;ACDA;AACA;A;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;AACA;ACDA;AACA;AACA;AACA;;A","sourceRoot":""} \ No newline at end of file diff --git a/dist/licenses.txt b/dist/licenses.txt index 9aa7277..25b445d 100644 --- a/dist/licenses.txt +++ b/dist/licenses.txt @@ -1171,6 +1171,19 @@ Permission to use, copy, modify, and/or distribute this software for any purpose THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +uuid +MIT +The MIT License (MIT) + +Copyright (c) 2010-2020 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + webidl-conversions BSD-2-Clause # The BSD 2-Clause License diff --git a/package-lock.json b/package-lock.json index 9995356..0549a49 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,14 @@ { "name": "match-label-action", - "version": "3.0.0", + "version": "4.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "match-label-action", - "version": "3.0.0", + "version": "4.0.0", "license": "MIT", "dependencies": { - "@actions/core": "^1.9.1", + "@actions/core": "^1.10.0", "@actions/github": "^2.1.1" }, "devDependencies": { @@ -19,9 +18,9 @@ } }, "node_modules/@actions/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", - "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", + "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", "dependencies": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" @@ -8385,9 +8384,9 @@ }, "dependencies": { "@actions/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", - "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", + "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", "requires": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" @@ -10617,9 +10616,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-xo-typescript/-/eslint-config-xo-typescript-0.43.0.tgz", "integrity": "sha512-8T4O7Dy4c5/TeOPxBOTw7DI8fgS+u5ni0xA6alcJDyiMCuBq7O+FUMsOkz2vAOQ3C3HMkYmkpAXA/gZFX4QUrg==", "dev": true, - "requires": { - "typescript": ">=4.3" - } + "requires": {} }, "eslint-formatter-pretty": { "version": "4.1.0", diff --git a/package.json b/package.json index 3eb1229..74d057b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "match-label-action", - "version": "3.0.0", + "version": "4.0.0", "description": "Test a pull request for one of several labels.", "main": "index.js", "scripts": { @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/zwaldowski/match-label-action#readme", "dependencies": { - "@actions/core": "^1.9.1", + "@actions/core": "^1.10.0", "@actions/github": "^2.1.1" }, "devDependencies": {