├── .gitignore ├── LICENSE ├── package.json ├── CHANGELOG.md ├── src ├── variables.js ├── helper.js └── index.js ├── .github └── workflows │ └── twitter-post.yml ├── action.yml ├── README.md └── dist ├── sourcemap-register.js └── licenses.txt /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea/ 3 | *.iml 4 | .vscode/ 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Varun Sridharan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "action-github-workflow-sync", 3 | "version": "1.0.0", 4 | "description": "Github Action To Sync Github Action's Workflow Files Across Repositories", 5 | "main": "src/index.js", 6 | "scripts": { 7 | "prepare": "ncc build src/index.js -o dist --source-map --license licenses.txt ", 8 | "prepare-git": "ncc build src/index.js -o dist --source-map --license licenses.txt && git add -f ./dist/** && git commit -m \"Updated\" && git push " 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/actions/javascript-action.git" 13 | }, 14 | "keywords": [ 15 | "GitHub", 16 | "Actions", 17 | "JavaScript" 18 | ], 19 | "author": "Varun Sridharan (https://varunsridharan.in)", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/actions/javascript-action/issues" 23 | }, 24 | "homepage": "https://github.com/actions/javascript-action#readme", 25 | "dependencies": { 26 | "@actions/github": "^6.0.0", 27 | "@octokit/core": "^6.1.2", 28 | "@octokit/plugin-retry": "^7.1.2", 29 | "@octokit/plugin-throttling": "^9.3.2", 30 | "actions-js-toolkit": "^0.0.15" 31 | }, 32 | "devDependencies": { 33 | "@vercel/ncc": "^0.38.1" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 📝 Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on Keep a Changelog, and this project adheres to Semantic Versioning. 6 | 7 | --- 8 | ## 3.3 - 25/02/2023 9 | * Added Node.js 16 support 10 | 11 | ## 3.2 - 01/12/2021 12 | * Added Option `RETRY_MODE` 13 | 14 | ## 3.1 - 11/02/2021 15 | * Added Option `SKIP_CI` [#6](https://github.com/varunsridharan/action-github-workflow-sync/issues/6) 16 | * Added Option `COMMIT_MESSAGE` to provide custom message by end user [#6](https://github.com/varunsridharan/action-github-workflow-sync/issues/6) 17 | 18 | --- 19 | 20 | ## 3.0 - 16/11/2020 21 | * Fully Redeveloped From Base but using NodeJS 22 | * Improved performance by 80% 23 | * Option to copy file to remote repository if file already not exists. `!=` 24 | * Option to auto create a new pull request. 25 | 26 | --- 27 | 28 | ## 2.0 - 24/10/2020 29 | * Fully Redeveloped From Base 30 | * Migrated Docker File To `varunsridharan/actions-alpine:latest` 31 | 32 | --- 33 | 34 | ## 1.2 - 01/07/2020 35 | ### Fixed 36 | * Error: unable to create symlink *******: Filename too long 37 | 38 | ### Changed 39 | * Improved Logging 40 | 41 | --- 42 | 43 | ## 1.1 - 27/06/2020 44 | ### Changed 45 | * Improved performance by migrating to ***Alpine Linux*** 46 | 47 | ## 1.0 - 25/06/2020 48 | ### First Release 49 | -------------------------------------------------------------------------------- /src/variables.js: -------------------------------------------------------------------------------- 1 | const core = require( '@actions/core' ); 2 | const toolkit = require( 'actions-js-toolkit' ); 3 | 4 | const AUTO_CREATE_NEW_BRANCH = toolkit.input.tobool( core.getInput( 'AUTO_CREATE_NEW_BRANCH' ) ); 5 | const COMMIT_EACH_FILE = toolkit.input.tobool( core.getInput( 'COMMIT_EACH_FILE' ) ); 6 | const DRY_RUN = toolkit.input.tobool( core.getInput( 'DRY_RUN' ) ); 7 | const PULL_REQUEST = toolkit.input.tobool( core.getInput( 'PULL_REQUEST' ) ); 8 | const SKIP_CI = toolkit.input.tobool( core.getInput( 'SKIP_CI' ) ); 9 | const GITHUB_TOKEN = core.getInput( 'GITHUB_TOKEN' ); 10 | const GIT_URL = core.getInput( 'GIT_URL' ); 11 | const RAW_REPOSITORIES = core.getInput( 'REPOSITORIES' ); 12 | const COMMIT_MESSAGE = core.getInput( 'COMMIT_MESSAGE' ); 13 | const RAW_WORKFLOW_FILES = core.getInput( 'WORKFLOW_FILES' ); 14 | const RETRY_MODE = core.getInput( 'RETRY_MODE' ); 15 | const WORKFLOW_FILES_DIR = core.getInput( 'WORKFLOW_FILES_DIR' ); 16 | const REPOSITORIES = RAW_REPOSITORIES.split( '\n' ); 17 | const WORKFLOW_FILES = RAW_WORKFLOW_FILES.split( '\n' ); 18 | const GITHUB_WORKSPACE = toolkit.input.env( 'GITHUB_WORKSPACE' ); 19 | const WORKSPACE = toolkit.path.dirname( toolkit.path.dirname( GITHUB_WORKSPACE ) ) + '/workflow-sync/'; 20 | 21 | module.exports = { 22 | GIT_USER: 'Workflow Sync Bot', 23 | GIT_EMAIL: 'githubactionbot+workflowsync@gmail.com', 24 | AUTO_CREATE_NEW_BRANCH, 25 | COMMIT_EACH_FILE, 26 | DRY_RUN, 27 | GITHUB_TOKEN, 28 | GIT_URL, 29 | RAW_REPOSITORIES, 30 | PULL_REQUEST, 31 | RAW_WORKFLOW_FILES, 32 | WORKFLOW_FILES_DIR, 33 | REPOSITORIES, 34 | WORKFLOW_FILES, 35 | WORKSPACE, 36 | GITHUB_WORKSPACE, 37 | SKIP_CI, 38 | COMMIT_MESSAGE, 39 | RETRY_MODE 40 | }; 41 | -------------------------------------------------------------------------------- /.github/workflows/twitter-post.yml: -------------------------------------------------------------------------------- 1 | name: Twitter Post On Release 2 | 3 | env: 4 | VS_WORKFLOW_TYPE: "twitter-post" 5 | 6 | on: 7 | release: 8 | types: 9 | - published 10 | 11 | jobs: 12 | twitter_post: 13 | name: "🐦 Tweet" 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: "📥 Fetching Repository Contents" 17 | uses: actions/checkout@main 18 | 19 | - name: "💾 Github Repository Metadata" 20 | uses: varunsridharan/action-repository-meta@main 21 | env: 22 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 23 | 24 | - name: "💫 VS Utility" 25 | uses: varunsridharan/action-vs-utility@main 26 | env: 27 | SVA_ONL_TOKEN: ${{ secrets.SVA_ONL_TOKEN }} 28 | 29 | - name: "⚡ Repository - Before Hook" 30 | run: | 31 | echo " " 32 | if [ -f $VS_BEFORE_HOOK_FILE_LOCATION ]; then 33 | echo "✅ Before Hook File Found : $VS_BEFORE_HOOK_FILE_LOCATION" 34 | sh $VS_BEFORE_HOOK_FILE_LOCATION 35 | else 36 | echo "⚠️ No Before Hook File Found : $VS_BEFORE_HOOK_FILE_LOCATION" 37 | fi 38 | echo " " 39 | 40 | - name: "🚀 Publishing Tweet 🐦 " 41 | uses: m1ner79/Github-Twittction@master 42 | with: 43 | twitter_status: ${{ env.TWITTER_STATUS }} 44 | twitter_consumer_key: ${{ secrets.TWITTER_API_KEY }} 45 | twitter_consumer_secret: ${{ secrets.TWITTER_API_SECRET_KEY }} 46 | twitter_access_token_key: ${{ secrets.TWITTER_ACCESS_TOKEN }} 47 | twitter_access_token_secret: ${{ secrets.TWITTER_ACCESS_SECRET_TOKEN }} 48 | 49 | - name: "⚡ Repository - After Hook" 50 | run: | 51 | echo " " 52 | if [ -f $VS_AFTER_HOOK_FILE_LOCATION ]; then 53 | echo "✅ After Hook File Found : $VS_AFTER_HOOK_FILE_LOCATION" 54 | sh $VS_AFTER_HOOK_FILE_LOCATION 55 | else 56 | echo "⚠️ No After Hook File Found : $VS_AFTER_HOOK_FILE_LOCATION" 57 | fi 58 | echo " " -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Github Workflow Sync' 2 | description: 'Github Action To Sync Github Actions Workflow Files Across Repositories' 3 | author: 'varunsridharan' 4 | branding: 5 | icon: 'upload-cloud' 6 | color: 'blue' 7 | inputs: 8 | REPOSITORIES: 9 | description: 'Github Repos To Sync To' 10 | default: '' 11 | required: true 12 | WORKFLOW_FILES: 13 | description: 'Local Workflow Files To Sync' 14 | default: '' 15 | required: true 16 | WORKFLOW_FILES_DIR: 17 | description: 'Local Path Where Common Workflow Files Are Located' 18 | default: 'workflows' 19 | required: false 20 | GITHUB_TOKEN: 21 | description: "Token to use to get repos and write secrets" 22 | required: true 23 | GIT_URL: 24 | description: "The URL to the Github server. Defaults to github.com. Change if using a GHES instance." 25 | default: 'github.com' 26 | required: false 27 | DRY_RUN: 28 | description: "Run everything except for nothing will be Updated." 29 | required: false 30 | default: 'false' 31 | AUTO_CREATE_NEW_BRANCH: 32 | description: "Auto Create New Branch If Not Exists ?" 33 | required: false 34 | default: 'false' 35 | COMMIT_EACH_FILE: 36 | description: "If set to true then all files are commited 1 by 1 instead of commiting everything @ once" 37 | required: false 38 | default: 'false' 39 | PULL_REQUEST: 40 | description: "Whether or not you want to do a pull request. Only works when branch name is provided. Default false" 41 | required: false 42 | default: 'false' 43 | SKIP_CI: 44 | description: "Adds [skip ci] to commit message which will avoid running github actions in targer repository" 45 | required: false 46 | default: 'false' 47 | COMMIT_MESSAGE: 48 | description: "Provide your own custom commit MESSAGE" 49 | required: false 50 | default: 'false' 51 | RETRY_MODE: 52 | description: "Enable retry and throttling octokit plugins to avoid secondary rate limits on github content creation" 53 | required: false 54 | default: 'true' 55 | 56 | runs: 57 | using: 'node20' 58 | main: 'dist/index.js' 59 | -------------------------------------------------------------------------------- /src/helper.js: -------------------------------------------------------------------------------- 1 | const exec = require( '@actions/exec' ); 2 | const toolkit = require( 'actions-js-toolkit' ); 3 | 4 | const repositoryDetails = ( input_repo ) => { 5 | let GIT_TOKEN = require( './variables' ).GITHUB_TOKEN; 6 | let GIT_URL = require( './variables' ).GIT_URL; 7 | let WORKSPACE = require( './variables' ).WORKSPACE; 8 | input_repo = input_repo.split( '@' ); 9 | 10 | // Extract Branch Info varunsridharan/demo@master 11 | let branch = ( typeof input_repo[ 1 ] !== 'undefined' ) ? input_repo[ 1 ] : false; 12 | branch = ( false === branch || '' === branch ) ? 'default' : branch; 13 | input_repo = input_repo[ 0 ].split( '/' ); 14 | 15 | return { 16 | owner: input_repo[ 0 ], 17 | repository: input_repo[ 1 ], 18 | git_url: `https://x-access-token:${GIT_TOKEN}@${GIT_URL}/${input_repo[ 0 ]}/${input_repo[ 1 ]}.git`, 19 | branch, 20 | local_path: `${WORKSPACE}${input_repo[ 0 ]}/${input_repo[ 1 ]}/${branch}/` 21 | }; 22 | }; 23 | 24 | const repositoryClone = async( git_url, local_path, branch, auto_create_branch ) => { 25 | const common_arg = '--quiet --no-hardlinks --no-tags'; 26 | const options = { silent: false }; 27 | let status = true; 28 | if( 'default' === branch ) { 29 | await exec.exec( `git clone ${common_arg} --depth 1 ${git_url} "${local_path}"`, [], options ) 30 | .then( () => toolkit.log.success( 'Repository Cloned', ' ' ) ) 31 | .catch( () => { 32 | toolkit.log.error( 'Unable to Clone Repository!', ' ' ); 33 | status = false; 34 | } ); 35 | } else { 36 | await exec.exec( `git clone ${common_arg} --depth 1 --branch "${branch}" ${git_url} "${local_path}"`, [], options ) 37 | .then( () => toolkit.log.success( `Repository Branch ${branch} Cloned`, ' ' ) ) 38 | .catch( async() => { 39 | if( false !== auto_create_branch ) { 40 | toolkit.log.warn( 'Branch Not found', ' ' ); 41 | await exec.exec( `git clone ${common_arg} ${git_url} "${local_path}"`, [], options ) 42 | .then( async() => { 43 | await toolkit.exec( `git checkout -b ${branch}`, local_path ) 44 | .then( () => { 45 | toolkit.log.success( 'Repository Cloned', ' ' ); 46 | toolkit.log.success( 'Branch Created', ' ' ); 47 | status = 'created'; 48 | } ) 49 | .catch( () => { 50 | toolkit.log.error( 'Unable To Create Branch.', ' ' ); 51 | status = false; 52 | } ); 53 | } ) 54 | .catch( () => { 55 | toolkit.log.error( 'Repository Dose Not Exists !', ' ' ); 56 | status = false; 57 | } ); 58 | } else { 59 | toolkit.log.error( `Repository Branch ${branch} Not Found!`, ' ' ); 60 | status = false; 61 | } 62 | } ); 63 | } 64 | return status; 65 | }; 66 | 67 | const extract_workflow_file_info = ( file ) => { 68 | const regex = /([\s\S]*?)(\!=|=)([\s\S].+|)/; 69 | const m = regex.exec( file ); 70 | 71 | /** 72 | * M Example Array 73 | * 0 -- Full 74 | * 1 -- Src File 75 | * 2 -- Operator 76 | * 3 -- Dest File 77 | */ 78 | if( null !== m ) { 79 | if( '' !== m[ 1 ] ) { 80 | let src = m[ 1 ], 81 | operator = m[ 2 ], 82 | dest = m[ 3 ]; 83 | let $r = { src: src.trim(), type: ( '!=' === operator ) ? 'once' : 'copy' }; 84 | $r.dest = ( '' !== dest ) ? dest.trim() : $r.src; 85 | $r.src = toolkit.path.fix( $r.src ); 86 | $r.dest = toolkit.path.fix( $r.dest ); 87 | $r.src_filename = toolkit.path.basename( $r.src ); 88 | $r.dest_filename = toolkit.path.basename( $r.dest ); 89 | return $r; 90 | } 91 | return false; 92 | } 93 | file = toolkit.path.fix( file ); 94 | return { 95 | src: file, 96 | dest: file, 97 | type: 'copy', 98 | src_filename: toolkit.path.basename( file ), 99 | dest_filename: toolkit.path.basename( file ) 100 | }; 101 | }; 102 | 103 | const source_file_location = async( WORKFLOW_FILES_DIR, REPOSITORY_OWNER, REPOSITORY_NAME, SRC_FILE ) => { 104 | let GITHUB_WORKSPACE = require( './variables' ).GITHUB_WORKSPACE, 105 | workflows_files = [ 106 | `${REPOSITORY_OWNER}/${REPOSITORY_NAME}/workflows/${SRC_FILE}`, 107 | `${REPOSITORY_OWNER}/workflows/${SRC_FILE}`, 108 | `${WORKFLOW_FILES_DIR}/${SRC_FILE}`, 109 | `.github/workflows/${SRC_FILE}`, 110 | ], 111 | general_files = [ 112 | `${REPOSITORY_OWNER}/${REPOSITORY_NAME}/${SRC_FILE}`, 113 | `${REPOSITORY_OWNER}/${SRC_FILE}`, 114 | `${SRC_FILE}` 115 | ]; 116 | let _return = false; 117 | await toolkit.asyncForEach( workflows_files, async( LOCATION ) => { 118 | if( toolkit.path.exists( `${GITHUB_WORKSPACE}/${LOCATION}` ) && false === _return ) { 119 | _return = { 120 | source_path: `${GITHUB_WORKSPACE}/${LOCATION}`, 121 | relative_path: `${LOCATION}`, 122 | dest_type: 'workflow', 123 | is_dir: await toolkit.path.isDir( `${GITHUB_WORKSPACE}/${LOCATION}` ), 124 | }; 125 | } 126 | } ); 127 | 128 | if( false === _return ) { 129 | await toolkit.asyncForEach( general_files, async( LOCATION ) => { 130 | if( toolkit.path.exists( `${GITHUB_WORKSPACE}/${LOCATION}` ) && false === _return ) { 131 | _return = { 132 | source_path: `${GITHUB_WORKSPACE}/${LOCATION}`, 133 | relative_path: `${LOCATION}`, 134 | dest_type: false, 135 | is_dir: await toolkit.path.isDir( `${GITHUB_WORKSPACE}/${LOCATION}` ), 136 | }; 137 | } 138 | } ); 139 | } 140 | 141 | return _return; 142 | }; 143 | 144 | const commitfile = async( local_path, skip_ci, commit_message ) => { 145 | let message = `💬 - Files Synced | Runner ID : ${toolkit.input.env( 'GITHUB_RUN_NUMBER' )} | ⚡ Triggered By ${toolkit.input.env( 'GITHUB_REPOSITORY' )}`; 146 | 147 | if( ( typeof commit_message === 'undefined' || commit_message === 'false' || commit_message === false ) && skip_ci ) { 148 | message = '[skip ci] | ' + message; 149 | } 150 | 151 | if( typeof commit_message === 'string' && ( commit_message !== 'false' && commit_message !== 'true' ) ) { 152 | message = commit_message; 153 | } 154 | 155 | return await toolkit.git.commit( local_path, message ); 156 | }; 157 | 158 | const createPullRequestBranch = async( work_dir, current_branch ) => { 159 | let timestamp = Math.round( ( new Date() ).getTime() / 1000 ); 160 | let new_branch_name = `file-sync-${toolkit.input.env( 'GITHUB_RUN_NUMBER' )}-${current_branch}-${timestamp}`; 161 | let status = true; 162 | await toolkit.exec( `git checkout -b ${new_branch_name}`, work_dir ).then( () => { 163 | toolkit.log.success( `Pull Request Branch "${new_branch_name}" Created From ${current_branch}`, ' ' ); 164 | } ).catch( () => status = false ); 165 | return ( true === status ) ? new_branch_name : false; 166 | }; 167 | 168 | module.exports = { 169 | createPullRequestBranch: createPullRequestBranch, 170 | commitfile: commitfile, 171 | repositoryDetails: repositoryDetails, 172 | repositoryClone: repositoryClone, 173 | source_file_location: source_file_location, 174 | extract_workflow_file_info: extract_workflow_file_info, 175 | }; 176 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const core = require( '@actions/core' ); 2 | const exec = require( '@actions/exec' ); 3 | const io = require( '@actions/io' ); 4 | const toolkit = require( 'actions-js-toolkit' ); 5 | const helper = require( './helper' ); 6 | 7 | import { Octokit } from "@octokit/core"; 8 | import { retry } from "@octokit/plugin-retry"; 9 | import { throttling } from "@octokit/plugin-throttling"; 10 | 11 | async function run() { 12 | let AUTO_CREATE_NEW_BRANCH = require( './variables' ).AUTO_CREATE_NEW_BRANCH; 13 | let COMMIT_EACH_FILE = require( './variables' ).COMMIT_EACH_FILE; 14 | let DRY_RUN = require( './variables' ).DRY_RUN; 15 | let GITHUB_TOKEN = require( './variables' ).GITHUB_TOKEN; 16 | let GIT_URL = require( './variables' ).GIT_URL; 17 | let WORKFLOW_FILES_DIR = require( './variables' ).WORKFLOW_FILES_DIR; 18 | let WORKSPACE = require( './variables' ).WORKSPACE; 19 | let REPOSITORIES = require( './variables' ).REPOSITORIES; 20 | let WORKFLOW_FILES = require( './variables' ).WORKFLOW_FILES; 21 | let PULL_REQUEST = require( './variables' ).PULL_REQUEST; 22 | let SKIP_CI = require( './variables' ).SKIP_CI; 23 | let COMMIT_MESSAGE = require( './variables' ).COMMIT_MESSAGE; 24 | let RETRY_MODE = require( './variables' ).RETRY_MODE; 25 | 26 | toolkit.log( '-------------------------------------------------------' ); 27 | toolkit.log( '⚙️ Basic Config' ); 28 | toolkit.log( ` * AUTO_CREATE_NEW_BRANCH : ${AUTO_CREATE_NEW_BRANCH}` ); 29 | toolkit.log( ` * COMMIT_EACH_FILE : ${COMMIT_EACH_FILE}` ); 30 | toolkit.log( ` * PULL_REQUEST : ${PULL_REQUEST}` ); 31 | toolkit.log( ` * DRY_RUN : ${DRY_RUN}` ); 32 | toolkit.log( ` * WORKFLOW_FILES_DIR : ${WORKFLOW_FILES_DIR}` ); 33 | toolkit.log( ` * WORKSPACE : ${WORKSPACE}` ); 34 | toolkit.log( ` * SKIP_CI : ${SKIP_CI}` ); 35 | toolkit.log( ` * COMMIT_MESSAGE : ${COMMIT_MESSAGE}` ); 36 | toolkit.log( ` * RETRY_MODE : ${RETRY_MODE}` ); 37 | toolkit.log( '-------------------------------------------------------' ); 38 | toolkit.log( '' ); 39 | 40 | /** 41 | * General Config 42 | */ 43 | await exec.exec( 'git config --global core.longpaths true', [], { silent: true } ); 44 | await io.mkdirP( WORKSPACE ); 45 | 46 | /** 47 | * Instantiate an Octokit client shared between all asynchronous tasks 48 | */ 49 | // instantiate a basic octokit with auth 50 | var finalOctokit = new Octokit({auth: GITHUB_TOKEN}) 51 | // override the octokit instance with retry/throttling plugin if required 52 | if (RETRY_MODE) { 53 | const enhancedOctoKit = Octokit.plugin(retry, throttling) 54 | .defaults( 55 | { 56 | auth: GITHUB_TOKEN, 57 | throttle: { 58 | onRateLimit: (retryAfter, options) => { 59 | toolkit.log.warn(`Request quota exhausted for request ${options.method} ${options.url}`); 60 | if (options.request.retryCount === 0) { 61 | // only retries once 62 | toolkit.log.yellow(`Retrying after ${retryAfter} seconds!`); 63 | return true; 64 | } 65 | }, 66 | onSecondaryRateLimit: (retryAfter, options) => { 67 | toolkit.log.warn(`Secondary request quota exhausted for request ${options.method} ${options.url}`); 68 | if (options.request.retryCount === 0) { 69 | // only retries once 70 | toolkit.log.yellow(`Retrying after ${retryAfter} seconds!`); 71 | return true; 72 | } 73 | }, 74 | onAbuseLimit: (retryAfter, options) => { // does not retry, only logs a warning 75 | toolkit.log.warn(`Abuse detected for request ${options.method} ${options.url}`); 76 | }, 77 | }, 78 | retry: {doNotRetry: ["429"]} 79 | } 80 | ); 81 | finalOctokit = new enhancedOctoKit(); 82 | } 83 | 84 | 85 | /** 86 | * Loop Handler. 87 | */ 88 | await toolkit.asyncForEach( REPOSITORIES, async function( raw_repository ) { 89 | core.startGroup( `📓 ${raw_repository}` ); 90 | toolkit.log.magenta( `⚙️ Repository Config` ); 91 | let { repository, branch, owner, git_url, local_path } = helper.repositoryDetails( raw_repository ); 92 | toolkit.log( ` Slug : ${repository}` ); 93 | toolkit.log( ` Owner : ${owner}` ); 94 | toolkit.log( ` Git URL : ${git_url}` ); 95 | toolkit.log( ` Branch : ${branch}` ); 96 | toolkit.log( ` Local Path : ${local_path}` ); 97 | let status = await helper.repositoryClone( git_url, local_path, branch, AUTO_CREATE_NEW_BRANCH ); 98 | let modified = []; 99 | let current_branch = false; 100 | let pull_request_branch = false; 101 | 102 | if( status ) { 103 | 104 | if( 'created' !== status ) { 105 | current_branch = ( PULL_REQUEST ) ? await toolkit.git.currentBranch( local_path ) : false; 106 | pull_request_branch = ( PULL_REQUEST ) ? await helper.createPullRequestBranch( local_path, current_branch ) : false; 107 | } 108 | 109 | let identity_status = await toolkit.git.identity( local_path, require( './variables' ).GIT_USER, require( './variables' ).GIT_EMAIL, true ); 110 | if( identity_status ) { 111 | await toolkit.asyncForEach( WORKFLOW_FILES, async function( raw_workflow_file ) { 112 | toolkit.log.cyan( `${raw_workflow_file}` ); 113 | 114 | let workflow_file = helper.extract_workflow_file_info( raw_workflow_file ); 115 | 116 | if( false === workflow_file ) { 117 | toolkit.log.error( `Unable To Parse ${raw_workflow_file}`, ' ' ); 118 | toolkit.log( '' ); 119 | return; 120 | } 121 | 122 | let file_data = await helper.source_file_location( WORKFLOW_FILES_DIR, owner, repository, workflow_file.src ); 123 | 124 | if( false === file_data ) { 125 | toolkit.log.error( 'Unable To Find Source File !' ); 126 | toolkit.log( '' ); 127 | return; 128 | } 129 | 130 | const { source_path, relative_path, dest_type, is_dir } = file_data; 131 | 132 | workflow_file.dest = ( 'workflow' === dest_type ) ? `.github/workflows/${workflow_file.dest}` : workflow_file.dest; 133 | 134 | if( workflow_file.type === 'once' && await toolkit.path.exists( `${local_path}${workflow_file.dest}` ) ) { 135 | toolkit.log.warn( ' File/Folder Already Exists' ); 136 | toolkit.log( '' ); 137 | return; 138 | } 139 | 140 | let cp_options = ( is_dir ) ? { recursive: true, force: true } : {}, 141 | iscopied = true, 142 | dest_basepath = toolkit.path.dirname( `${local_path}${workflow_file.dest}` ), 143 | copy_source = source_path; 144 | 145 | toolkit.log.success( `${relative_path} => ${workflow_file.dest}`, ' ' ); 146 | 147 | if( !toolkit.path.exists( dest_basepath ) ) { 148 | toolkit.log( `Creating ${dest_basepath}`, ' ' ); 149 | await io.mkdirP( dest_basepath ); 150 | } 151 | 152 | await io.cp( copy_source, `${local_path}${workflow_file.dest}`, cp_options ).catch( error => { 153 | toolkit.log.error( 'Unable To Copy File.', ' ' ); 154 | toolkit.log( error ); 155 | iscopied = false; 156 | } ).then( async() => { 157 | await toolkit.git.add( local_path, `${workflow_file.dest}`, true ); 158 | 159 | if( COMMIT_EACH_FILE ) { 160 | let haschange = await toolkit.git.hasChange( local_path, true ); 161 | if( '' === haschange ) { 162 | toolkit.log.green( ' No changes detected' ); 163 | } else if( false !== haschange ) { 164 | await helper.commitfile( local_path, SKIP_CI, COMMIT_MESSAGE ); 165 | modified.push( `${workflow_file.dest}` ); 166 | } 167 | } 168 | } ); 169 | 170 | toolkit.log( ' ' ); 171 | } ); 172 | 173 | if( DRY_RUN ) { 174 | toolkit.log.warning( 'No Changes Are Pushed' ); 175 | toolkit.log( 'Git Status' ); 176 | toolkit.log( await toolkit.git.stats( local_path ) ); 177 | toolkit.log( ' ' ); 178 | } else { 179 | let haschange = await toolkit.git.hasChange( local_path, true ); 180 | let log_msg = ( false === COMMIT_EACH_FILE ) ? 'Git Commit & Push Log' : 'Git Push Log'; 181 | if( '' === haschange && !COMMIT_EACH_FILE ) { 182 | toolkit.log.success( 'No Changes Are Done :', ' ' ); 183 | } else if( false !== haschange && !COMMIT_EACH_FILE ) { 184 | await helper.commitfile( local_path, SKIP_CI, COMMIT_MESSAGE ); 185 | modified.push( local_path ); 186 | } 187 | 188 | toolkit.log.green( log_msg ); 189 | toolkit.log( '---------------------------------------------------' ); 190 | if( modified.length > 0 ) { 191 | let pushh_status = await toolkit.git.push( local_path, git_url, false, true ); 192 | if( false !== pushh_status && 'created' !== status && PULL_REQUEST ) { 193 | // create the pull request 194 | const pull_request_resp = await finalOctokit.request(`POST /repos/${owner}/${repository}/pulls`, { 195 | owner: owner, repo: repository, 196 | title: `Files Sync From ${toolkit.input.env( 'GITHUB_REPOSITORY' )}`, 197 | head: pull_request_branch, 198 | base: current_branch 199 | }).catch((error) => { 200 | toolkit.log.error(`Error on Pull Request Creation: ${error.status}: ${JSON.stringify(error.response.data)}`); 201 | }); 202 | if (pull_request_resp) { 203 | toolkit.log.green( `Pull Request Created : #${pull_request_resp.data.number}` ); 204 | toolkit.log( `${pull_request_resp.data.html_url}` ); 205 | } 206 | } 207 | 208 | } else { 209 | toolkit.log.success( 'Nothing To Push' ); 210 | } 211 | toolkit.log( '---------------------------------------------------' ); 212 | } 213 | } 214 | } 215 | core.endGroup(); 216 | toolkit.log( '' ); 217 | } ); 218 | } 219 | 220 | run(); 221 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | # Github Workflow Sync - ***Github Action*** 4 | Github Action To Sync Github Action's Workflow Files Across Repositories 5 | 6 | ![https://cdn.svarun.dev/gh/varunsridharan/action-github-workflow-sync/action-banner.jpg](https://cdn.svarun.dev/gh/varunsridharan/action-github-workflow-sync/action-banner.jpg) 7 | 8 | ## Use Case 🤔 ? 9 | _This Github Action can come in handy when you have lot of projects like i do._ 10 | _where in some case certain projects users action workflow which are common across projects._ 11 | _Example : [Project 1][project1] & [Project 2][project2] it can be pain to keep all the workflow updated with Github Action's Module's version._ 12 | 13 | This also isn't limited to Github Action yaml files - another use case could be keeping the `.editorconfig`, `LICENSE`, `tsconfig.json`, `tslint.json`, `.gitignore`, etc. in sync across all your repositories. 14 | 15 | >_Here where this action comes in and reduces your stress 😉 it can update all your repository actions file based on the config provided_ 16 | 17 | ## ⚙️ Configuration 18 | 19 | | **Argument** | Defaults | Description | 20 | | --- | :---: | :---: | 21 | | `GITHUB_TOKEN` | - | **Required** Token to use to get repos and write secrets. `${{secrets.GITHUB_TOKEN}}` will not work. instead **Personal Access Token Required*** | 22 | | `GIT_URL` | github.com | URL for the instance of github, where repositories should be searched for. Change if using a GHES instance. | 23 | | `REPOSITORIES` | - | **Required** New line deliminated regex expressions to select repositories. Repositires are limited to those in whcich the token user is an owner or collaborator. | 24 | | `WORKFLOW_FILES` | - | **Required** New line deliminated regex expressions. workflow files to be copied to provided repositores | 25 | | `DRY_RUN` | ***false*** | Run everything except for nothing will be pushed. | 26 | | `WORKFLOW_FILES_DIR` | ***workflows*** | Local Path Where Common Workflow Files Are Located ***Eg : `workflows`*** | 27 | | `AUTO_CREATE_NEW_BRANCH` | ***false*** | Auto create new brach in a repository if the branch dose not exists | 28 | | `COMMIT_EACH_FILE` | ***false*** | if you need to keep track of each file's commit history separate then set it to true | 29 | | `PULL_REQUEST` | **false** | Set to `true` if you want the changes to be pushed via pull request. | 30 | | `SKIP_CI` | **false** | Set to `true` if you want skip all automations inside target repository. | 31 | | `COMMIT_MESSAGE` | **false** | You can provide your custom commit message. | 32 | | `RETRY_MODE` | **true** | Enable retry and throttling octokit plugins to avoid secondary rate limits on github content creation. | 33 | 34 | ### Personal Access Token Scope 35 | #### [Github Personal Token](https://github.com/settings/tokens/new?description=gh-workflow-sync) Is required with the below scope 36 | 37 | ![https://cdn.svarun.dev/gh/varunsridharan/action-github-workflow-sync/scope.jpg](https://cdn.svarun.dev/gh/varunsridharan/action-github-workflow-sync/scope.jpg) 38 | 39 | > ℹ️ Full ***Repo*** is only required when you need to update private repository 40 | > if your are updating only public repository then just select `public_repo` inside ***repo*** scope 41 | 42 | ***[Click Here To Generate A Token](https://github.com/settings/tokens/new?description=gh-workflow-sync)*** 43 | 44 | --- 45 | 46 | ### `REPOSITORIES` Configuration Examples 47 |
Repository With Default Brach 48 | 49 | ```yaml 50 | REPOSITORIES: | 51 | username/repo 52 | username/repo2 53 | ``` 54 | 55 |
56 | 57 |
Repositry With Custom Branch 58 | 59 | ```yaml 60 | REPOSITORIES: | 61 | username/repo@dev 62 | username/repo1@dev2 63 | ``` 64 | > You Can also have same repository multiple times if you provide different branch name 65 |
66 | 67 | --- 68 | 69 | ### `WORKFLOW_FILES` Configuration Examples 70 | 71 | 1. If you use `=` as a file seperator `file1.md=myfile.md` then `file1` from the current repository will be copied to remote repository with the name of `myfile.md` 72 | 1. If you use `!=` as a file seperator `file1.md!=myfile.md` then `file1` from the current repository will be copied to remote repository with the name of `myfile.md` only if `myfile.md` already not exists in the remote repository 73 | 74 |
Files - Source & Destination File Without Custom Name 75 | 76 | ```yaml 77 | WORKFLOW_FILES: | 78 | dependabot.yml 79 | .github/settings.yml 80 | ``` 81 | > **dependabot.yml** will save in root folder in the repository 82 | > 83 | > **.github/settings.yml** will save in `.github` in the repository 84 | 85 |
86 | 87 |
Files - Source File In Root & Destination File In Custom Location 88 | 89 | ```yaml 90 | WORKFLOW_FILES: | 91 | hello-bot.yml=.github/ 92 | pr-bot.yml=.github/pull-request.yml 93 | ``` 94 | > **hello-bot.yml** will save in `.github` in the repository with the same name 95 | > 96 | > **pr-bot.yml** will save in `.github` in the repository with the name `pull-request.yml` 97 |
98 | 99 |
Folders - Source & Destination Folders Without Custom Name 100 | 101 | ```yaml 102 | WORKFLOW_FILES: | 103 | folder1 104 | .github/folder2 105 | ``` 106 | > **folder1** will save in root folder in the repository 107 | > 108 | > **.github/folder2** will save in `.github` in the repository 109 | 110 |
111 | 112 |
Folders - Source & Destination Folders With Custom Name 113 | 114 | ```yaml 115 | WORKFLOW_FILES: | 116 | folder1=./save-to-folder 117 | .github/folder2=custom-folder/save-to-folder2 118 | ``` 119 | > **folder1** will save inside `REPOSITORY ROOT` in the name of `save-to-folder` 120 | > 121 | > **.github/folder2** will save inside `custom-folder` in the name of `save-to-folder2` 122 | 123 |
124 | 125 | --- 126 | 127 | ## How Files Sync Work ? 128 | Before copying the **WORKFLOW_FILES** from the source to destination. this action will provide some flexibility. 129 | this searchs for a file in various locations for example lets take `settings.yml` as the file that you want to sync for multiple repository 130 | 131 | #### Below are the locations that this action search for the file/folder 132 | * `./{OWNER}/{REPO_NAME}/workflows/{filename}` 133 | * `./{OWNER}/workflows/{filename}` 134 | * `./{WORKFLOW_FILES_DIR}/{filename}` 135 | * `./.github/workflows/{filename}` 136 | * `./{OWNER}/{REPO_NAME}/{filename}` 137 | * `./{OWNER}/{filename}` 138 | * `./{filename}` 139 | 140 | > if the `settings.yml` is found inside `workflows` folder then the destination is automaitcally forced to `.github/workflows` in the destination repo 141 | > 142 | > if the `settings.yml` is outside of `workflows` folder then the destination then its copied to the destination 143 | 144 | ### How this can be useful ? 145 | Lets assume that you want to maintain all the common github files in a single repository and suddenly a repository needs a single file to be changed in that case instead of editing the action yml file. you can just create a folder like `{REPO_OWNER}/{REPO_NAME}/{FILE}` to copy the overriden file to the destination 146 | 147 | 148 | ## 🚀 Usage 149 | 150 | ### Step 1 151 | Create a [New Repository](https://github.com/new) or use our [Repository Template](https://github.com/varunsridharan/template-github-workflow-sync/generate) 152 | 153 | ### Step 2 154 | if you have used our template repository then edit the file inside `.github/workflows/workflow-sync.yml` 155 | 156 | OR 157 | 158 | Create a new file in `.github/workflows/` named **workflow-sync.yml** and copy & paste the below file content 159 | 160 | #### `workflow-sync.yml` content 161 | ```yaml 162 | name: Workflow Sync 163 | 164 | on: 165 | push: 166 | branches: 167 | - master 168 | env: 169 | DRY_RUN: false 170 | REPOSITORIES: | 171 | 172 | WORKFLOW_FILES: | 173 | 174 | jobs: 175 | Github_Workflow_Sync: 176 | runs-on: ubuntu-latest 177 | steps: 178 | - name: Fetching Local Repository 179 | uses: actions/checkout@master 180 | - name: Running Workflow Sync 181 | uses: varunsridharan/action-github-workflow-sync@main 182 | with: 183 | DRY_RUN: ${{ env.DRY_RUN }} 184 | REPOSITORIES: ${{ env.REPOSITORIES }} 185 | WORKFLOW_FILES: ${{ env.WORKFLOW_FILES }} 186 | GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} 187 | 188 | ``` 189 | 190 | ## Troubleshooting 191 | 192 | ### Spacing 193 | Spacing around the equal sign is important. For example, this will not work: 194 | 195 | ```yaml 196 | WORKFLOW_FILES: | 197 | folder/file-sync.yml = folder/test.txt 198 | ``` 199 | 200 | It passes to the shell file 3 distinct objects 201 | 202 | * folder/file-sync.ymll 203 | * = 204 | * folder/test.txt 205 | 206 | instead of 1 object 207 | 208 | * folder/file-sync.yml = folder/test.txt 209 | 210 | and there is nothing I can do in code to make up for that 211 | 212 | ### Slashes 213 | 214 | You do not need (nor want) leading `/` for the file path on either side of the equal sign 215 | 216 | The only time you need `/` trailing is for folder copies. 217 | While a file copy will technically still work with a leading `/`, a folder copy will not 218 | 219 | --- 220 | 221 | ## 📝 Changelog 222 | All notable changes to this project will be documented in this file. 223 | 224 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 225 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 226 | 227 | [Checkout CHANGELOG.md](/CHANGELOG.md) 228 | 229 | ## 🤝 Contributing 230 | If you would like to help, please take a look at the list of [issues](issues/). 231 | 232 | ## 💰 Sponsor 233 | [I][twitter] fell in love with open-source in 2013 and there has been no looking back since! You can read more about me [here][website]. 234 | If you, or your company, use any of my projects or like what I’m doing, kindly consider backing me. I'm in this for the long run. 235 | 236 | - ☕ How about we get to know each other over coffee? Buy me a cup for just [**$9.99**][buymeacoffee] 237 | - ☕️☕️ How about buying me just 2 cups of coffee each month? You can do that for as little as [**$9.99**][buymeacoffee] 238 | - 🔰 We love bettering open-source projects. Support 1-hour of open-source maintenance for [**$24.99 one-time?**][paypal] 239 | - 🚀 Love open-source tools? Me too! How about supporting one hour of open-source development for just [**$49.99 one-time ?**][paypal] 240 | 241 | ## 📝 License & Conduct 242 | - [**MIT license**](LICENSE) © [Varun Sridharan](website) 243 | 244 | 245 | ## 📣 Feedback 246 | - ⭐ This repository if this project helped you! :wink: 247 | - Create An [🔧 Issue](issues/) if you need help / found a bug 248 | 249 | ## Connect & Say 👋 250 | - **Follow** me on [👨‍💻 Github][github] and stay updated on free and open-source software 251 | - **Follow** me on [🐦 Twitter][twitter] to get updates on my latest open source projects 252 | - **Message** me on [📠 Telegram][telegram] 253 | - **Follow** my pet on [Instagram][sofythelabrador] for some _dog-tastic_ updates! 254 | 255 | --- 256 | 257 |

258 | Built With ♥ By Varun Sridharan 🇮🇳 259 |

260 | 261 | --- 262 | 263 | 264 | [project1]: https://github.com/varunsridharan/wc-product-subtitle/blob/master/.github/workflows/push-to-master.yml 265 | [project2]: https://github.com/varunsridharan/sku-shortlink-for-woocommerce/blob/master/.github/workflows/push-to-master.yml 266 | [paypal]: https://go.svarun.dev/paypal 267 | [buymeacoffee]: https://go.svarun.dev/buymeacoffee 268 | [sofythelabrador]: https://www.instagram.com/sofythelabrador/ 269 | [github]: https://go.svarun.dev/github/ 270 | [twitter]: https://go.svarun.dev/twitter/ 271 | [telegram]: https://go.svarun.dev/telegram/ 272 | [email]: https://go.svarun.dev/contact/email/ 273 | [website]: https://go.svarun.dev/website/ 274 | -------------------------------------------------------------------------------- /dist/sourcemap-register.js: -------------------------------------------------------------------------------- 1 | (()=>{var e={650:e=>{var r=Object.prototype.toString;var n=typeof Buffer.alloc==="function"&&typeof Buffer.allocUnsafe==="function"&&typeof Buffer.from==="function";function isArrayBuffer(e){return r.call(e).slice(8,-1)==="ArrayBuffer"}function fromArrayBuffer(e,r,t){r>>>=0;var o=e.byteLength-r;if(o<0){throw new RangeError("'offset' is out of bounds")}if(t===undefined){t=o}else{t>>>=0;if(t>o){throw new RangeError("'length' is out of bounds")}}return n?Buffer.from(e.slice(r,r+t)):new Buffer(new Uint8Array(e.slice(r,r+t)))}function fromString(e,r){if(typeof r!=="string"||r===""){r="utf8"}if(!Buffer.isEncoding(r)){throw new TypeError('"encoding" must be a valid string encoding')}return n?Buffer.from(e,r):new Buffer(e,r)}function bufferFrom(e,r,t){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(isArrayBuffer(e)){return fromArrayBuffer(e,r,t)}if(typeof e==="string"){return fromString(e,r)}return n?Buffer.from(e):new Buffer(e)}e.exports=bufferFrom},274:(e,r,n)=>{var t=n(339);var o=Object.prototype.hasOwnProperty;var i=typeof Map!=="undefined";function ArraySet(){this._array=[];this._set=i?new Map:Object.create(null)}ArraySet.fromArray=function ArraySet_fromArray(e,r){var n=new ArraySet;for(var t=0,o=e.length;t=0){return r}}else{var n=t.toSetString(e);if(o.call(this._set,n)){return this._set[n]}}throw new Error('"'+e+'" is not in the set.')};ArraySet.prototype.at=function ArraySet_at(e){if(e>=0&&e{var t=n(190);var o=5;var i=1<>1;return r?-n:n}r.encode=function base64VLQ_encode(e){var r="";var n;var i=toVLQSigned(e);do{n=i&a;i>>>=o;if(i>0){n|=u}r+=t.encode(n)}while(i>0);return r};r.decode=function base64VLQ_decode(e,r,n){var i=e.length;var s=0;var l=0;var c,p;do{if(r>=i){throw new Error("Expected more digits in base 64 VLQ value.")}p=t.decode(e.charCodeAt(r++));if(p===-1){throw new Error("Invalid base64 digit: "+e.charAt(r-1))}c=!!(p&u);p&=a;s=s+(p<{var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");r.encode=function(e){if(0<=e&&e{r.GREATEST_LOWER_BOUND=1;r.LEAST_UPPER_BOUND=2;function recursiveSearch(e,n,t,o,i,a){var u=Math.floor((n-e)/2)+e;var s=i(t,o[u],true);if(s===0){return u}else if(s>0){if(n-u>1){return recursiveSearch(u,n,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return n1){return recursiveSearch(e,u,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return u}else{return e<0?-1:e}}}r.search=function search(e,n,t,o){if(n.length===0){return-1}var i=recursiveSearch(-1,n.length,e,n,t,o||r.GREATEST_LOWER_BOUND);if(i<0){return-1}while(i-1>=0){if(t(n[i],n[i-1],true)!==0){break}--i}return i}},680:(e,r,n)=>{var t=n(339);function generatedPositionAfter(e,r){var n=e.generatedLine;var o=r.generatedLine;var i=e.generatedColumn;var a=r.generatedColumn;return o>n||o==n&&a>=i||t.compareByGeneratedPositionsInflated(e,r)<=0}function MappingList(){this._array=[];this._sorted=true;this._last={generatedLine:-1,generatedColumn:0}}MappingList.prototype.unsortedForEach=function MappingList_forEach(e,r){this._array.forEach(e,r)};MappingList.prototype.add=function MappingList_add(e){if(generatedPositionAfter(this._last,e)){this._last=e;this._array.push(e)}else{this._sorted=false;this._array.push(e)}};MappingList.prototype.toArray=function MappingList_toArray(){if(!this._sorted){this._array.sort(t.compareByGeneratedPositionsInflated);this._sorted=true}return this._array};r.H=MappingList},758:(e,r)=>{function swap(e,r,n){var t=e[r];e[r]=e[n];e[n]=t}function randomIntInRange(e,r){return Math.round(e+Math.random()*(r-e))}function doQuickSort(e,r,n,t){if(n{var t;var o=n(339);var i=n(345);var a=n(274).I;var u=n(449);var s=n(758).U;function SourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}return n.sections!=null?new IndexedSourceMapConsumer(n,r):new BasicSourceMapConsumer(n,r)}SourceMapConsumer.fromSourceMap=function(e,r){return BasicSourceMapConsumer.fromSourceMap(e,r)};SourceMapConsumer.prototype._version=3;SourceMapConsumer.prototype.__generatedMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_generatedMappings",{configurable:true,enumerable:true,get:function(){if(!this.__generatedMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__generatedMappings}});SourceMapConsumer.prototype.__originalMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_originalMappings",{configurable:true,enumerable:true,get:function(){if(!this.__originalMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__originalMappings}});SourceMapConsumer.prototype._charIsMappingSeparator=function SourceMapConsumer_charIsMappingSeparator(e,r){var n=e.charAt(r);return n===";"||n===","};SourceMapConsumer.prototype._parseMappings=function SourceMapConsumer_parseMappings(e,r){throw new Error("Subclasses must implement _parseMappings")};SourceMapConsumer.GENERATED_ORDER=1;SourceMapConsumer.ORIGINAL_ORDER=2;SourceMapConsumer.GREATEST_LOWER_BOUND=1;SourceMapConsumer.LEAST_UPPER_BOUND=2;SourceMapConsumer.prototype.eachMapping=function SourceMapConsumer_eachMapping(e,r,n){var t=r||null;var i=n||SourceMapConsumer.GENERATED_ORDER;var a;switch(i){case SourceMapConsumer.GENERATED_ORDER:a=this._generatedMappings;break;case SourceMapConsumer.ORIGINAL_ORDER:a=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;a.map((function(e){var r=e.source===null?null:this._sources.at(e.source);r=o.computeSourceURL(u,r,this._sourceMapURL);return{source:r,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name===null?null:this._names.at(e.name)}}),this).forEach(e,t)};SourceMapConsumer.prototype.allGeneratedPositionsFor=function SourceMapConsumer_allGeneratedPositionsFor(e){var r=o.getArg(e,"line");var n={source:o.getArg(e,"source"),originalLine:r,originalColumn:o.getArg(e,"column",0)};n.source=this._findSourceIndex(n.source);if(n.source<0){return[]}var t=[];var a=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,i.LEAST_UPPER_BOUND);if(a>=0){var u=this._originalMappings[a];if(e.column===undefined){var s=u.originalLine;while(u&&u.originalLine===s){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}else{var l=u.originalColumn;while(u&&u.originalLine===r&&u.originalColumn==l){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}}return t};r.SourceMapConsumer=SourceMapConsumer;function BasicSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sources");var u=o.getArg(n,"names",[]);var s=o.getArg(n,"sourceRoot",null);var l=o.getArg(n,"sourcesContent",null);var c=o.getArg(n,"mappings");var p=o.getArg(n,"file",null);if(t!=this._version){throw new Error("Unsupported version: "+t)}if(s){s=o.normalize(s)}i=i.map(String).map(o.normalize).map((function(e){return s&&o.isAbsolute(s)&&o.isAbsolute(e)?o.relative(s,e):e}));this._names=a.fromArray(u.map(String),true);this._sources=a.fromArray(i,true);this._absoluteSources=this._sources.toArray().map((function(e){return o.computeSourceURL(s,e,r)}));this.sourceRoot=s;this.sourcesContent=l;this._mappings=c;this._sourceMapURL=r;this.file=p}BasicSourceMapConsumer.prototype=Object.create(SourceMapConsumer.prototype);BasicSourceMapConsumer.prototype.consumer=SourceMapConsumer;BasicSourceMapConsumer.prototype._findSourceIndex=function(e){var r=e;if(this.sourceRoot!=null){r=o.relative(this.sourceRoot,r)}if(this._sources.has(r)){return this._sources.indexOf(r)}var n;for(n=0;n1){v.source=l+_[1];l+=_[1];v.originalLine=i+_[2];i=v.originalLine;v.originalLine+=1;v.originalColumn=a+_[3];a=v.originalColumn;if(_.length>4){v.name=c+_[4];c+=_[4]}}m.push(v);if(typeof v.originalLine==="number"){d.push(v)}}}s(m,o.compareByGeneratedPositionsDeflated);this.__generatedMappings=m;s(d,o.compareByOriginalPositions);this.__originalMappings=d};BasicSourceMapConsumer.prototype._findMapping=function SourceMapConsumer_findMapping(e,r,n,t,o,a){if(e[n]<=0){throw new TypeError("Line must be greater than or equal to 1, got "+e[n])}if(e[t]<0){throw new TypeError("Column must be greater than or equal to 0, got "+e[t])}return i.search(e,r,o,a)};BasicSourceMapConsumer.prototype.computeColumnSpans=function SourceMapConsumer_computeColumnSpans(){for(var e=0;e=0){var t=this._generatedMappings[n];if(t.generatedLine===r.generatedLine){var i=o.getArg(t,"source",null);if(i!==null){i=this._sources.at(i);i=o.computeSourceURL(this.sourceRoot,i,this._sourceMapURL)}var a=o.getArg(t,"name",null);if(a!==null){a=this._names.at(a)}return{source:i,line:o.getArg(t,"originalLine",null),column:o.getArg(t,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}};BasicSourceMapConsumer.prototype.hasContentsOfAllSources=function BasicSourceMapConsumer_hasContentsOfAllSources(){if(!this.sourcesContent){return false}return this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some((function(e){return e==null}))};BasicSourceMapConsumer.prototype.sourceContentFor=function SourceMapConsumer_sourceContentFor(e,r){if(!this.sourcesContent){return null}var n=this._findSourceIndex(e);if(n>=0){return this.sourcesContent[n]}var t=e;if(this.sourceRoot!=null){t=o.relative(this.sourceRoot,t)}var i;if(this.sourceRoot!=null&&(i=o.urlParse(this.sourceRoot))){var a=t.replace(/^file:\/\//,"");if(i.scheme=="file"&&this._sources.has(a)){return this.sourcesContent[this._sources.indexOf(a)]}if((!i.path||i.path=="/")&&this._sources.has("/"+t)){return this.sourcesContent[this._sources.indexOf("/"+t)]}}if(r){return null}else{throw new Error('"'+t+'" is not in the SourceMap.')}};BasicSourceMapConsumer.prototype.generatedPositionFor=function SourceMapConsumer_generatedPositionFor(e){var r=o.getArg(e,"source");r=this._findSourceIndex(r);if(r<0){return{line:null,column:null,lastColumn:null}}var n={source:r,originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};var t=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,o.getArg(e,"bias",SourceMapConsumer.GREATEST_LOWER_BOUND));if(t>=0){var i=this._originalMappings[t];if(i.source===n.source){return{line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}}}return{line:null,column:null,lastColumn:null}};t=BasicSourceMapConsumer;function IndexedSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sections");if(t!=this._version){throw new Error("Unsupported version: "+t)}this._sources=new a;this._names=new a;var u={line:-1,column:0};this._sections=i.map((function(e){if(e.url){throw new Error("Support for url field in sections not implemented.")}var n=o.getArg(e,"offset");var t=o.getArg(n,"line");var i=o.getArg(n,"column");if(t{var t=n(449);var o=n(339);var i=n(274).I;var a=n(680).H;function SourceMapGenerator(e){if(!e){e={}}this._file=o.getArg(e,"file",null);this._sourceRoot=o.getArg(e,"sourceRoot",null);this._skipValidation=o.getArg(e,"skipValidation",false);this._sources=new i;this._names=new i;this._mappings=new a;this._sourcesContents=null}SourceMapGenerator.prototype._version=3;SourceMapGenerator.fromSourceMap=function SourceMapGenerator_fromSourceMap(e){var r=e.sourceRoot;var n=new SourceMapGenerator({file:e.file,sourceRoot:r});e.eachMapping((function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};if(e.source!=null){t.source=e.source;if(r!=null){t.source=o.relative(r,t.source)}t.original={line:e.originalLine,column:e.originalColumn};if(e.name!=null){t.name=e.name}}n.addMapping(t)}));e.sources.forEach((function(t){var i=t;if(r!==null){i=o.relative(r,t)}if(!n._sources.has(i)){n._sources.add(i)}var a=e.sourceContentFor(t);if(a!=null){n.setSourceContent(t,a)}}));return n};SourceMapGenerator.prototype.addMapping=function SourceMapGenerator_addMapping(e){var r=o.getArg(e,"generated");var n=o.getArg(e,"original",null);var t=o.getArg(e,"source",null);var i=o.getArg(e,"name",null);if(!this._skipValidation){this._validateMapping(r,n,t,i)}if(t!=null){t=String(t);if(!this._sources.has(t)){this._sources.add(t)}}if(i!=null){i=String(i);if(!this._names.has(i)){this._names.add(i)}}this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:t,name:i})};SourceMapGenerator.prototype.setSourceContent=function SourceMapGenerator_setSourceContent(e,r){var n=e;if(this._sourceRoot!=null){n=o.relative(this._sourceRoot,n)}if(r!=null){if(!this._sourcesContents){this._sourcesContents=Object.create(null)}this._sourcesContents[o.toSetString(n)]=r}else if(this._sourcesContents){delete this._sourcesContents[o.toSetString(n)];if(Object.keys(this._sourcesContents).length===0){this._sourcesContents=null}}};SourceMapGenerator.prototype.applySourceMap=function SourceMapGenerator_applySourceMap(e,r,n){var t=r;if(r==null){if(e.file==null){throw new Error("SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, "+'or the source map\'s "file" property. Both were omitted.')}t=e.file}var a=this._sourceRoot;if(a!=null){t=o.relative(a,t)}var u=new i;var s=new i;this._mappings.unsortedForEach((function(r){if(r.source===t&&r.originalLine!=null){var i=e.originalPositionFor({line:r.originalLine,column:r.originalColumn});if(i.source!=null){r.source=i.source;if(n!=null){r.source=o.join(n,r.source)}if(a!=null){r.source=o.relative(a,r.source)}r.originalLine=i.line;r.originalColumn=i.column;if(i.name!=null){r.name=i.name}}}var l=r.source;if(l!=null&&!u.has(l)){u.add(l)}var c=r.name;if(c!=null&&!s.has(c)){s.add(c)}}),this);this._sources=u;this._names=s;e.sources.forEach((function(r){var t=e.sourceContentFor(r);if(t!=null){if(n!=null){r=o.join(n,r)}if(a!=null){r=o.relative(a,r)}this.setSourceContent(r,t)}}),this)};SourceMapGenerator.prototype._validateMapping=function SourceMapGenerator_validateMapping(e,r,n,t){if(r&&typeof r.line!=="number"&&typeof r.column!=="number"){throw new Error("original.line and original.column are not numbers -- you probably meant to omit "+"the original mapping entirely and only map the generated position. If so, pass "+"null for the original mapping instead of an object with empty or null values.")}if(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!t){return}else if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n){return}else{throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:t}))}};SourceMapGenerator.prototype._serializeMappings=function SourceMapGenerator_serializeMappings(){var e=0;var r=1;var n=0;var i=0;var a=0;var u=0;var s="";var l;var c;var p;var f;var g=this._mappings.toArray();for(var h=0,d=g.length;h0){if(!o.compareByGeneratedPositionsInflated(c,g[h-1])){continue}l+=","}}l+=t.encode(c.generatedColumn-e);e=c.generatedColumn;if(c.source!=null){f=this._sources.indexOf(c.source);l+=t.encode(f-u);u=f;l+=t.encode(c.originalLine-1-i);i=c.originalLine-1;l+=t.encode(c.originalColumn-n);n=c.originalColumn;if(c.name!=null){p=this._names.indexOf(c.name);l+=t.encode(p-a);a=p}}s+=l}return s};SourceMapGenerator.prototype._generateSourcesContent=function SourceMapGenerator_generateSourcesContent(e,r){return e.map((function(e){if(!this._sourcesContents){return null}if(r!=null){e=o.relative(r,e)}var n=o.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)};SourceMapGenerator.prototype.toJSON=function SourceMapGenerator_toJSON(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};if(this._file!=null){e.file=this._file}if(this._sourceRoot!=null){e.sourceRoot=this._sourceRoot}if(this._sourcesContents){e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)}return e};SourceMapGenerator.prototype.toString=function SourceMapGenerator_toString(){return JSON.stringify(this.toJSON())};r.h=SourceMapGenerator},351:(e,r,n)=>{var t;var o=n(591).h;var i=n(339);var a=/(\r?\n)/;var u=10;var s="$$$isSourceNode$$$";function SourceNode(e,r,n,t,o){this.children=[];this.sourceContents={};this.line=e==null?null:e;this.column=r==null?null:r;this.source=n==null?null:n;this.name=o==null?null:o;this[s]=true;if(t!=null)this.add(t)}SourceNode.fromStringWithSourceMap=function SourceNode_fromStringWithSourceMap(e,r,n){var t=new SourceNode;var o=e.split(a);var u=0;var shiftNextLine=function(){var e=getNextLine();var r=getNextLine()||"";return e+r;function getNextLine(){return u=0;r--){this.prepend(e[r])}}else if(e[s]||typeof e==="string"){this.children.unshift(e)}else{throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e)}return this};SourceNode.prototype.walk=function SourceNode_walk(e){var r;for(var n=0,t=this.children.length;n0){r=[];for(n=0;n{function getArg(e,r,n){if(r in e){return e[r]}else if(arguments.length===3){return n}else{throw new Error('"'+r+'" is a required argument.')}}r.getArg=getArg;var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;var t=/^data:.+\,.+$/;function urlParse(e){var r=e.match(n);if(!r){return null}return{scheme:r[1],auth:r[2],host:r[3],port:r[4],path:r[5]}}r.urlParse=urlParse;function urlGenerate(e){var r="";if(e.scheme){r+=e.scheme+":"}r+="//";if(e.auth){r+=e.auth+"@"}if(e.host){r+=e.host}if(e.port){r+=":"+e.port}if(e.path){r+=e.path}return r}r.urlGenerate=urlGenerate;function normalize(e){var n=e;var t=urlParse(e);if(t){if(!t.path){return e}n=t.path}var o=r.isAbsolute(n);var i=n.split(/\/+/);for(var a,u=0,s=i.length-1;s>=0;s--){a=i[s];if(a==="."){i.splice(s,1)}else if(a===".."){u++}else if(u>0){if(a===""){i.splice(s+1,u);u=0}else{i.splice(s,2);u--}}}n=i.join("/");if(n===""){n=o?"/":"."}if(t){t.path=n;return urlGenerate(t)}return n}r.normalize=normalize;function join(e,r){if(e===""){e="."}if(r===""){r="."}var n=urlParse(r);var o=urlParse(e);if(o){e=o.path||"/"}if(n&&!n.scheme){if(o){n.scheme=o.scheme}return urlGenerate(n)}if(n||r.match(t)){return r}if(o&&!o.host&&!o.path){o.host=r;return urlGenerate(o)}var i=r.charAt(0)==="/"?r:normalize(e.replace(/\/+$/,"")+"/"+r);if(o){o.path=i;return urlGenerate(o)}return i}r.join=join;r.isAbsolute=function(e){return e.charAt(0)==="/"||n.test(e)};function relative(e,r){if(e===""){e="."}e=e.replace(/\/$/,"");var n=0;while(r.indexOf(e+"/")!==0){var t=e.lastIndexOf("/");if(t<0){return r}e=e.slice(0,t);if(e.match(/^([^\/]+:\/)?\/*$/)){return r}++n}return Array(n+1).join("../")+r.substr(e.length+1)}r.relative=relative;var o=function(){var e=Object.create(null);return!("__proto__"in e)}();function identity(e){return e}function toSetString(e){if(isProtoString(e)){return"$"+e}return e}r.toSetString=o?identity:toSetString;function fromSetString(e){if(isProtoString(e)){return e.slice(1)}return e}r.fromSetString=o?identity:fromSetString;function isProtoString(e){if(!e){return false}var r=e.length;if(r<9){return false}if(e.charCodeAt(r-1)!==95||e.charCodeAt(r-2)!==95||e.charCodeAt(r-3)!==111||e.charCodeAt(r-4)!==116||e.charCodeAt(r-5)!==111||e.charCodeAt(r-6)!==114||e.charCodeAt(r-7)!==112||e.charCodeAt(r-8)!==95||e.charCodeAt(r-9)!==95){return false}for(var n=r-10;n>=0;n--){if(e.charCodeAt(n)!==36){return false}}return true}function compareByOriginalPositions(e,r,n){var t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0||n){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0){return t}t=e.generatedLine-r.generatedLine;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByOriginalPositions=compareByOriginalPositions;function compareByGeneratedPositionsDeflated(e,r,n){var t=e.generatedLine-r.generatedLine;if(t!==0){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0||n){return t}t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsDeflated=compareByGeneratedPositionsDeflated;function strcmp(e,r){if(e===r){return 0}if(e===null){return 1}if(r===null){return-1}if(e>r){return 1}return-1}function compareByGeneratedPositionsInflated(e,r){var n=e.generatedLine-r.generatedLine;if(n!==0){return n}n=e.generatedColumn-r.generatedColumn;if(n!==0){return n}n=strcmp(e.source,r.source);if(n!==0){return n}n=e.originalLine-r.originalLine;if(n!==0){return n}n=e.originalColumn-r.originalColumn;if(n!==0){return n}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsInflated=compareByGeneratedPositionsInflated;function parseSourceMapInput(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}r.parseSourceMapInput=parseSourceMapInput;function computeSourceURL(e,r,n){r=r||"";if(e){if(e[e.length-1]!=="/"&&r[0]!=="/"){e+="/"}r=e+r}if(n){var t=urlParse(n);if(!t){throw new Error("sourceMapURL could not be parsed")}if(t.path){var o=t.path.lastIndexOf("/");if(o>=0){t.path=t.path.substring(0,o+1)}}r=join(urlGenerate(t),r)}return normalize(r)}r.computeSourceURL=computeSourceURL},997:(e,r,n)=>{n(591).h;r.SourceMapConsumer=n(952).SourceMapConsumer;n(351)},284:(e,r,n)=>{e=n.nmd(e);var t=n(997).SourceMapConsumer;var o=n(17);var i;try{i=n(147);if(!i.existsSync||!i.readFileSync){i=null}}catch(e){}var a=n(650);function dynamicRequire(e,r){return e.require(r)}var u=false;var s=false;var l=false;var c="auto";var p={};var f={};var g=/^data:application\/json[^,]+base64,/;var h=[];var d=[];function isInBrowser(){if(c==="browser")return true;if(c==="node")return false;return typeof window!=="undefined"&&typeof XMLHttpRequest==="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function hasGlobalProcessEventEmitter(){return typeof process==="object"&&process!==null&&typeof process.on==="function"}function globalProcessVersion(){if(typeof process==="object"&&process!==null){return process.version}else{return""}}function globalProcessStderr(){if(typeof process==="object"&&process!==null){return process.stderr}}function globalProcessExit(e){if(typeof process==="object"&&process!==null&&typeof process.exit==="function"){return process.exit(e)}}function handlerExec(e){return function(r){for(var n=0;n"}var n=this.getLineNumber();if(n!=null){r+=":"+n;var t=this.getColumnNumber();if(t){r+=":"+t}}}var o="";var i=this.getFunctionName();var a=true;var u=this.isConstructor();var s=!(this.isToplevel()||u);if(s){var l=this.getTypeName();if(l==="[object Object]"){l="null"}var c=this.getMethodName();if(i){if(l&&i.indexOf(l)!=0){o+=l+"."}o+=i;if(c&&i.indexOf("."+c)!=i.length-c.length-1){o+=" [as "+c+"]"}}else{o+=l+"."+(c||"")}}else if(u){o+="new "+(i||"")}else if(i){o+=i}else{o+=r;a=false}if(a){o+=" ("+r+")"}return o}function cloneCallSite(e){var r={};Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach((function(n){r[n]=/^(?:is|get)/.test(n)?function(){return e[n].call(e)}:e[n]}));r.toString=CallSiteToString;return r}function wrapCallSite(e,r){if(r===undefined){r={nextPosition:null,curPosition:null}}if(e.isNative()){r.curPosition=null;return e}var n=e.getFileName()||e.getScriptNameOrSourceURL();if(n){var t=e.getLineNumber();var o=e.getColumnNumber()-1;var i=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;var a=i.test(globalProcessVersion())?0:62;if(t===1&&o>a&&!isInBrowser()&&!e.isEval()){o-=a}var u=mapSourcePosition({source:n,line:t,column:o});r.curPosition=u;e=cloneCallSite(e);var s=e.getFunctionName;e.getFunctionName=function(){if(r.nextPosition==null){return s()}return r.nextPosition.name||s()};e.getFileName=function(){return u.source};e.getLineNumber=function(){return u.line};e.getColumnNumber=function(){return u.column+1};e.getScriptNameOrSourceURL=function(){return u.source};return e}var l=e.isEval()&&e.getEvalOrigin();if(l){l=mapEvalOrigin(l);e=cloneCallSite(e);e.getEvalOrigin=function(){return l};return e}return e}function prepareStackTrace(e,r){if(l){p={};f={}}var n=e.name||"Error";var t=e.message||"";var o=n+": "+t;var i={nextPosition:null,curPosition:null};var a=[];for(var u=r.length-1;u>=0;u--){a.push("\n at "+wrapCallSite(r[u],i));i.nextPosition=i.curPosition}i.curPosition=i.nextPosition=null;return o+a.reverse().join("")}function getErrorSource(e){var r=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(e.stack);if(r){var n=r[1];var t=+r[2];var o=+r[3];var a=p[n];if(!a&&i&&i.existsSync(n)){try{a=i.readFileSync(n,"utf8")}catch(e){a=""}}if(a){var u=a.split(/(?:\r\n|\r|\n)/)[t-1];if(u){return n+":"+t+"\n"+u+"\n"+new Array(o).join(" ")+"^"}}}return null}function printErrorAndExit(e){var r=getErrorSource(e);var n=globalProcessStderr();if(n&&n._handle&&n._handle.setBlocking){n._handle.setBlocking(true)}if(r){console.error();console.error(r)}console.error(e.stack);globalProcessExit(1)}function shimEmitUncaughtException(){var e=process.emit;process.emit=function(r){if(r==="uncaughtException"){var n=arguments[1]&&arguments[1].stack;var t=this.listeners(r).length>0;if(n&&!t){return printErrorAndExit(arguments[1])}}return e.apply(this,arguments)}}var S=h.slice(0);var _=d.slice(0);r.wrapCallSite=wrapCallSite;r.getErrorSource=getErrorSource;r.mapSourcePosition=mapSourcePosition;r.retrieveSourceMap=v;r.install=function(r){r=r||{};if(r.environment){c=r.environment;if(["node","browser","auto"].indexOf(c)===-1){throw new Error("environment "+c+" was unknown. Available options are {auto, browser, node}")}}if(r.retrieveFile){if(r.overrideRetrieveFile){h.length=0}h.unshift(r.retrieveFile)}if(r.retrieveSourceMap){if(r.overrideRetrieveSourceMap){d.length=0}d.unshift(r.retrieveSourceMap)}if(r.hookRequire&&!isInBrowser()){var n=dynamicRequire(e,"module");var t=n.prototype._compile;if(!t.__sourceMapSupport){n.prototype._compile=function(e,r){p[r]=e;f[r]=undefined;return t.call(this,e,r)};n.prototype._compile.__sourceMapSupport=true}}if(!l){l="emptyCacheBetweenOperations"in r?r.emptyCacheBetweenOperations:false}if(!u){u=true;Error.prepareStackTrace=prepareStackTrace}if(!s){var o="handleUncaughtExceptions"in r?r.handleUncaughtExceptions:true;try{var i=dynamicRequire(e,"worker_threads");if(i.isMainThread===false){o=false}}catch(e){}if(o&&hasGlobalProcessEventEmitter()){s=true;shimEmitUncaughtException()}}};r.resetRetrieveHandlers=function(){h.length=0;d.length=0;h=S.slice(0);d=_.slice(0);v=handlerExec(d);m=handlerExec(h)}},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}};var r={};function __webpack_require__(n){var t=r[n];if(t!==undefined){return t.exports}var o=r[n]={id:n,loaded:false,exports:{}};var i=true;try{e[n](o,o.exports,__webpack_require__);i=false}finally{if(i)delete r[n]}o.loaded=true;return o.exports}(()=>{__webpack_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __webpack_require__!=="undefined")__webpack_require__.ab=__dirname+"/";var n={};(()=>{__webpack_require__(284).install()})();module.exports=n})(); -------------------------------------------------------------------------------- /dist/licenses.txt: -------------------------------------------------------------------------------- 1 | @actions/core 2 | MIT 3 | The MIT License (MIT) 4 | 5 | Copyright 2019 GitHub 6 | 7 | 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: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | 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. 12 | 13 | @actions/exec 14 | MIT 15 | The MIT License (MIT) 16 | 17 | Copyright 2019 GitHub 18 | 19 | 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: 20 | 21 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 22 | 23 | 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. 24 | 25 | @actions/http-client 26 | MIT 27 | Actions Http Client for Node.js 28 | 29 | Copyright (c) GitHub, Inc. 30 | 31 | All rights reserved. 32 | 33 | MIT License 34 | 35 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 36 | associated documentation files (the "Software"), to deal in the Software without restriction, 37 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 38 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 39 | subject to the following conditions: 40 | 41 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 44 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 45 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 46 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 47 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 48 | 49 | 50 | @actions/io 51 | MIT 52 | The MIT License (MIT) 53 | 54 | Copyright 2019 GitHub 55 | 56 | 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: 57 | 58 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 59 | 60 | 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. 61 | 62 | @fastify/busboy 63 | MIT 64 | Copyright Brian White. All rights reserved. 65 | 66 | Permission is hereby granted, free of charge, to any person obtaining a copy 67 | of this software and associated documentation files (the "Software"), to 68 | deal in the Software without restriction, including without limitation the 69 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 70 | sell copies of the Software, and to permit persons to whom the Software is 71 | furnished to do so, subject to the following conditions: 72 | 73 | The above copyright notice and this permission notice shall be included in 74 | all copies or substantial portions of the Software. 75 | 76 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 77 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 78 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 79 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 80 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 81 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 82 | IN THE SOFTWARE. 83 | 84 | @octokit/auth-token 85 | MIT 86 | The MIT License 87 | 88 | Copyright (c) 2019 Octokit contributors 89 | 90 | Permission is hereby granted, free of charge, to any person obtaining a copy 91 | of this software and associated documentation files (the "Software"), to deal 92 | in the Software without restriction, including without limitation the rights 93 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 94 | copies of the Software, and to permit persons to whom the Software is 95 | furnished to do so, subject to the following conditions: 96 | 97 | The above copyright notice and this permission notice shall be included in 98 | all copies or substantial portions of the Software. 99 | 100 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 101 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 102 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 103 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 104 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 105 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 106 | THE SOFTWARE. 107 | 108 | 109 | @octokit/core 110 | MIT 111 | The MIT License 112 | 113 | Copyright (c) 2019 Octokit contributors 114 | 115 | Permission is hereby granted, free of charge, to any person obtaining a copy 116 | of this software and associated documentation files (the "Software"), to deal 117 | in the Software without restriction, including without limitation the rights 118 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 119 | copies of the Software, and to permit persons to whom the Software is 120 | furnished to do so, subject to the following conditions: 121 | 122 | The above copyright notice and this permission notice shall be included in 123 | all copies or substantial portions of the Software. 124 | 125 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 126 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 127 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 128 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 129 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 130 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 131 | THE SOFTWARE. 132 | 133 | 134 | @octokit/endpoint 135 | MIT 136 | The MIT License 137 | 138 | Copyright (c) 2018 Octokit contributors 139 | 140 | Permission is hereby granted, free of charge, to any person obtaining a copy 141 | of this software and associated documentation files (the "Software"), to deal 142 | in the Software without restriction, including without limitation the rights 143 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 144 | copies of the Software, and to permit persons to whom the Software is 145 | furnished to do so, subject to the following conditions: 146 | 147 | The above copyright notice and this permission notice shall be included in 148 | all copies or substantial portions of the Software. 149 | 150 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 151 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 152 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 153 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 154 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 155 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 156 | THE SOFTWARE. 157 | 158 | 159 | @octokit/graphql 160 | MIT 161 | The MIT License 162 | 163 | Copyright (c) 2018 Octokit contributors 164 | 165 | Permission is hereby granted, free of charge, to any person obtaining a copy 166 | of this software and associated documentation files (the "Software"), to deal 167 | in the Software without restriction, including without limitation the rights 168 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 169 | copies of the Software, and to permit persons to whom the Software is 170 | furnished to do so, subject to the following conditions: 171 | 172 | The above copyright notice and this permission notice shall be included in 173 | all copies or substantial portions of the Software. 174 | 175 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 176 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 177 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 178 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 179 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 180 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 181 | THE SOFTWARE. 182 | 183 | 184 | @octokit/plugin-retry 185 | MIT 186 | MIT License 187 | 188 | Copyright (c) 2018 Octokit contributors 189 | 190 | Permission is hereby granted, free of charge, to any person obtaining a copy 191 | of this software and associated documentation files (the "Software"), to deal 192 | in the Software without restriction, including without limitation the rights 193 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 194 | copies of the Software, and to permit persons to whom the Software is 195 | furnished to do so, subject to the following conditions: 196 | 197 | The above copyright notice and this permission notice shall be included in all 198 | copies or substantial portions of the Software. 199 | 200 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 201 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 202 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 203 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 204 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 205 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 206 | SOFTWARE. 207 | 208 | 209 | @octokit/plugin-throttling 210 | MIT 211 | The MIT License 212 | 213 | Copyright (c) 2018 Octokit contributors 214 | 215 | Permission is hereby granted, free of charge, to any person obtaining a copy 216 | of this software and associated documentation files (the "Software"), to deal 217 | in the Software without restriction, including without limitation the rights 218 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 219 | copies of the Software, and to permit persons to whom the Software is 220 | furnished to do so, subject to the following conditions: 221 | 222 | The above copyright notice and this permission notice shall be included in 223 | all copies or substantial portions of the Software. 224 | 225 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 226 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 227 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 228 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 229 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 230 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 231 | THE SOFTWARE. 232 | 233 | 234 | @octokit/request 235 | MIT 236 | The MIT License 237 | 238 | Copyright (c) 2018 Octokit contributors 239 | 240 | Permission is hereby granted, free of charge, to any person obtaining a copy 241 | of this software and associated documentation files (the "Software"), to deal 242 | in the Software without restriction, including without limitation the rights 243 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 244 | copies of the Software, and to permit persons to whom the Software is 245 | furnished to do so, subject to the following conditions: 246 | 247 | The above copyright notice and this permission notice shall be included in 248 | all copies or substantial portions of the Software. 249 | 250 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 251 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 252 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 253 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 254 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 255 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 256 | THE SOFTWARE. 257 | 258 | 259 | @octokit/request-error 260 | MIT 261 | The MIT License 262 | 263 | Copyright (c) 2019 Octokit contributors 264 | 265 | Permission is hereby granted, free of charge, to any person obtaining a copy 266 | of this software and associated documentation files (the "Software"), to deal 267 | in the Software without restriction, including without limitation the rights 268 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 269 | copies of the Software, and to permit persons to whom the Software is 270 | furnished to do so, subject to the following conditions: 271 | 272 | The above copyright notice and this permission notice shall be included in 273 | all copies or substantial portions of the Software. 274 | 275 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 276 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 277 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 278 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 279 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 280 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 281 | THE SOFTWARE. 282 | 283 | 284 | actions-js-toolkit 285 | MIT 286 | GNU GENERAL PUBLIC LICENSE 287 | Version 3, 29 June 2007 288 | 289 | Copyright (C) 2007 Free Software Foundation, Inc. 290 | Everyone is permitted to copy and distribute verbatim copies 291 | of this license document, but changing it is not allowed. 292 | 293 | Preamble 294 | 295 | The GNU General Public License is a free, copyleft license for 296 | software and other kinds of works. 297 | 298 | The licenses for most software and other practical works are designed 299 | to take away your freedom to share and change the works. By contrast, 300 | the GNU General Public License is intended to guarantee your freedom to 301 | share and change all versions of a program--to make sure it remains free 302 | software for all its users. We, the Free Software Foundation, use the 303 | GNU General Public License for most of our software; it applies also to 304 | any other work released this way by its authors. You can apply it to 305 | your programs, too. 306 | 307 | When we speak of free software, we are referring to freedom, not 308 | price. Our General Public Licenses are designed to make sure that you 309 | have the freedom to distribute copies of free software (and charge for 310 | them if you wish), that you receive source code or can get it if you 311 | want it, that you can change the software or use pieces of it in new 312 | free programs, and that you know you can do these things. 313 | 314 | To protect your rights, we need to prevent others from denying you 315 | these rights or asking you to surrender the rights. Therefore, you have 316 | certain responsibilities if you distribute copies of the software, or if 317 | you modify it: responsibilities to respect the freedom of others. 318 | 319 | For example, if you distribute copies of such a program, whether 320 | gratis or for a fee, you must pass on to the recipients the same 321 | freedoms that you received. You must make sure that they, too, receive 322 | or can get the source code. And you must show them these terms so they 323 | know their rights. 324 | 325 | Developers that use the GNU GPL protect your rights with two steps: 326 | (1) assert copyright on the software, and (2) offer you this License 327 | giving you legal permission to copy, distribute and/or modify it. 328 | 329 | For the developers' and authors' protection, the GPL clearly explains 330 | that there is no warranty for this free software. For both users' and 331 | authors' sake, the GPL requires that modified versions be marked as 332 | changed, so that their problems will not be attributed erroneously to 333 | authors of previous versions. 334 | 335 | Some devices are designed to deny users access to install or run 336 | modified versions of the software inside them, although the manufacturer 337 | can do so. This is fundamentally incompatible with the aim of 338 | protecting users' freedom to change the software. The systematic 339 | pattern of such abuse occurs in the area of products for individuals to 340 | use, which is precisely where it is most unacceptable. Therefore, we 341 | have designed this version of the GPL to prohibit the practice for those 342 | products. If such problems arise substantially in other domains, we 343 | stand ready to extend this provision to those domains in future versions 344 | of the GPL, as needed to protect the freedom of users. 345 | 346 | Finally, every program is threatened constantly by software patents. 347 | States should not allow patents to restrict development and use of 348 | software on general-purpose computers, but in those that do, we wish to 349 | avoid the special danger that patents applied to a free program could 350 | make it effectively proprietary. To prevent this, the GPL assures that 351 | patents cannot be used to render the program non-free. 352 | 353 | The precise terms and conditions for copying, distribution and 354 | modification follow. 355 | 356 | TERMS AND CONDITIONS 357 | 358 | 0. Definitions. 359 | 360 | "This License" refers to version 3 of the GNU General Public License. 361 | 362 | "Copyright" also means copyright-like laws that apply to other kinds of 363 | works, such as semiconductor masks. 364 | 365 | "The Program" refers to any copyrightable work licensed under this 366 | License. Each licensee is addressed as "you". "Licensees" and 367 | "recipients" may be individuals or organizations. 368 | 369 | To "modify" a work means to copy from or adapt all or part of the work 370 | in a fashion requiring copyright permission, other than the making of an 371 | exact copy. The resulting work is called a "modified version" of the 372 | earlier work or a work "based on" the earlier work. 373 | 374 | A "covered work" means either the unmodified Program or a work based 375 | on the Program. 376 | 377 | To "propagate" a work means to do anything with it that, without 378 | permission, would make you directly or secondarily liable for 379 | infringement under applicable copyright law, except executing it on a 380 | computer or modifying a private copy. Propagation includes copying, 381 | distribution (with or without modification), making available to the 382 | public, and in some countries other activities as well. 383 | 384 | To "convey" a work means any kind of propagation that enables other 385 | parties to make or receive copies. Mere interaction with a user through 386 | a computer network, with no transfer of a copy, is not conveying. 387 | 388 | An interactive user interface displays "Appropriate Legal Notices" 389 | to the extent that it includes a convenient and prominently visible 390 | feature that (1) displays an appropriate copyright notice, and (2) 391 | tells the user that there is no warranty for the work (except to the 392 | extent that warranties are provided), that licensees may convey the 393 | work under this License, and how to view a copy of this License. If 394 | the interface presents a list of user commands or options, such as a 395 | menu, a prominent item in the list meets this criterion. 396 | 397 | 1. Source Code. 398 | 399 | The "source code" for a work means the preferred form of the work 400 | for making modifications to it. "Object code" means any non-source 401 | form of a work. 402 | 403 | A "Standard Interface" means an interface that either is an official 404 | standard defined by a recognized standards body, or, in the case of 405 | interfaces specified for a particular programming language, one that 406 | is widely used among developers working in that language. 407 | 408 | The "System Libraries" of an executable work include anything, other 409 | than the work as a whole, that (a) is included in the normal form of 410 | packaging a Major Component, but which is not part of that Major 411 | Component, and (b) serves only to enable use of the work with that 412 | Major Component, or to implement a Standard Interface for which an 413 | implementation is available to the public in source code form. A 414 | "Major Component", in this context, means a major essential component 415 | (kernel, window system, and so on) of the specific operating system 416 | (if any) on which the executable work runs, or a compiler used to 417 | produce the work, or an object code interpreter used to run it. 418 | 419 | The "Corresponding Source" for a work in object code form means all 420 | the source code needed to generate, install, and (for an executable 421 | work) run the object code and to modify the work, including scripts to 422 | control those activities. However, it does not include the work's 423 | System Libraries, or general-purpose tools or generally available free 424 | programs which are used unmodified in performing those activities but 425 | which are not part of the work. For example, Corresponding Source 426 | includes interface definition files associated with source files for 427 | the work, and the source code for shared libraries and dynamically 428 | linked subprograms that the work is specifically designed to require, 429 | such as by intimate data communication or control flow between those 430 | subprograms and other parts of the work. 431 | 432 | The Corresponding Source need not include anything that users 433 | can regenerate automatically from other parts of the Corresponding 434 | Source. 435 | 436 | The Corresponding Source for a work in source code form is that 437 | same work. 438 | 439 | 2. Basic Permissions. 440 | 441 | All rights granted under this License are granted for the term of 442 | copyright on the Program, and are irrevocable provided the stated 443 | conditions are met. This License explicitly affirms your unlimited 444 | permission to run the unmodified Program. The output from running a 445 | covered work is covered by this License only if the output, given its 446 | content, constitutes a covered work. This License acknowledges your 447 | rights of fair use or other equivalent, as provided by copyright law. 448 | 449 | You may make, run and propagate covered works that you do not 450 | convey, without conditions so long as your license otherwise remains 451 | in force. You may convey covered works to others for the sole purpose 452 | of having them make modifications exclusively for you, or provide you 453 | with facilities for running those works, provided that you comply with 454 | the terms of this License in conveying all material for which you do 455 | not control copyright. Those thus making or running the covered works 456 | for you must do so exclusively on your behalf, under your direction 457 | and control, on terms that prohibit them from making any copies of 458 | your copyrighted material outside their relationship with you. 459 | 460 | Conveying under any other circumstances is permitted solely under 461 | the conditions stated below. Sublicensing is not allowed; section 10 462 | makes it unnecessary. 463 | 464 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 465 | 466 | No covered work shall be deemed part of an effective technological 467 | measure under any applicable law fulfilling obligations under article 468 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 469 | similar laws prohibiting or restricting circumvention of such 470 | measures. 471 | 472 | When you convey a covered work, you waive any legal power to forbid 473 | circumvention of technological measures to the extent such circumvention 474 | is effected by exercising rights under this License with respect to 475 | the covered work, and you disclaim any intention to limit operation or 476 | modification of the work as a means of enforcing, against the work's 477 | users, your or third parties' legal rights to forbid circumvention of 478 | technological measures. 479 | 480 | 4. Conveying Verbatim Copies. 481 | 482 | You may convey verbatim copies of the Program's source code as you 483 | receive it, in any medium, provided that you conspicuously and 484 | appropriately publish on each copy an appropriate copyright notice; 485 | keep intact all notices stating that this License and any 486 | non-permissive terms added in accord with section 7 apply to the code; 487 | keep intact all notices of the absence of any warranty; and give all 488 | recipients a copy of this License along with the Program. 489 | 490 | You may charge any price or no price for each copy that you convey, 491 | and you may offer support or warranty protection for a fee. 492 | 493 | 5. Conveying Modified Source Versions. 494 | 495 | You may convey a work based on the Program, or the modifications to 496 | produce it from the Program, in the form of source code under the 497 | terms of section 4, provided that you also meet all of these conditions: 498 | 499 | a) The work must carry prominent notices stating that you modified 500 | it, and giving a relevant date. 501 | 502 | b) The work must carry prominent notices stating that it is 503 | released under this License and any conditions added under section 504 | 7. This requirement modifies the requirement in section 4 to 505 | "keep intact all notices". 506 | 507 | c) You must license the entire work, as a whole, under this 508 | License to anyone who comes into possession of a copy. This 509 | License will therefore apply, along with any applicable section 7 510 | additional terms, to the whole of the work, and all its parts, 511 | regardless of how they are packaged. This License gives no 512 | permission to license the work in any other way, but it does not 513 | invalidate such permission if you have separately received it. 514 | 515 | d) If the work has interactive user interfaces, each must display 516 | Appropriate Legal Notices; however, if the Program has interactive 517 | interfaces that do not display Appropriate Legal Notices, your 518 | work need not make them do so. 519 | 520 | A compilation of a covered work with other separate and independent 521 | works, which are not by their nature extensions of the covered work, 522 | and which are not combined with it such as to form a larger program, 523 | in or on a volume of a storage or distribution medium, is called an 524 | "aggregate" if the compilation and its resulting copyright are not 525 | used to limit the access or legal rights of the compilation's users 526 | beyond what the individual works permit. Inclusion of a covered work 527 | in an aggregate does not cause this License to apply to the other 528 | parts of the aggregate. 529 | 530 | 6. Conveying Non-Source Forms. 531 | 532 | You may convey a covered work in object code form under the terms 533 | of sections 4 and 5, provided that you also convey the 534 | machine-readable Corresponding Source under the terms of this License, 535 | in one of these ways: 536 | 537 | a) Convey the object code in, or embodied in, a physical product 538 | (including a physical distribution medium), accompanied by the 539 | Corresponding Source fixed on a durable physical medium 540 | customarily used for software interchange. 541 | 542 | b) Convey the object code in, or embodied in, a physical product 543 | (including a physical distribution medium), accompanied by a 544 | written offer, valid for at least three years and valid for as 545 | long as you offer spare parts or customer support for that product 546 | model, to give anyone who possesses the object code either (1) a 547 | copy of the Corresponding Source for all the software in the 548 | product that is covered by this License, on a durable physical 549 | medium customarily used for software interchange, for a price no 550 | more than your reasonable cost of physically performing this 551 | conveying of source, or (2) access to copy the 552 | Corresponding Source from a network server at no charge. 553 | 554 | c) Convey individual copies of the object code with a copy of the 555 | written offer to provide the Corresponding Source. This 556 | alternative is allowed only occasionally and noncommercially, and 557 | only if you received the object code with such an offer, in accord 558 | with subsection 6b. 559 | 560 | d) Convey the object code by offering access from a designated 561 | place (gratis or for a charge), and offer equivalent access to the 562 | Corresponding Source in the same way through the same place at no 563 | further charge. You need not require recipients to copy the 564 | Corresponding Source along with the object code. If the place to 565 | copy the object code is a network server, the Corresponding Source 566 | may be on a different server (operated by you or a third party) 567 | that supports equivalent copying facilities, provided you maintain 568 | clear directions next to the object code saying where to find the 569 | Corresponding Source. Regardless of what server hosts the 570 | Corresponding Source, you remain obligated to ensure that it is 571 | available for as long as needed to satisfy these requirements. 572 | 573 | e) Convey the object code using peer-to-peer transmission, provided 574 | you inform other peers where the object code and Corresponding 575 | Source of the work are being offered to the general public at no 576 | charge under subsection 6d. 577 | 578 | A separable portion of the object code, whose source code is excluded 579 | from the Corresponding Source as a System Library, need not be 580 | included in conveying the object code work. 581 | 582 | A "User Product" is either (1) a "consumer product", which means any 583 | tangible personal property which is normally used for personal, family, 584 | or household purposes, or (2) anything designed or sold for incorporation 585 | into a dwelling. In determining whether a product is a consumer product, 586 | doubtful cases shall be resolved in favor of coverage. For a particular 587 | product received by a particular user, "normally used" refers to a 588 | typical or common use of that class of product, regardless of the status 589 | of the particular user or of the way in which the particular user 590 | actually uses, or expects or is expected to use, the product. A product 591 | is a consumer product regardless of whether the product has substantial 592 | commercial, industrial or non-consumer uses, unless such uses represent 593 | the only significant mode of use of the product. 594 | 595 | "Installation Information" for a User Product means any methods, 596 | procedures, authorization keys, or other information required to install 597 | and execute modified versions of a covered work in that User Product from 598 | a modified version of its Corresponding Source. The information must 599 | suffice to ensure that the continued functioning of the modified object 600 | code is in no case prevented or interfered with solely because 601 | modification has been made. 602 | 603 | If you convey an object code work under this section in, or with, or 604 | specifically for use in, a User Product, and the conveying occurs as 605 | part of a transaction in which the right of possession and use of the 606 | User Product is transferred to the recipient in perpetuity or for a 607 | fixed term (regardless of how the transaction is characterized), the 608 | Corresponding Source conveyed under this section must be accompanied 609 | by the Installation Information. But this requirement does not apply 610 | if neither you nor any third party retains the ability to install 611 | modified object code on the User Product (for example, the work has 612 | been installed in ROM). 613 | 614 | The requirement to provide Installation Information does not include a 615 | requirement to continue to provide support service, warranty, or updates 616 | for a work that has been modified or installed by the recipient, or for 617 | the User Product in which it has been modified or installed. Access to a 618 | network may be denied when the modification itself materially and 619 | adversely affects the operation of the network or violates the rules and 620 | protocols for communication across the network. 621 | 622 | Corresponding Source conveyed, and Installation Information provided, 623 | in accord with this section must be in a format that is publicly 624 | documented (and with an implementation available to the public in 625 | source code form), and must require no special password or key for 626 | unpacking, reading or copying. 627 | 628 | 7. Additional Terms. 629 | 630 | "Additional permissions" are terms that supplement the terms of this 631 | License by making exceptions from one or more of its conditions. 632 | Additional permissions that are applicable to the entire Program shall 633 | be treated as though they were included in this License, to the extent 634 | that they are valid under applicable law. If additional permissions 635 | apply only to part of the Program, that part may be used separately 636 | under those permissions, but the entire Program remains governed by 637 | this License without regard to the additional permissions. 638 | 639 | When you convey a copy of a covered work, you may at your option 640 | remove any additional permissions from that copy, or from any part of 641 | it. (Additional permissions may be written to require their own 642 | removal in certain cases when you modify the work.) You may place 643 | additional permissions on material, added by you to a covered work, 644 | for which you have or can give appropriate copyright permission. 645 | 646 | Notwithstanding any other provision of this License, for material you 647 | add to a covered work, you may (if authorized by the copyright holders of 648 | that material) supplement the terms of this License with terms: 649 | 650 | a) Disclaiming warranty or limiting liability differently from the 651 | terms of sections 15 and 16 of this License; or 652 | 653 | b) Requiring preservation of specified reasonable legal notices or 654 | author attributions in that material or in the Appropriate Legal 655 | Notices displayed by works containing it; or 656 | 657 | c) Prohibiting misrepresentation of the origin of that material, or 658 | requiring that modified versions of such material be marked in 659 | reasonable ways as different from the original version; or 660 | 661 | d) Limiting the use for publicity purposes of names of licensors or 662 | authors of the material; or 663 | 664 | e) Declining to grant rights under trademark law for use of some 665 | trade names, trademarks, or service marks; or 666 | 667 | f) Requiring indemnification of licensors and authors of that 668 | material by anyone who conveys the material (or modified versions of 669 | it) with contractual assumptions of liability to the recipient, for 670 | any liability that these contractual assumptions directly impose on 671 | those licensors and authors. 672 | 673 | All other non-permissive additional terms are considered "further 674 | restrictions" within the meaning of section 10. If the Program as you 675 | received it, or any part of it, contains a notice stating that it is 676 | governed by this License along with a term that is a further 677 | restriction, you may remove that term. If a license document contains 678 | a further restriction but permits relicensing or conveying under this 679 | License, you may add to a covered work material governed by the terms 680 | of that license document, provided that the further restriction does 681 | not survive such relicensing or conveying. 682 | 683 | If you add terms to a covered work in accord with this section, you 684 | must place, in the relevant source files, a statement of the 685 | additional terms that apply to those files, or a notice indicating 686 | where to find the applicable terms. 687 | 688 | Additional terms, permissive or non-permissive, may be stated in the 689 | form of a separately written license, or stated as exceptions; 690 | the above requirements apply either way. 691 | 692 | 8. Termination. 693 | 694 | You may not propagate or modify a covered work except as expressly 695 | provided under this License. Any attempt otherwise to propagate or 696 | modify it is void, and will automatically terminate your rights under 697 | this License (including any patent licenses granted under the third 698 | paragraph of section 11). 699 | 700 | However, if you cease all violation of this License, then your 701 | license from a particular copyright holder is reinstated (a) 702 | provisionally, unless and until the copyright holder explicitly and 703 | finally terminates your license, and (b) permanently, if the copyright 704 | holder fails to notify you of the violation by some reasonable means 705 | prior to 60 days after the cessation. 706 | 707 | Moreover, your license from a particular copyright holder is 708 | reinstated permanently if the copyright holder notifies you of the 709 | violation by some reasonable means, this is the first time you have 710 | received notice of violation of this License (for any work) from that 711 | copyright holder, and you cure the violation prior to 30 days after 712 | your receipt of the notice. 713 | 714 | Termination of your rights under this section does not terminate the 715 | licenses of parties who have received copies or rights from you under 716 | this License. If your rights have been terminated and not permanently 717 | reinstated, you do not qualify to receive new licenses for the same 718 | material under section 10. 719 | 720 | 9. Acceptance Not Required for Having Copies. 721 | 722 | You are not required to accept this License in order to receive or 723 | run a copy of the Program. Ancillary propagation of a covered work 724 | occurring solely as a consequence of using peer-to-peer transmission 725 | to receive a copy likewise does not require acceptance. However, 726 | nothing other than this License grants you permission to propagate or 727 | modify any covered work. These actions infringe copyright if you do 728 | not accept this License. Therefore, by modifying or propagating a 729 | covered work, you indicate your acceptance of this License to do so. 730 | 731 | 10. Automatic Licensing of Downstream Recipients. 732 | 733 | Each time you convey a covered work, the recipient automatically 734 | receives a license from the original licensors, to run, modify and 735 | propagate that work, subject to this License. You are not responsible 736 | for enforcing compliance by third parties with this License. 737 | 738 | An "entity transaction" is a transaction transferring control of an 739 | organization, or substantially all assets of one, or subdividing an 740 | organization, or merging organizations. If propagation of a covered 741 | work results from an entity transaction, each party to that 742 | transaction who receives a copy of the work also receives whatever 743 | licenses to the work the party's predecessor in interest had or could 744 | give under the previous paragraph, plus a right to possession of the 745 | Corresponding Source of the work from the predecessor in interest, if 746 | the predecessor has it or can get it with reasonable efforts. 747 | 748 | You may not impose any further restrictions on the exercise of the 749 | rights granted or affirmed under this License. For example, you may 750 | not impose a license fee, royalty, or other charge for exercise of 751 | rights granted under this License, and you may not initiate litigation 752 | (including a cross-claim or counterclaim in a lawsuit) alleging that 753 | any patent claim is infringed by making, using, selling, offering for 754 | sale, or importing the Program or any portion of it. 755 | 756 | 11. Patents. 757 | 758 | A "contributor" is a copyright holder who authorizes use under this 759 | License of the Program or a work on which the Program is based. The 760 | work thus licensed is called the contributor's "contributor version". 761 | 762 | A contributor's "essential patent claims" are all patent claims 763 | owned or controlled by the contributor, whether already acquired or 764 | hereafter acquired, that would be infringed by some manner, permitted 765 | by this License, of making, using, or selling its contributor version, 766 | but do not include claims that would be infringed only as a 767 | consequence of further modification of the contributor version. For 768 | purposes of this definition, "control" includes the right to grant 769 | patent sublicenses in a manner consistent with the requirements of 770 | this License. 771 | 772 | Each contributor grants you a non-exclusive, worldwide, royalty-free 773 | patent license under the contributor's essential patent claims, to 774 | make, use, sell, offer for sale, import and otherwise run, modify and 775 | propagate the contents of its contributor version. 776 | 777 | In the following three paragraphs, a "patent license" is any express 778 | agreement or commitment, however denominated, not to enforce a patent 779 | (such as an express permission to practice a patent or covenant not to 780 | sue for patent infringement). To "grant" such a patent license to a 781 | party means to make such an agreement or commitment not to enforce a 782 | patent against the party. 783 | 784 | If you convey a covered work, knowingly relying on a patent license, 785 | and the Corresponding Source of the work is not available for anyone 786 | to copy, free of charge and under the terms of this License, through a 787 | publicly available network server or other readily accessible means, 788 | then you must either (1) cause the Corresponding Source to be so 789 | available, or (2) arrange to deprive yourself of the benefit of the 790 | patent license for this particular work, or (3) arrange, in a manner 791 | consistent with the requirements of this License, to extend the patent 792 | license to downstream recipients. "Knowingly relying" means you have 793 | actual knowledge that, but for the patent license, your conveying the 794 | covered work in a country, or your recipient's use of the covered work 795 | in a country, would infringe one or more identifiable patents in that 796 | country that you have reason to believe are valid. 797 | 798 | If, pursuant to or in connection with a single transaction or 799 | arrangement, you convey, or propagate by procuring conveyance of, a 800 | covered work, and grant a patent license to some of the parties 801 | receiving the covered work authorizing them to use, propagate, modify 802 | or convey a specific copy of the covered work, then the patent license 803 | you grant is automatically extended to all recipients of the covered 804 | work and works based on it. 805 | 806 | A patent license is "discriminatory" if it does not include within 807 | the scope of its coverage, prohibits the exercise of, or is 808 | conditioned on the non-exercise of one or more of the rights that are 809 | specifically granted under this License. You may not convey a covered 810 | work if you are a party to an arrangement with a third party that is 811 | in the business of distributing software, under which you make payment 812 | to the third party based on the extent of your activity of conveying 813 | the work, and under which the third party grants, to any of the 814 | parties who would receive the covered work from you, a discriminatory 815 | patent license (a) in connection with copies of the covered work 816 | conveyed by you (or copies made from those copies), or (b) primarily 817 | for and in connection with specific products or compilations that 818 | contain the covered work, unless you entered into that arrangement, 819 | or that patent license was granted, prior to 28 March 2007. 820 | 821 | Nothing in this License shall be construed as excluding or limiting 822 | any implied license or other defenses to infringement that may 823 | otherwise be available to you under applicable patent law. 824 | 825 | 12. No Surrender of Others' Freedom. 826 | 827 | If conditions are imposed on you (whether by court order, agreement or 828 | otherwise) that contradict the conditions of this License, they do not 829 | excuse you from the conditions of this License. If you cannot convey a 830 | covered work so as to satisfy simultaneously your obligations under this 831 | License and any other pertinent obligations, then as a consequence you may 832 | not convey it at all. For example, if you agree to terms that obligate you 833 | to collect a royalty for further conveying from those to whom you convey 834 | the Program, the only way you could satisfy both those terms and this 835 | License would be to refrain entirely from conveying the Program. 836 | 837 | 13. Use with the GNU Affero General Public License. 838 | 839 | Notwithstanding any other provision of this License, you have 840 | permission to link or combine any covered work with a work licensed 841 | under version 3 of the GNU Affero General Public License into a single 842 | combined work, and to convey the resulting work. The terms of this 843 | License will continue to apply to the part which is the covered work, 844 | but the special requirements of the GNU Affero General Public License, 845 | section 13, concerning interaction through a network will apply to the 846 | combination as such. 847 | 848 | 14. Revised Versions of this License. 849 | 850 | The Free Software Foundation may publish revised and/or new versions of 851 | the GNU General Public License from time to time. Such new versions will 852 | be similar in spirit to the present version, but may differ in detail to 853 | address new problems or concerns. 854 | 855 | Each version is given a distinguishing version number. If the 856 | Program specifies that a certain numbered version of the GNU General 857 | Public License "or any later version" applies to it, you have the 858 | option of following the terms and conditions either of that numbered 859 | version or of any later version published by the Free Software 860 | Foundation. If the Program does not specify a version number of the 861 | GNU General Public License, you may choose any version ever published 862 | by the Free Software Foundation. 863 | 864 | If the Program specifies that a proxy can decide which future 865 | versions of the GNU General Public License can be used, that proxy's 866 | public statement of acceptance of a version permanently authorizes you 867 | to choose that version for the Program. 868 | 869 | Later license versions may give you additional or different 870 | permissions. However, no additional obligations are imposed on any 871 | author or copyright holder as a result of your choosing to follow a 872 | later version. 873 | 874 | 15. Disclaimer of Warranty. 875 | 876 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 877 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 878 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 879 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 880 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 881 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 882 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 883 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 884 | 885 | 16. Limitation of Liability. 886 | 887 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 888 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 889 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 890 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 891 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 892 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 893 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 894 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 895 | SUCH DAMAGES. 896 | 897 | 17. Interpretation of Sections 15 and 16. 898 | 899 | If the disclaimer of warranty and limitation of liability provided 900 | above cannot be given local legal effect according to their terms, 901 | reviewing courts shall apply local law that most closely approximates 902 | an absolute waiver of all civil liability in connection with the 903 | Program, unless a warranty or assumption of liability accompanies a 904 | copy of the Program in return for a fee. 905 | 906 | END OF TERMS AND CONDITIONS 907 | 908 | How to Apply These Terms to Your New Programs 909 | 910 | If you develop a new program, and you want it to be of the greatest 911 | possible use to the public, the best way to achieve this is to make it 912 | free software which everyone can redistribute and change under these terms. 913 | 914 | To do so, attach the following notices to the program. It is safest 915 | to attach them to the start of each source file to most effectively 916 | state the exclusion of warranty; and each file should have at least 917 | the "copyright" line and a pointer to where the full notice is found. 918 | 919 | 920 | Copyright (C) 921 | 922 | This program is free software: you can redistribute it and/or modify 923 | it under the terms of the GNU General Public License as published by 924 | the Free Software Foundation, either version 3 of the License, or 925 | (at your option) any later version. 926 | 927 | This program is distributed in the hope that it will be useful, 928 | but WITHOUT ANY WARRANTY; without even the implied warranty of 929 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 930 | GNU General Public License for more details. 931 | 932 | You should have received a copy of the GNU General Public License 933 | along with this program. If not, see . 934 | 935 | Also add information on how to contact you by electronic and paper mail. 936 | 937 | If the program does terminal interaction, make it output a short 938 | notice like this when it starts in an interactive mode: 939 | 940 | Copyright (C) 941 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 942 | This is free software, and you are welcome to redistribute it 943 | under certain conditions; type `show c' for details. 944 | 945 | The hypothetical commands `show w' and `show c' should show the appropriate 946 | parts of the General Public License. Of course, your program's commands 947 | might be different; for a GUI interface, you would use an "about box". 948 | 949 | You should also get your employer (if you work as a programmer) or school, 950 | if any, to sign a "copyright disclaimer" for the program, if necessary. 951 | For more information on this, and how to apply and follow the GNU GPL, see 952 | . 953 | 954 | The GNU General Public License does not permit incorporating your program 955 | into proprietary programs. If your program is a subroutine library, you 956 | may consider it more useful to permit linking proprietary applications with 957 | the library. If this is what you want to do, use the GNU Lesser General 958 | Public License instead of this License. But first, please read 959 | . 960 | 961 | 962 | ansi-styles 963 | MIT 964 | MIT License 965 | 966 | Copyright (c) Sindre Sorhus (sindresorhus.com) 967 | 968 | 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: 969 | 970 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 971 | 972 | 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. 973 | 974 | 975 | before-after-hook 976 | Apache-2.0 977 | Apache License 978 | Version 2.0, January 2004 979 | http://www.apache.org/licenses/ 980 | 981 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 982 | 983 | 1. Definitions. 984 | 985 | "License" shall mean the terms and conditions for use, reproduction, 986 | and distribution as defined by Sections 1 through 9 of this document. 987 | 988 | "Licensor" shall mean the copyright owner or entity authorized by 989 | the copyright owner that is granting the License. 990 | 991 | "Legal Entity" shall mean the union of the acting entity and all 992 | other entities that control, are controlled by, or are under common 993 | control with that entity. For the purposes of this definition, 994 | "control" means (i) the power, direct or indirect, to cause the 995 | direction or management of such entity, whether by contract or 996 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 997 | outstanding shares, or (iii) beneficial ownership of such entity. 998 | 999 | "You" (or "Your") shall mean an individual or Legal Entity 1000 | exercising permissions granted by this License. 1001 | 1002 | "Source" form shall mean the preferred form for making modifications, 1003 | including but not limited to software source code, documentation 1004 | source, and configuration files. 1005 | 1006 | "Object" form shall mean any form resulting from mechanical 1007 | transformation or translation of a Source form, including but 1008 | not limited to compiled object code, generated documentation, 1009 | and conversions to other media types. 1010 | 1011 | "Work" shall mean the work of authorship, whether in Source or 1012 | Object form, made available under the License, as indicated by a 1013 | copyright notice that is included in or attached to the work 1014 | (an example is provided in the Appendix below). 1015 | 1016 | "Derivative Works" shall mean any work, whether in Source or Object 1017 | form, that is based on (or derived from) the Work and for which the 1018 | editorial revisions, annotations, elaborations, or other modifications 1019 | represent, as a whole, an original work of authorship. For the purposes 1020 | of this License, Derivative Works shall not include works that remain 1021 | separable from, or merely link (or bind by name) to the interfaces of, 1022 | the Work and Derivative Works thereof. 1023 | 1024 | "Contribution" shall mean any work of authorship, including 1025 | the original version of the Work and any modifications or additions 1026 | to that Work or Derivative Works thereof, that is intentionally 1027 | submitted to Licensor for inclusion in the Work by the copyright owner 1028 | or by an individual or Legal Entity authorized to submit on behalf of 1029 | the copyright owner. For the purposes of this definition, "submitted" 1030 | means any form of electronic, verbal, or written communication sent 1031 | to the Licensor or its representatives, including but not limited to 1032 | communication on electronic mailing lists, source code control systems, 1033 | and issue tracking systems that are managed by, or on behalf of, the 1034 | Licensor for the purpose of discussing and improving the Work, but 1035 | excluding communication that is conspicuously marked or otherwise 1036 | designated in writing by the copyright owner as "Not a Contribution." 1037 | 1038 | "Contributor" shall mean Licensor and any individual or Legal Entity 1039 | on behalf of whom a Contribution has been received by Licensor and 1040 | subsequently incorporated within the Work. 1041 | 1042 | 2. Grant of Copyright License. Subject to the terms and conditions of 1043 | this License, each Contributor hereby grants to You a perpetual, 1044 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 1045 | copyright license to reproduce, prepare Derivative Works of, 1046 | publicly display, publicly perform, sublicense, and distribute the 1047 | Work and such Derivative Works in Source or Object form. 1048 | 1049 | 3. Grant of Patent License. Subject to the terms and conditions of 1050 | this License, each Contributor hereby grants to You a perpetual, 1051 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 1052 | (except as stated in this section) patent license to make, have made, 1053 | use, offer to sell, sell, import, and otherwise transfer the Work, 1054 | where such license applies only to those patent claims licensable 1055 | by such Contributor that are necessarily infringed by their 1056 | Contribution(s) alone or by combination of their Contribution(s) 1057 | with the Work to which such Contribution(s) was submitted. If You 1058 | institute patent litigation against any entity (including a 1059 | cross-claim or counterclaim in a lawsuit) alleging that the Work 1060 | or a Contribution incorporated within the Work constitutes direct 1061 | or contributory patent infringement, then any patent licenses 1062 | granted to You under this License for that Work shall terminate 1063 | as of the date such litigation is filed. 1064 | 1065 | 4. Redistribution. You may reproduce and distribute copies of the 1066 | Work or Derivative Works thereof in any medium, with or without 1067 | modifications, and in Source or Object form, provided that You 1068 | meet the following conditions: 1069 | 1070 | (a) You must give any other recipients of the Work or 1071 | Derivative Works a copy of this License; and 1072 | 1073 | (b) You must cause any modified files to carry prominent notices 1074 | stating that You changed the files; and 1075 | 1076 | (c) You must retain, in the Source form of any Derivative Works 1077 | that You distribute, all copyright, patent, trademark, and 1078 | attribution notices from the Source form of the Work, 1079 | excluding those notices that do not pertain to any part of 1080 | the Derivative Works; and 1081 | 1082 | (d) If the Work includes a "NOTICE" text file as part of its 1083 | distribution, then any Derivative Works that You distribute must 1084 | include a readable copy of the attribution notices contained 1085 | within such NOTICE file, excluding those notices that do not 1086 | pertain to any part of the Derivative Works, in at least one 1087 | of the following places: within a NOTICE text file distributed 1088 | as part of the Derivative Works; within the Source form or 1089 | documentation, if provided along with the Derivative Works; or, 1090 | within a display generated by the Derivative Works, if and 1091 | wherever such third-party notices normally appear. The contents 1092 | of the NOTICE file are for informational purposes only and 1093 | do not modify the License. You may add Your own attribution 1094 | notices within Derivative Works that You distribute, alongside 1095 | or as an addendum to the NOTICE text from the Work, provided 1096 | that such additional attribution notices cannot be construed 1097 | as modifying the License. 1098 | 1099 | You may add Your own copyright statement to Your modifications and 1100 | may provide additional or different license terms and conditions 1101 | for use, reproduction, or distribution of Your modifications, or 1102 | for any such Derivative Works as a whole, provided Your use, 1103 | reproduction, and distribution of the Work otherwise complies with 1104 | the conditions stated in this License. 1105 | 1106 | 5. Submission of Contributions. Unless You explicitly state otherwise, 1107 | any Contribution intentionally submitted for inclusion in the Work 1108 | by You to the Licensor shall be under the terms and conditions of 1109 | this License, without any additional terms or conditions. 1110 | Notwithstanding the above, nothing herein shall supersede or modify 1111 | the terms of any separate license agreement you may have executed 1112 | with Licensor regarding such Contributions. 1113 | 1114 | 6. Trademarks. This License does not grant permission to use the trade 1115 | names, trademarks, service marks, or product names of the Licensor, 1116 | except as required for reasonable and customary use in describing the 1117 | origin of the Work and reproducing the content of the NOTICE file. 1118 | 1119 | 7. Disclaimer of Warranty. Unless required by applicable law or 1120 | agreed to in writing, Licensor provides the Work (and each 1121 | Contributor provides its Contributions) on an "AS IS" BASIS, 1122 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1123 | implied, including, without limitation, any warranties or conditions 1124 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 1125 | PARTICULAR PURPOSE. You are solely responsible for determining the 1126 | appropriateness of using or redistributing the Work and assume any 1127 | risks associated with Your exercise of permissions under this License. 1128 | 1129 | 8. Limitation of Liability. In no event and under no legal theory, 1130 | whether in tort (including negligence), contract, or otherwise, 1131 | unless required by applicable law (such as deliberate and grossly 1132 | negligent acts) or agreed to in writing, shall any Contributor be 1133 | liable to You for damages, including any direct, indirect, special, 1134 | incidental, or consequential damages of any character arising as a 1135 | result of this License or out of the use or inability to use the 1136 | Work (including but not limited to damages for loss of goodwill, 1137 | work stoppage, computer failure or malfunction, or any and all 1138 | other commercial damages or losses), even if such Contributor 1139 | has been advised of the possibility of such damages. 1140 | 1141 | 9. Accepting Warranty or Additional Liability. While redistributing 1142 | the Work or Derivative Works thereof, You may choose to offer, 1143 | and charge a fee for, acceptance of support, warranty, indemnity, 1144 | or other liability obligations and/or rights consistent with this 1145 | License. However, in accepting such obligations, You may act only 1146 | on Your own behalf and on Your sole responsibility, not on behalf 1147 | of any other Contributor, and only if You agree to indemnify, 1148 | defend, and hold each Contributor harmless for any liability 1149 | incurred by, or claims asserted against, such Contributor by reason 1150 | of your accepting any such warranty or additional liability. 1151 | 1152 | END OF TERMS AND CONDITIONS 1153 | 1154 | APPENDIX: How to apply the Apache License to your work. 1155 | 1156 | To apply the Apache License to your work, attach the following 1157 | boilerplate notice, with the fields enclosed by brackets "{}" 1158 | replaced with your own identifying information. (Don't include 1159 | the brackets!) The text should be enclosed in the appropriate 1160 | comment syntax for the file format. We also recommend that a 1161 | file or class name and description of purpose be included on the 1162 | same "printed page" as the copyright notice for easier 1163 | identification within third-party archives. 1164 | 1165 | Copyright 2018 Gregor Martynus and other contributors. 1166 | 1167 | Licensed under the Apache License, Version 2.0 (the "License"); 1168 | you may not use this file except in compliance with the License. 1169 | You may obtain a copy of the License at 1170 | 1171 | http://www.apache.org/licenses/LICENSE-2.0 1172 | 1173 | Unless required by applicable law or agreed to in writing, software 1174 | distributed under the License is distributed on an "AS IS" BASIS, 1175 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1176 | See the License for the specific language governing permissions and 1177 | limitations under the License. 1178 | 1179 | 1180 | bottleneck 1181 | MIT 1182 | The MIT License (MIT) 1183 | 1184 | Copyright (c) 2014 Simon Grondin 1185 | 1186 | Permission is hereby granted, free of charge, to any person obtaining a copy of 1187 | this software and associated documentation files (the "Software"), to deal in 1188 | the Software without restriction, including without limitation the rights to 1189 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 1190 | the Software, and to permit persons to whom the Software is furnished to do so, 1191 | subject to the following conditions: 1192 | 1193 | The above copyright notice and this permission notice shall be included in all 1194 | copies or substantial portions of the Software. 1195 | 1196 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1197 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 1198 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 1199 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 1200 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 1201 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1202 | 1203 | 1204 | color-convert 1205 | MIT 1206 | Copyright (c) 2011-2016 Heather Arthur 1207 | 1208 | Permission is hereby granted, free of charge, to any person obtaining 1209 | a copy of this software and associated documentation files (the 1210 | "Software"), to deal in the Software without restriction, including 1211 | without limitation the rights to use, copy, modify, merge, publish, 1212 | distribute, sublicense, and/or sell copies of the Software, and to 1213 | permit persons to whom the Software is furnished to do so, subject to 1214 | the following conditions: 1215 | 1216 | The above copyright notice and this permission notice shall be 1217 | included in all copies or substantial portions of the Software. 1218 | 1219 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1220 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1221 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1222 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 1223 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 1224 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 1225 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1226 | 1227 | 1228 | 1229 | color-name 1230 | MIT 1231 | The MIT License (MIT) 1232 | Copyright (c) 2015 Dmitry Ivanov 1233 | 1234 | 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: 1235 | 1236 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 1237 | 1238 | 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. 1239 | 1240 | rtrim 1241 | MIT 1242 | The MIT License (MIT) 1243 | 1244 | Copyright (c) 2014 A Medium Corporation 1245 | 1246 | Permission is hereby granted, free of charge, to any person obtaining a copy 1247 | of this software and associated documentation files (the "Software"), to deal 1248 | in the Software without restriction, including without limitation the rights 1249 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1250 | copies of the Software, and to permit persons to whom the Software is 1251 | furnished to do so, subject to the following conditions: 1252 | 1253 | The above copyright notice and this permission notice shall be included in 1254 | all copies or substantial portions of the Software. 1255 | 1256 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1257 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1258 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1259 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1260 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1261 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1262 | THE SOFTWARE. 1263 | 1264 | 1265 | tunnel 1266 | MIT 1267 | The MIT License (MIT) 1268 | 1269 | Copyright (c) 2012 Koichi Kobayashi 1270 | 1271 | Permission is hereby granted, free of charge, to any person obtaining a copy 1272 | of this software and associated documentation files (the "Software"), to deal 1273 | in the Software without restriction, including without limitation the rights 1274 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1275 | copies of the Software, and to permit persons to whom the Software is 1276 | furnished to do so, subject to the following conditions: 1277 | 1278 | The above copyright notice and this permission notice shall be included in 1279 | all copies or substantial portions of the Software. 1280 | 1281 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1282 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1283 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1284 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1285 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1286 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1287 | THE SOFTWARE. 1288 | 1289 | 1290 | undici 1291 | MIT 1292 | MIT License 1293 | 1294 | Copyright (c) Matteo Collina and Undici contributors 1295 | 1296 | Permission is hereby granted, free of charge, to any person obtaining a copy 1297 | of this software and associated documentation files (the "Software"), to deal 1298 | in the Software without restriction, including without limitation the rights 1299 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1300 | copies of the Software, and to permit persons to whom the Software is 1301 | furnished to do so, subject to the following conditions: 1302 | 1303 | The above copyright notice and this permission notice shall be included in all 1304 | copies or substantial portions of the Software. 1305 | 1306 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1307 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1308 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1309 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1310 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1311 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1312 | SOFTWARE. 1313 | 1314 | 1315 | universal-user-agent 1316 | ISC 1317 | # [ISC License](https://spdx.org/licenses/ISC) 1318 | 1319 | Copyright (c) 2018-2021, Gregor Martynus (https://github.com/gr2m) 1320 | 1321 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 1322 | 1323 | 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. 1324 | 1325 | 1326 | uuid 1327 | MIT 1328 | The MIT License (MIT) 1329 | 1330 | Copyright (c) 2010-2020 Robert Kieffer and other contributors 1331 | 1332 | 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: 1333 | 1334 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 1335 | 1336 | 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. 1337 | --------------------------------------------------------------------------------