// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: use_raw_strings, prefer_interpolation_to_compose_strings

// COMMON PATTERNS

const String kIndent = r'^((?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)( *)';

final RegExp stripDecorations = RegExp(
  r'^((?:(?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)(?:(?: |\t)*))(.*?)[ */]*$',
  multiLine: true,
  caseSensitive: false
);

final RegExp newlinePattern = RegExp(r'\r\n?');

final RegExp beginLicenseBlock = RegExp(
  r'^([#;/* ]*) (?:\*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*[ */]*'
                r'|@APPLE_LICENSE_HEADER_START@)$'
);

final RegExp endLicenseBlock = RegExp(
  r'^([#;/* ]*) (?:\*\*\*\*\* END LICENSE BLOCK \*\*\*\*\*[ */]*'
                r'|@APPLE_LICENSE_HEADER_END@)$'
);

final RegExp nonSpace = RegExp('[^ ]');
final RegExp trailingComma = RegExp(r',[ */]*$');
final RegExp trailingColon = RegExp(r':(?: |\*|/|\n|=|-)*$');
final RegExp copyrightMentionPattern = RegExp(r'©| \(c\) (?!{)|copy\s*right\b|copy\s*left', caseSensitive: false);
final RegExp licenseMentionPattern = RegExp(r'license|warrant[iy]', caseSensitive: false);
final RegExp copyrightMentionOkPattern = RegExp(
  // if a (multiline) block matches this, we ignore it even if it matches copyrightMentionPattern/licenseMentionPattern
  r'(?:These are covered by the following copyright:'
     r'|^((?:[-;#<!.\\"/* ]*(?:REM[-;#<!.\\"/* ]*)?[-;#<!.\"/*]+)?)((?: |\t)*)COPYRIGHT: *\r?\n'
     r'|copyright.*\\n"' // clearly part of a string
     r'|\$YEAR' // clearly part of a template string
     r'|LICENSE BLOCK' // MPL license block header/footer
     r'|2117.+COPYRIGHT' // probably U+2117 mention...
     r'|// The copyright below was added in 2009, but I see no record'
     r'|This ICU code derived from:'
     r'|the contents of which are also included in zip.h' // seen in minizip's unzip.c, but the upshot of the crazy license situation there is that we don't have to do anything
     r'|hold font names, copyright info, notices, etc' // seen in a comment in freetype's src/include/ftsnames.h
     r'|' // the following is from android_tools/ndk/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
     r'^ \* This implementation uses an idea from the SGI STL \(using a @a header node\n'
     r'^ \*    which is needed for efficient iteration\)\. Following is the SGI STL\n'
     r'^ \*    copyright\.\n'
  r')',
  caseSensitive: false, multiLine: true);
final RegExp halfCopyrightPattern = RegExp(r'^(?:Copyright(?: \(c\))? [-0-9, ]+(?: by)?|Written [0-9]+)[ */]*$', caseSensitive: false);
final RegExp authorPattern = RegExp(r'Copyright .+(The .+ Authors)\. +All rights reserved\.', caseSensitive: false);

// copyright blocks start with the first line matching this
final List<RegExp> copyrightStatementLeadingPatterns = <RegExp>[
  RegExp(r'^ *(?:Portions(?: are)? )?Copyright .+$', caseSensitive: false),
  RegExp(r'^.*All rights? reserved\.$', caseSensitive: false),
  RegExp(r'^ *\(C\) .+$', caseSensitive: false),
  RegExp(r'^Copyright \(C\) .+$', caseSensitive: false),
  RegExp(r'^:copyright: .+$', caseSensitive: false),
  RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'),
  RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
  RegExp(r'©'),

  // TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
  RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
  RegExp(r'^relevant to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
  RegExp(r'^to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
  RegExp(r'^information relevant to libjpeg-turbo\.$'),
];

// copyright blocks end with the last line that matches this, rest is considered license
final List<RegExp> copyrightStatementPatterns = <RegExp>[
  RegExp(r'^ *(?:Portions(?: created by the Initial Developer)?(?: are)? )?Copyright .+$', caseSensitive: false),
  RegExp(r'^\(Version [-0-9.:, ]+ Copyright .+\)$', caseSensitive: false),
  RegExp(r'^.*(?:All )?rights? reserved\.$', caseSensitive: false),
  RegExp(r'^ *\(C\) .+$', caseSensitive: false),
  RegExp(r'^Copyright \(C\) .+$', caseSensitive: false),
  RegExp(r'^:copyright: .+$', caseSensitive: false),
  RegExp(r'^ *[0-9][0-9][0-9][0-9].+ [<(].+@.+[)>]$'),
  RegExp(r'^                   [^ ].* [<(].+@.+[)>]$'), // that's exactly the number of spaces to line up with the X if "Copyright (c) 2011 X" is on the previous line
  RegExp(r'^ *and .+$', caseSensitive: false),
  RegExp(r'^ *others\.?$', caseSensitive: false),
  RegExp(r'^for more details\.$', caseSensitive: false),
  RegExp(r'^ *For more info read ([^ ]+)$', caseSensitive: false),
  RegExp(r'^ *For terms of use, see ([^ ]+)$', caseSensitive: false),
  RegExp(r'^(?:Google )?Author\(?s?\)?: .+', caseSensitive: false),
  RegExp(r'^Written by .+', caseSensitive: false),
  RegExp(r'^Originally written by .+', caseSensitive: false),
  RegExp(r'^Based on$', caseSensitive: false),
  RegExp(r"^based on (?:code in )?['`][^'`]+['`]$", caseSensitive: false),
  RegExp(r'^Based on .+, written by .+, [0-9]+\.$', caseSensitive: false),
  RegExp(r'^(?:Based on the )?x86 SIMD extension for IJG JPEG library(?: - version [0-9.]+|,)?$'),
  RegExp(r'^This software originally derived from .+\.$'),
  RegExp(r'^Derived from [a-z._/]+$'),
  RegExp(r'^Derived from .+, which was$'),
  RegExp(r'^ *This is part of .+, a .+ library\.$'),
  RegExp(r'^This file is part of [^ ]+\.$'),
  RegExp(r'^(?:Modification )?[Dd]eveloped [-0-9]+ by .+\.$', caseSensitive: false),
  RegExp(r'^Modified .+[:.]$', caseSensitive: false),
  RegExp(r'^(?:[^ ]+ )?Modifications:$', caseSensitive: false),
  RegExp(r'^ *Modifications for', caseSensitive: false),
  RegExp(r'^ *Modifications of', caseSensitive: false),
  RegExp(r'^Last changed in .+$', caseSensitive: false),
  RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'), // TODO(ianh): file a bug on analyzer about what happens if you omit this comma
  RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
  RegExp(r'^\(Royal Institute of Technology, Stockholm, Sweden\)\.$'),
  RegExp(r'^\(?https?://[^ ]+$\)?'),

  RegExp(r'^The Original Code is Mozilla Communicator client code, released$'),
  RegExp(r'^March 31, 1998.$'), // mozilla first release date

  RegExp(r'^The Elliptic Curve Public-Key Crypto Library \(ECC Code\) included$'),
  RegExp(r'^herein is developed by SUN MICROSYSTEMS, INC\., and is contributed$'),
  RegExp(r'^to the OpenSSL project\.$'),

  RegExp(r'^This code is derived from software contributed to The NetBSD Foundation$'),
  RegExp(r'^by (?:Atsushi Onoe|Dieter Baron|Klaus Klein|Luke Mewburn|Thomas Klausner|,| |and)*\.$'),

  RegExp(r'^FT_Raccess_Get_HeaderInfo\(\) and raccess_guess_darwin_hfsplus\(\) are$'),
  RegExp(r'^derived from ftobjs\.c\.$'),

  // TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
  RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
  RegExp(r'^relevant to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
  RegExp(r'^to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
  RegExp(r'^information relevant to libjpeg-turbo\.$'),

  RegExp(r'^All or some portions of this file are derived from material licensed$'),
  RegExp(r'^to the University of California by American Telephone and Telegraph$'),
  RegExp(r'^Co\. or Unix System Laboratories, Inc\. and are reproduced herein with$'),
  RegExp(r'^the permission of UNIX System Laboratories, Inc.$'),

  RegExp(r'^This software was developed by the Computer Systems Engineering group$'),
  RegExp(r'^at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and$'),
  RegExp(r'^contributed to Berkeley\.$'),

  RegExp(r'^This code is derived from software contributed to Berkeley by$'),
  RegExp(r'^Ralph Campbell\. +This file is derived from the MIPS RISC$'),
  RegExp(r'^Architecture book by Gerry Kane\.$'),

  RegExp(r'^All advertising materials mentioning features or use of this software$'),
  RegExp(r'^must display the following acknowledgement:$'),
  RegExp(r'^This product includes software developed by the University of$'),
  RegExp(r'^California, Lawrence Berkeley Laboratory\.$'),

  RegExp(r'^ *Condition of use and distribution are the same than zlib :$'),
  RegExp(r'^(The )?MIT License:?$'),

  RegExp(r'^$'), // TODO(ianh): file an issue on what happens if you omit the close quote

];

// patterns that indicate we're running into another license
final List<RegExp> licenseFragments = <RegExp>[
  RegExp(r'"as is" without express or implied warranty\.'),
  RegExp(r'version of this file under any of the LGPL, the MPL or the GPL\.'),
  RegExp(r'SUCH DAMAGE\.'),
  RegExp(r'found in the LICENSE file'),
  RegExp(r'<http://www\.gnu\.org/licenses/>'),
  RegExp(r'License & terms of use'),
];

const String _linebreak      = r' *(?:(?:\*/ *|[*#])?(?:\r?\n\1 *(?:\*/ *)?)*\r?\n\1\2 *)?';
const String _linebreakLoose = r' *(?:(?:\*/ *|[*#])?\r?\n(?:-|;|#|<|!|/|\*| |REM)*)*';

// LICENSE RECOGNIZERS

final RegExp lrApache = RegExp(r'^(?: |\r|\n)*Apache License\b');
final RegExp lrMPL = RegExp(r'^(?: |\r|\n)*Mozilla Public License Version 2\.0\n');
final RegExp lrGPL = RegExp(r'^(?: |\r|\n)*GNU GENERAL PUBLIC LICENSE\n');
final RegExp lrAPSL = RegExp(r'^APPLE PUBLIC SOURCE LICENSE Version 2\.0 +- +August 6, 2003');
final RegExp lrMIT = RegExp(r'Permission(?: |\n)+is(?: |\n)+hereby(?: |\n)+granted,(?: |\n)+free(?: |\n)+of(?: |\n)+charge,(?: |\n)+to(?: |\n)+any(?: |\n)+person(?: |\n)+obtaining(?: |\n)+a(?: |\n)+copy(?: |\n)+of(?: |\n)+this(?: |\n)+software(?: |\n)+and(?: |\n)+associated(?: |\n)+documentation(?: |\n)+files(?: |\n)+\(the(?: |\n)+"Software"\),(?: |\n)+to(?: |\n)+deal(?: |\n)+in(?: |\n)+the(?: |\n)+Software(?: |\n)+without(?: |\n)+restriction,(?: |\n)+including(?: |\n)+without(?: |\n)+limitation(?: |\n)+the(?: |\n)+rights(?: |\n)+to(?: |\n)+use,(?: |\n)+copy,(?: |\n)+modify,(?: |\n)+merge,(?: |\n)+publish,(?: |\n)+distribute,(?: |\n)+sublicense,(?: |\n)+and/or(?: |\n)+sell(?: |\n)+copies(?: |\n)+of(?: |\n)+the(?: |\n)+Software,(?: |\n)+and(?: |\n)+to(?: |\n)+permit(?: |\n)+persons(?: |\n)+to(?: |\n)+whom(?: |\n)+the(?: |\n)+Software(?: |\n)+is(?: |\n)+furnished(?: |\n)+to(?: |\n)+do(?: |\n)+so,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+conditions:');
final RegExp lrOpenSSL = RegExp(r'Copyright \(c\) 1998-2011 The OpenSSL Project\.  All rights reserved\.(.|\n)*Original SSLeay License');
final RegExp lrBSD = RegExp(r'Redistribution(?: |\n)+and(?: |\n)+use(?: |\n)+in(?: |\n)+source(?: |\n)+and(?: |\n)+binary(?: |\n)+forms(?:(?: |\n)+of(?: |\n)+the(?: |\n)+software(?: |\n)+as(?: |\n)+well(?: |\n)+as(?: |\n)+documentation)?,(?: |\n)+with(?: |\n)+or(?: |\n)+without(?: |\n)+modification,(?: |\n)+are(?: |\n)+permitted(?: |\n)+provided(?: |\n)+that(?: |\n)+the(?: |\n)+following(?: |\n)+conditions(?: |\n)+are(?: |\n)+met:');
final RegExp lrZlib = RegExp(r'Permission(?: |\n)+is(?: |\n)+granted(?: |\n)+to(?: |\n)+anyone(?: |\n)+to(?: |\n)+use(?: |\n)+this(?: |\n)+software(?: |\n)+for(?: |\n)+any(?: |\n)+purpose,(?: |\n)+including(?: |\n)+commercial(?: |\n)+applications,(?: |\n)+and(?: |\n)+to(?: |\n)+alter(?: |\n)+it(?: |\n)+and(?: |\n)+redistribute(?: |\n)+it(?: |\n)+freely,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+restrictions:');
final RegExp lrPNG = RegExp(r'This code is released under the libpng license\.');
final RegExp lrBison = RegExp(r'This special exception was added by the Free Software Foundation in *\n *version 2.2 of Bison.');


// "NO COPYRIGHT" STATEMENTS

final List<RegExp> csNoCopyrights = <RegExp>[

  // used with _tryNone
  // groups are ignored

  // Seen in Android NDK
  RegExp(
    r'^[/* ]*This header was automatically generated from a Linux kernel header\n'
    r'^[/* ]*of the same name, to make information necessary for userspace to\n'
    r'^[/* ]*call into the kernel available to libc.  It contains only constants,\n'
    r'^[/* ]*structures, and macros generated from the original header, and thus,\n'
    r'^[/* ]*contains no copyrightable information.',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'These constants were taken from version 3 of the DWARF standard, *\n'
    r'^\1\2which is Copyright \(c\) 2005 Free Standards Group, and *\n'
    r'^\1\2Copyright \(c\) 1992, 1993 UNIX International, Inc\. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // Freetype
  RegExp(
    kIndent +
    (r'This is a dummy file, used to please the build system\. It is never included by the auto-fitter sources\.'.replaceAll(' ', _linebreak)),
    multiLine: true,
    caseSensitive: false
  ),

  // Freetype
  RegExp(
    kIndent +
    (
      r'This software was written by Alexander Peslyak in 2001\. No copyright is '
      r'claimed, and the software is hereby placed in the public domain\. In case '
      r'this attempt to disclaim copyright and place the software in the public '
      r'domain is deemed null and void, then the software is Copyright \(c\) 2001 '
      r'Alexander Peslyak and it is hereby released to the general public under the '
      r'following terms: Redistribution and use in source and binary forms, with or '
      r"without modification, are permitted\. There\'s ABSOLUTELY NO WARRANTY, "
      r'express or implied\.(?: \(This is a heavily cut-down "BSD license"\.\))?'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

];


// ATTRIBUTION STATEMENTS

final List<RegExp> csAttribution = <RegExp>[

  // used with _tryAttribution
  // group 1 is the prefix, group 2 is the attribution

  // Seen in musl in Android SDK
  RegExp(
    r'^([/* ]*)This code was written by (.+) in [0-9]+; no copyright is claimed\.\n'
    r'^\1This code is in the public domain\. +Attribution is appreciated but\n'
    r'^\1unnecessary\.',
    multiLine: true,
    caseSensitive: false
  ),

];


// REFERENCES TO OTHER FILES

class LicenseFileReferencePattern {
  LicenseFileReferencePattern({
    this.firstPrefixIndex,
    this.indentPrefixIndex,
    this.copyrightIndex,
    this.authorIndex,
    this.fileIndex,
    this.pattern,
    this.needsCopyright = true
  });
  final int? firstPrefixIndex;
  final int? indentPrefixIndex;
  final int? copyrightIndex;
  final int? authorIndex;
  final int? fileIndex;
  final bool needsCopyright;
  final RegExp? pattern;
}

final List<LicenseFileReferencePattern> csReferencesByFilename = <LicenseFileReferencePattern>[

  // used with _tryReferenceByFilename

  // libpng files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This code is released under the libpng license. For conditions of distribution and use, see the disclaimer and license in (png.h)\b'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false
    ),
  ),

  // typical of much Google-written code
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Chromium's zlib extensions.
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      // The " \* " is needed to ensure that both copyright lines start with
      // the comment decoration in the captured match, otherwise it won't be
      // stripped from the second line when generating output.
      r'((?: \* Copyright \(C\) 2017 ARM, Inc.\n)?'
      r'Copyright .+(The .+ Authors)\. +All rights reserved\.)\n'
      r'Use of this source code is governed by a BSD-style license that can be\n'
      r'found in the Chromium source repository ([^ ]+) file.'.replaceAll(r'\n', _linebreakLoose),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Mojo code
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      r'(Copyright .+(the .+ authors)\. +All rights reserved.) +' +
      r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ANGLE .json files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      r'(Copyright .+(The .+ Authors)\. +All rights reserved.)", *\n'
      r'^\1\2Use of this source code is governed by a BSD-style license that can be", *\n'
      r'^\1\2found in the ([^ ]+) file.",',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // typical of Dart-derived files
  LicenseFileReferencePattern(
    firstPrefixIndex: 2,
    indentPrefixIndex: 3,
    copyrightIndex: 1,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      r'(' + kIndent +
      r'Copyright .+(the .+ authors)\[?\. '
      r'Please see the AUTHORS file for details. All rights (?:re|solve)served\.) '
      r'Use of this source(?: code)? is governed by a BS?D-style license '
      r'that can be found in the '.replaceAll(' ', _linebreakLoose) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libjpeg-turbo
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'For conditions of distribution and use, see (?:the accompanying|copyright notice in)? ([-_.a-zA-Z0-9]+)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in FreeType software
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This file (?:is part of the FreeType project, and )?may only be used,? '
      r'modified,? and distributed under the terms of the FreeType project '
      r'license, (LICENSE\.TXT). By continuing to use, modify, or distribute this '
      r'file you indicate that you have read the license and understand and '
      r'accept it fully\.'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in FreeType cff software from Adobe
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This software, and all works of authorship, whether in source or '
      r'object code form as indicated by the copyright notice\(s\) included '
      r'herein \(collectively, the "Work"\) is made available, and may only be '
      r'used, modified, and distributed under the FreeType Project License, '
      r'(LICENSE\.TXT)\. Additionally, subject to the terms and conditions of the '
      r'FreeType Project License, each contributor to the Work hereby grants '
      r'to any individual or legal entity exercising permissions granted by '
      r'the FreeType Project License and this section \(hereafter, "You" or '
      r'"Your"\) a perpetual, worldwide, non-exclusive, no-charge, '
      r'royalty-free, irrevocable \(except as stated in this section\) patent '
      r'license to make, have made, use, offer to sell, sell, import, and '
      r'otherwise transfer the Work, where such license applies only to those '
      r'patent claims licensable by such contributor that are necessarily '
      r'infringed by their contribution\(s\) alone or by combination of their '
      r'contribution\(s\) with the Work to which such contribution\(s\) was '
      r'submitted\. If You institute patent litigation against any entity '
      r'\(including a cross-claim or counterclaim in a lawsuit\) alleging that '
      r'the Work or a contribution incorporated within the Work constitutes '
      r'direct or contributory patent infringement, then any patent licenses '
      r'granted to You under this License for that Work shall terminate as of '
      r'the date such litigation is filed\. '
      r'By using, modifying, or distributing the Work you indicate that you '
      r'have read and understood the terms and conditions of the '
      r'FreeType Project License as well as those provided in this section, '
      r'and you accept them fully\.'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Jinja files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r':license: [A-Z0-9]+, see (.+) for more details\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in modp_b64
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'Released under [^ ]+ license\. +See ([^ ]+) for details\.$',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libxml files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'(?:Copy: )?See ([A-Z0-9]+) for the status of this software\.?',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libxml files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'// This file is dual licensed under the MIT and the University of Illinois Open *\n'
      r'^\1\2// Source Licenses. See (LICENSE\.TXT) for details\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // BoringSSL
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'Licensed under the OpenSSL license \(the "License"\)\. You may not use '
      r'this file except in compliance with the License\. You can obtain a copy '
      r'in the file (LICENSE) in the source distribution or at '
      r'https://www\.openssl\.org/source/license\.html'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Fuchsia SDK files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'Copyright .+\. All rights reserved\. '
      r'This is a GENERATED file, see //zircon/.+/abigen\. '
      r'The license governing this file can be found in the (LICENSE) file\.'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Fuchsia SDK files.
  // TODO(chinmaygarde): This is a broken license file that is being patched
  // upstream. Remove this once DX-1477 is patched.
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'Use of this source code is governed by a BSD-style license that can be '
      r'Copyright .+\. All rights reserved\. '
      r'found in the (LICENSE) file\.'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Microsoft files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'Licensed under the MIT License\. '
      r'See (License\.txt) in the project root for license information\.'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

];


// INDIRECT REFERENCES TO OTHER FILES

final List<RegExp> csReferencesByType = <RegExp>[

  // used with _tryReferenceByType
  // groups 1 and 2 are the prefix, group 3 is the license type

  // Seen in Jinja files, markupsafe files
  RegExp(
    kIndent + r':license: ([A-Z0-9]+)',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'This software is made available under the terms of the (ICU) License -- ICU 1\.\8\.1 and later\.'.replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    (
      r'(?:@APPLE_LICENSE_HEADER_START@)? '
      r'This file contains Original Code and/or Modifications of Original Code '
      r'as defined in and that are subject to the (Apple Public Source License) '
      r"Version (2\.0) \(the 'License'\)\. You may not use this file except in "
      r'compliance with the License\. Please obtain a copy of the License at '
      r'(http://www\.opensource\.apple\.com/apsl/) and read it before using this '
      r'file\. '
      r'The Original Code and all software distributed under the License are '
      r"distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER "
      r'EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, '
      r'INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT\. '
      r'Please see the License for the specific language governing rights and '
      r'limitations under the License\.'
      r'(?:@APPLE_LICENSE_HEADER_END@)? '
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

];

final List<RegExp> csReferencesByTypeNoCopyright = <RegExp>[

  // used with _tryReferenceByType
  // groups 1 and 2 are the prefix, group 3 is the license type

  RegExp(
    kIndent +
    r'Written by Andy Polyakov <appro@openssl\.org> for the OpenSSL '
    r'project\. The module is, however, dual licensed under (OpenSSL) and '
    r'CRYPTOGAMS licenses depending on where you obtain it\. For further '
    r'details see http://www\.openssl\.org/~appro/cryptogams/\. '
    r'Permission to use under GPL terms is granted\.'.replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

];

class MultipleVersionedLicenseReferencePattern {
  MultipleVersionedLicenseReferencePattern({
    this.firstPrefixIndex,
    this.indentPrefixIndex,
    this.licenseIndices,
    this.versionIndices,
    this.checkLocalFirst = true,
    this.pattern
  });

  final int? firstPrefixIndex;
  final int? indentPrefixIndex;
  final List<int>? licenseIndices;
  final bool checkLocalFirst;
  final Map<int, int>? versionIndices;
  final RegExp? pattern;
}

final List<MultipleVersionedLicenseReferencePattern> csReferencesByUrl = <MultipleVersionedLicenseReferencePattern>[

  // used with _tryReferenceByUrl

  // SPDX
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent + r'SPDX-License-Identifier: (.*)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // AFL
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    versionIndices: const <int, int>{ 3:4 },
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent + r'Licensed under the (Academic Free License) version (3\.0)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Eclipse
  // Seen in auto-generated Java code in the Dart repository.
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      r'^(?:[-;#<!.\\"/* ]*[-;#<!.\"/*]+)?( *)Licensed under the Eclipse Public License v1\.0 \(the "License"\); you may not use this file except *\n'
      r'^\1\2in compliance with the License\. +You may obtain a copy of the License at *\n'
      r'^\1\2 *\n'
      r'^\1\2 *(http://www\.eclipse\.org/legal/epl-v10\.html) *\n'
      r'^\1\2 *\n'
      r'^\1\2Unless required by applicable law or agreed to in writing, software distributed under the License *\n'
      r'^\1\2is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express *\n'
      r'^\1\2or implied\. +See the License for the specific language governing permissions and limitations under *\n'
      r'^\1\2the License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Apache reference.
  // Seen in Android code.
  // TODO(ianh): For this license we only need to include the text once, not once per copyright
  // TODO(ianh): For this license we must also include all the NOTICE text (see section 4d)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Licensed under the Apache License, Version 2\.0 \(the "License"\); *\n'
      r'^\1\2you may not use this file except in compliance with the License\. *\n'
      r'^\1\2You may obtain a copy of the License at *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2 *(https?://www\.apache\.org/licenses/LICENSE-2\.0) *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2 *Unless required by applicable law or agreed to in writing, software *\n'
      r'^\1\2 *distributed under the License is distributed on an "AS IS" BASIS, *\n'
      r'^\1\2 *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\. *\n'
      r'^\1\2 *See the License for the specific language governing permissions and *\n'
      r'^\1\2 *limitations under the License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // BSD
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Use of this source code is governed by a BS?D-style *\n'
      r'^\1\2license that can be found in the LICENSE file or at *\n'
      r'^\1\2(https://developers.google.com/open-source/licenses/bsd)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MIT
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      (
       r'Use of this source code is governed by a MIT-style '
       r'license that can be found in the LICENSE file or at '
       r'(https://opensource.org/licenses/MIT)'
       .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MIT
  // the crazy s/./->/ thing is someone being over-eager with search-and-replace in rapidjson
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Licensed under the MIT License \(the "License"\); you may not use this file except *\n'
      r'^\1\2in compliance with the License(?:\.|->) You may obtain a copy of the License at *\n'
      r'^\1\n'
      r'^\1\2(http://opensource(?:\.|->)org/licenses/MIT) *\n'
      r'^\1\n'
      r'^\1\2Unless required by applicable law or agreed to in writing, software distributed *\n'
      r'^\1\2under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR *\n'
      r'^\1\2CONDITIONS OF ANY KIND, either express or implied(?:\.|->) See the License for the *\n'
      r'^\1\2specific language governing permissions and limitations under the License(?:\.|->)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Observatory (polymer)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'This code may only be used under the BSD style license found at (http://polymer.github.io/LICENSE.txt)$',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ashmem
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    versionIndices: const <int, int>{3:4},
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'This file is dual licensed. +It may be redistributed and/or modified *\n'
      r'^\1\2under the terms of the (Apache) (2\.0) License OR version 2 of the GNU *\n'
      r'^\1\2General Public License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute _?_?it and/or modify _?_?it under the terms *\n'
      r'^\1\2of the GNU General Public License as published by the Free Software *\n'
      r'^\1\2Foundation; either version (3), or \(at your option\) any later *\n'
      r'^\1\2version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that _?_?it will be useful, but *\n'
      r'^\1\2WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
      r'^\1\2General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception, alternative wrapping
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute it and/or modify it under the *\n'
      r'^\1\2terms of the GNU General Public License as published by the *\n'
      r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n'
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the(?:, 2009)? Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception, alternative footer without exception filename
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[6, 4],
    versionIndices: const <int, int>{6:3, 4:5},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute it and/or modify it under the *\n'
      r'^\1\2terms of the GNU General Public License as published by the *\n'
      r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n' // group 3 is the version of the gpl
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the (GCC Runtime Library Exception), version *\n' // group 4 is the "file name" of the exception (it's missing in this version, so we use this as a hook to later, see the url mappings)
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n' // group 5 is the version of the exception
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License along *\n'
      r'^\1\2with this library; see the file (COPYING3)\. +If not see *\n' // group 6 is the gpl file name
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GCC GPL+Exception
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of GCC. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is free software; you can redistribute it and/or modify it under *\n'
      r'^\1\2the terms of the GNU General Public License as published by the Free *\n'
      r'^\1\2Software Foundation; either version (3), or \(at your option\) any later *\n'
      r'^\1\2version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is distributed in the hope that it will be useful, but WITHOUT ANY *\n'
      r'^\1\2WARRANTY; without even the implied warranty of MERCHANTABILITY or *\n'
      r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU General Public License *\n'
      r'^\1\2for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GCC GPL+Exception, alternative line wrapping
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{ 5:3, 6:4 },
    pattern: RegExp(
      kIndent +
      r'This file is part of GCC. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is free software; you can redistribute it and/or modify *\n'
      r'^\1\2it under the terms of the GNU General Public License as published by *\n'
      r'^\1\2the Free Software Foundation; either version (3), or \(at your option\) *\n'
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // LGPL 2.1
  // some engine code
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Library General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n?'
       r'\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n?'
       r'\1\2Library General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU Library General Public License *\n'
      r'^\1\2(?:along|aint) with this library; see the file (COPYING\.LI(?:B|other\.m_))\.?  If not, write to *\n'
      r'^\1\2the Free Software Foundation, Inc\., (?:51 Franklin Street, Fifth Floor|59 Temple Place - Suite 330), *\n'
      r'^\1\2Boston, MA 0211[01]-130[17], US(?:A\.|m_)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // AFL/LGPL
  // xdg_mime
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'Licensed under the Academic Free License version 2.0 *\n'
      r'^\1\2Or under the following terms: *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\.\t? +See the GNU *\n'
      r'^\1\2Lesser General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
      r'^\1\2License along with this library; if not, write to the *\n'
      r'^\1\2Free Software Foundation, Inc\., 59 Temple Place - Suite 330, *\n'
      r'^\1\2Boston, MA 0211[01]-1307, USA\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MPL
  // root_certificates
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This Source Code Form is subject to the terms of the Mozilla Public *\n'
      r'^\1\2License, v\. (2.0)\. +If a copy of the MPL was not distributed with this *\n'
      r'^\1\2file, You can obtain one at (http://mozilla\.org/MPL/2\.0/)\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MPL/GPL/LGPL
  // engine
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3], // 5 is lgpl, which we're actively not selecting
    versionIndices: const <int, int>{ 3:4 }, // 5:6 for lgpl
    pattern: RegExp(
      kIndent +
      r'(?:Version: [GMPL/012. ]+ *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2)?The contents of this file are subject to the (Mozilla Public License) Version *\n'
      r'^\1\2(1\.1) \(the "License"\); you may not use this file except in compliance with *\n'
      r'^\1\2the License\. +You may obtain a copy of the License at *\n'
      r'^\1\2http://www\.mozilla\.org/MPL/ *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Software distributed under the License is distributed on an "AS IS" basis, *\n'
      r'^\1\2WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License *\n'
      r'^\1\2for the specific language governing rights and limitations under the *\n'
      r'^\1\2License\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2The Original Code is .+?(?:released\n'
      r'^\1\2March 31, 1998\.)?\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2The Initial Developer of the Original Code is *\n'
      r'^\1\2.+\n'
      r'^\1\2Portions created by the Initial Developer are Copyright \(C\) [0-9]+ *\n'
      r'^\1\2the Initial Developer\. +All Rights Reserved\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Contributor\(s\): *\n'
      r'(?:\1\2  .+\n)*'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2'
      +
      (
        r'Alternatively, the contents of this file may be used under the terms of '
        r'either (?:of )?the GNU General Public License Version 2 or later \(the "GPL"\), '
        r'or the (GNU Lesser) General Public License Version (2\.1) or later \(the '
        r'"LGPL"\), in which case the provisions of the GPL or the LGPL are '
        r'applicable instead of those above\. If you wish to allow use of your '
        r'version of this file only under the terms of either the GPL or the LGPL, '
        r'and not to allow others to use your version of this file under the terms '
        r'of the MPL, indicate your decision by deleting the provisions above and '
        r'replace them with the notice and other provisions required by the GPL or '
        r'the LGPL\. If you do not delete the provisions above, a recipient may use '
        r'your version of this file under the terms of any one of the MPL, the GPL or '
        r'the LGPL\.'
        .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // LGPL/MPL/GPL
  // engine
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2\.1) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
      r'^\1\2Lesser General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
      r'^\1\2License along with this library; if not, write to the Free Software *\n'
      r'^\1\2Foundation, Inc\., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 +USA *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Alternatively, the contents of this file may be used under the terms *\n'
      r'^\1\2of either the Mozilla Public License Version 1\.1, found at *\n'
      r'^\1\2http://www\.mozilla\.org/MPL/ \(the "MPL"\) or the GNU General Public *\n'
      r'^\1\2License Version 2\.0, found at http://www\.fsf\.org/copyleft/gpl\.html *\n'
      r'^\1\2\(the "GPL"\), in which case the provisions of the MPL or the GPL are *\n'
      r'^\1\2applicable instead of those above\. +If you wish to allow use of your *\n'
      r'^\1\2version of this file only under the terms of one of those two *\n'
      r'^\1\2licenses \(the MPL or the GPL\) and not to allow others to use your *\n'
      r'^\1\2version of this file under the LGPL, indicate your decision by *\n'
      r'^\1\2deletingthe provisions above and replace them with the notice and *\n'
      r'^\1\2other provisions required by the MPL or the GPL, as the case may be\. *\n'
      r'^\1\2If you do not delete the provisions above, a recipient may use your *\n'
      r'^\1\2version of this file under any of the LGPL, the MPL or the GPL\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'(?:©|Copyright (©|\(C\))) 20.. and later: Unicode, Inc. and others.[ *]*\n'
      r'^\1\2License & terms of use: (https?://www.unicode.org/copyright.html)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'(?:Copyright ©) 20..-20.. Unicode, Inc. and others. All rights reserved. '
      r'Distributed under the Terms of Use in (http://www.unicode.org/copyright.html)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Copyright \(C\) 2016 and later: Unicode, Inc. and others. License & terms of use: (http://www.unicode.org/copyright.html) *\n',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'© 2016 and later: Unicode, Inc. and others. *\n'
      r'^ *License & terms of use: (http://www.unicode.org/copyright.html)#License *\n'
      r'^ *\n'
      r'^ *Copyright \(c\) 2000 IBM, Inc. and Others. *\n',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Unicode terms of use
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'\n// For terms of use, see (https://www.unicode.org/copyright.html)\n',
      caseSensitive: false,
    )
  ),
];


// INLINE LICENSES

final List<RegExp> csLicenses = <RegExp>[

  // used with _tryInline, with needsCopyright: true (will only match if preceded by a copyright notice)
  // should have two groups, prefixes 1 and 2

  // BoringSSL
  RegExp(
    kIndent +
    r'Redistribution and use in source and binary forms, with or without *\n'
    r'^\1\2modification, are permitted provided that the following conditions *\n'
    r'^\1\2are met: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer in *\n'
    r'^\1\2 *the documentation and/or other materials provided with the *\n'
    r'^\1\2 *distribution\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this *\n'
    r'^\1\2 *software must display the following acknowledgment: *\n'
    r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
    r'^\1\2 *for use in the OpenSSL Toolkit\. \(http://www\.OpenSSL\.org/\)" *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *\n'
    r'^\1\2 *endorse or promote products derived from this software without *\n'
    r'^\1\2 *prior written permission\. +For written permission, please contact *\n'
    r'^\1\2 *[^@ ]+@OpenSSL\.org\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Products derived from this software may not be called "OpenSSL" *\n'
    r'^\1\2 *nor may "OpenSSL" appear in their names without prior written *\n'
    r'^\1\2 *permission of the OpenSSL Project\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of any form whatsoever must retain the following *\n'
    r'^\1\2 *acknowledgment: *\n'
    r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
    r'^\1\2 *for use in the OpenSSL Toolkit \(http://www\.OpenSSL\.org/\)" *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY *\n"
    r'^\1\2EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
    r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR *\n'
    r'^\1\2PURPOSE ARE DISCLAIMED\. +IN NO EVENT SHALL THE OpenSSL PROJECT OR *\n'
    r'^\1\2ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *\n'
    r'^\1\2SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES \(INCLUDING, BUT *\n'
    r'^\1\2NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *\n'
    r'^\1\2LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
    r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, *\n'
    r'^\1\2STRICT LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) *\n'
    r'^\1\2ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED *\n'
    r'^\1\2OF THE POSSIBILITY OF SUCH DAMAGE\.',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'(?:This package is an SSL implementation written *\n'
    r'^\1\2by Eric Young \(eay@cryptsoft\.com\)\. *\n'
    r'^\1\2The implementation was written so as to conform with Netscapes SSL\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2This library is free for commercial and non-commercial use as long as *\n'
    r'^\1\2the following conditions are aheared to\. +The following conditions *\n'
    r'^\1\2apply to all code found in this distribution, be it the RC4, RSA, *\n'
    r'^\1\2lhash, DES, etc\., code; not just the SSL code\. +The SSL documentation *\n'
    r'^\1\2included with this distribution is covered by the same copyright terms *\n'
    r'^\1\2except that the holder is Tim Hudson \(tjh@cryptsoft\.com\)\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r"^\1\2Copyright remains Eric Young's, and as such any Copyright notices in *\n"
    r'^\1\2the code are not to be removed\. *\n'
    r'^\1\2If this package is used in a product, Eric Young should be given attribution *\n'
    r'^\1\2as the author of the parts of the library used\. *\n'
    r'^\1\2This can be in the form of a textual message at program startup or *\n'
    r'^\1\2in documentation \(online or textual\) provided with the package\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2)?Redistribution and use in source and binary forms, with or without *\n'
    r'^\1\2modification, are permitted provided that the following conditions *\n'
    r'^\1\2are met: *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer in the *\n'
    r'^\1\2 *documentation and/or other materials provided with the distribution\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this software *\n'
    r'^\1\2 *must display the following acknowledgement: *\n'
    r'^\1\2 *"This product includes cryptographic software written by *\n'
    r'^\1\2 *Eric Young \(eay@cryptsoft\.com\)" *\n'
    r"^\1\2 *The word 'cryptographic' can be left out if the rouines from the library *\n" // TODO(ianh): File a bug on the number of analyzer errors you get if you replace the " characters on this line with '
    r'^\1\2 *being used are not cryptographic related :-\)\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)If you include any Windows specific code \(or a derivative thereof\) fromg? *\n'
    r'^\1\2 *the apps directory \(application code\) you must include an acknowledgement: *\n'
    r'^\1\2 *"This product includes software written by Tim Hudson \(tjh@cryptsoft\.com\)" *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND *\n"
    r'^\1\2ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
    r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE *\n'
    r'^\1\2ARE DISCLAIMED\. +IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE *\n'
    r'^\1\2FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL *\n'
    r'^\1\2DAMAGES \(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS *\n'
    r'^\1\2OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
    r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *\n'
    r'^\1\2LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) ARISING IN ANY WAY *\n'
    r'^\1\2OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *\n'
    r'^\1\2SUCH DAMAGE\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2The licence and distribution terms for any publically available version or *\n'
    r'^\1\2derivative of this code cannot be changed\. +i\.e\. +this code cannot simply be *\n'
    r'^\1\2copied and put under another distribution licence *\n'
    r'^\1\2\[including the GNU Public Licence\.\]',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    (
      r'License to copy and use this software is granted provided that it '
      r'is identified as the "RSA Data Security, Inc\. MD5 Message-Digest '
      r'Algorithm" in all material mentioning or referencing this software '
      r'or this function\. '
      r'License is also granted to make and use derivative works provided '
      r'that such works are identified as "derived from the RSA Data '
      r'Security, Inc\. MD5 Message-Digest Algorithm" in all material '
      r'mentioning or referencing the derived work\. '
      r'RSA Data Security, Inc\. makes no representations concerning either '
      r'the merchantability of this software or the suitability of this '
      r'software for any particular purpose\. It is provided "as is" '
      r'without express or implied warranty of any kind\. '
      r'These notices must be retained in any copies of any part of this '
      r'documentation and/or software\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false,
  ),

  // BSD-DERIVED LICENSES

  RegExp(
    kIndent +

    // Some files in ANGLE prefix the license with a description of the license.
    r'(?:BSD 2-Clause License \(http://www.opensource.org/licenses/bsd-license.php\))?' +
    _linebreak +

    (
      'Redistribution and use in source and binary forms, with or without '
      'modification, are permitted provided that the following conditions are met:'
      .replaceAll(' ', _linebreak)
    )
    +

    // the conditions:
    r'(?:' +

    // indented blank lines
    _linebreak +

    // truly blank lines
    r'|[\r\n]+' +

    // ad clause - ucb
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'All advertising materials mentioning features or use of this software '
      'must display the following acknowledgement: This product includes software '
      'developed by the University of California, Berkeley and its contributors\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // ad clause - netbsd
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'All advertising materials mentioning features or use of this software '
      'must display the following acknowledgement: This product includes software '
      'developed by the NetBSD Foundation, Inc\\. and its contributors\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // ack clause
    r'|(?:[-*1-9.)/ ]*)' +
    (
      r'The origin of this software must not be misrepresented; you must not claim '
      r'that you wrote the original software\. If you use this software in a product, '
      r'an acknowledgment in the product documentation would be appreciated but is '
      r'not required\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      r'Altered source versions must be plainly marked as such, and must not be '
      r'misrepresented as being the original software\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // no ad clauses
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Neither my name, .+, nor the names of any other contributors to the code '
      'use may not be used to endorse or promote products derived from this '
      'software without specific prior written permission\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'The name of the author may not be used to endorse or promote products '
      'derived from this software without specific prior written permission\\.?'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Neither the name of .+ nor the names of its contributors may be used '
      'to endorse or promote products derived from this software without '
      'specific prior written permission\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // notice clauses
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions of source code must retain the above copyright notice, '
      'this list of conditions and the following disclaimer\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions in binary form must reproduce the above copyright notice, '
      'this list of conditions and the following disclaimer in the documentation '
      'and/or other materials provided with the distribution\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions in binary form must reproduce the above copyright notice, '
      'this list of conditions and the following disclaimer\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // end of conditions
    r')*'
    +

    // disclaimers
    (
      'THIS SOFTWARE IS PROVIDED (?:BY .+(?: .+)? )?["“`]+AS IS["”\']+,? AND ANY EXPRESS OR IMPLIED '
      'WARRANTIES,(?::tabnew)? INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF '
      'MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED\\. IN NO EVENT '
      'SHALL .+(?: .+)? BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR '
      'CONSEQUENTIAL DAMAGES \\(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS '
      'OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\\) HOWEVER CAUSED '
      'AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \\(INCLUDING '
      'NEGLIGENCE OR OTHERWISE\\) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF '
      'ADVISED OF THE POSSIBILITY OF SUCH DAMAGE\\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false,
  ),


  // THREE-CLAUSE LICENSES
  // licenses in this section are sorted first by the length of the last line, in words,
  // and then by the length of the bulletted clauses, in total lines.

  // Seen in libjpeg-turbo
  // TODO(ianh): Mark License as not needing to be shown
  RegExp(
    kIndent +
    r"This software is provided 'as-is', without any express or implied *\n"
    r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
    r'^\1\2arising from the use of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
    r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
    r'^\1\2freely, subject to the following restrictions: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
    r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
    r'^\1\2 *in a product, an acknowledgment in the product documentation would be *\n'
    r'^\1\2 *appreciated but is not required\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not be *\n'
    r'^\1\2 *misrepresented as being the original software\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source distribution\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW
  RegExp(
    kIndent +
    r"This software is provided 'as-is', without any express or implied *\n"
    r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
    r'^\1\2arising from the use of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
    r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
    r'^\1\2freely, subject to the following restrictions: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
    r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
    r'^\1\2 *in a product, an acknowledgment in the product documentation would *\n'
    r'^\1\2 *be appreciated but is not required\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not *\n'
    r'^\1\2 *be misrepresented as being the original software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source *\n'
    r'^\1\2 *distribution\.',
    multiLine: true,
    caseSensitive: false
  ),


  // MIT-DERIVED LICENSES

  // Seen in Mesa, among others.
  RegExp(
    kIndent +
    (
      r'(?:' // this bit is optional
      r'Licensed under the MIT license:\r?\n' // seen in expat
      r'\1\2? *\r?\n' // blank line
      r'\1\2' // this is the prefix for the next block (handled by kIndent if this optional bit is skipped)
      r')?' // end of optional bit
    )
    +
    (
      r'Permission is hereby granted, free of charge, to any person obtaining '
      r'a copy of this software and(?: /or)? associated documentation files \(the "(?:Software|Materials) "\), '
      r'to deal in the (?:Software|Materials) without restriction, including without limitation '
      r'the rights to use, copy, modify, merge, publish, distribute, sub license, '
      r'and/or sell copies of the (?:Software|Materials), and to permit persons to whom the '
      r'(?:Software|Materials) (?:is|are) furnished to do so, subject to the following conditions:'
      .replaceAll(' ', _linebreak)
    )
    +
    r'(?:'
    +
    (
      r'(?:(?:\1\2?(?: *| -*))? *\r?\n)*' // A version with "// -------" between sections was seen in ffx_spd, hence the -*.

      +

      r'|'

      r'\1\2 '
      r'The above copyright notice and this permission notice'
      r'(?: \(including the next paragraph\))? '
      r'shall be included in all copies or substantial portions '
      r'of the (?:Software|Materials)\.'

      r'|'

      r'\1\2 '
      r'The above copyright notice including the dates of first publication and either this '
      r'permission notice or a reference to .+ shall be '
      r'included in all copies or substantial portions of the Software.'

      r'|'

      r'\1\2 '
      r'In addition, the following condition applies:'

      r'|'

      r'\1\2 '
      r'All redistributions must retain an intact copy of this copyright notice and disclaimer\.'

      r'|'

      r'\1\2 '
      r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS '
      r'OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE AND NON-?INFRINGEMENT\. IN NO EVENT SHALL '
      r'.+(?: .+)? BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER '
      r'IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
      r'CONNECTION WITH THE (?:SOFTWARE|MATERIALS) OR THE USE OR OTHER DEALINGS IN THE (?:SOFTWARE|MATERIALS)\.'

      r'|'

      r'\1\2 '
      r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS" AND WITHOUT WARRANTY OF ANY KIND, '
      r'EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY '
      r'OR FITNESS FOR A PARTICULAR PURPOSE\.'

      r'|'

      r'\1\2 '
      r'IN NO EVENT SHALL .+ BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL '
      r'DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, '
      r'WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING '
      r'OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE\.'

      r'|'

      r'\1\2 '
      r'Except as contained in this notice, the name of .+ shall not '
      r'be used in advertising or otherwise to promote the sale, use or other dealings in '
      r'this Software without prior written authorization from .+\.'

      .replaceAll(' ', _linebreak)
    )
    +
    r')*',
    multiLine: true,
    caseSensitive: false
  ),

  // BISON LICENSE
  // Seen in some ANGLE source. The usage falls under the "special exception" clause.
  RegExp(
    kIndent +
    r'This program is free software: you can redistribute it and/or modify\n'
    r'^(?:\1\2)?it under the terms of the GNU General Public License as published by\n'
    r'^(?:\1\2)?the Free Software Foundation, either version 3 of the License, or\n'
    r'^(?:\1\2)?\(at your option\) any later version.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?This program is distributed in the hope that it will be useful,\n'
    r'^(?:\1\2)?but WITHOUT ANY WARRANTY; without even the implied warranty of\n'
    r'^(?:\1\2)?MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n'
    r'^(?:\1\2)?GNU General Public License for more details.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?You should have received a copy of the GNU General Public License\n'
    r'^(?:\1\2)?along with this program.  If not, see <https?://www.gnu.org/licenses/>.  \*/\n'
    r'^(?:\1\2)?\n*' +
    kIndent +
    r'As a special exception, you may create a larger work that contains\n'
    r'^(?:\1\2)?part or all of the Bison parser skeleton and distribute that work\n'
    r"^(?:\1\2)?under terms of your choice, so long as that work isn't itself a\n"
    r'^(?:\1\2)?parser generator using the skeleton or a modified version thereof\n'
    r'^(?:\1\2)?as a parser skeleton.  Alternatively, if you modify or redistribute\n'
    r'^(?:\1\2)?the parser skeleton itself, you may \(at your option\) remove this\n'
    r'^(?:\1\2)?special exception, which will cause the skeleton and the resulting\n'
    r'^(?:\1\2)?Bison output files to be licensed under the GNU General Public\n'
    r'^(?:\1\2)?License without this special exception.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?This special exception was added by the Free Software Foundation in\n'
    r'^(?:\1\2)?version 2.2 of Bison.  \*/\n',
    multiLine: true,
    caseSensitive: false
  ),

  // OTHER BRIEF LICENSES

  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^(?:\1\2)?purpose with or without fee is hereby granted, provided that the above *\n'
    r'^(?:\1\2)?copyright notice and this permission notice appear in all copies(?:, and that *\n'
    r'^(?:\1\2)?the name of .+ not be used in advertising or *\n'
    r'^(?:\1\2)?publicity pertaining to distribution of the document or software without *\n'
    r'^(?:\1\2)?specific, written prior permission)?\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^(?:\1\2)?THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL(?: WARRANTIES)? *\n'
    r'^(?:\1\2)?(?:WARRANTIES )?WITH REGARD TO THIS SOFTWARE,? INCLUDING ALL IMPLIED WARRANTIES(?: OF)? *\n'
    r'^(?:\1\2)?(?:OF )?MERCHANTABILITY AND FITNESS\. +IN NO EVENT SHALL .+(?: BE LIABLE FOR)? *\n'
    r'^(?:\1\2)?(?:.+ BE LIABLE FOR )?ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL(?: DAMAGES OR ANY DAMAGES)? *\n'
    r'^(?:\1\2)?(?:DAMAGES OR ANY DAMAGES )?WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR(?: PROFITS, WHETHER IN AN)? *\n'
    r'^(?:\1\2)?(?:PROFITS, WHETHER IN AN )?ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS(?: ACTION, ARISING OUT OF)? *\n'
    r'^(?:\1\2)?(?:ACTION, ARISING OUT OF )?OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS(?: SOFTWARE)?(?: *\n'
    r'^(?:\1\2)?SOFTWARE)?\.',
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in the NDK
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and/or distribute this software for any *\n'
    r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
    r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL WARRANTIES(?: WITH)? *\n'
    r'^\1\2(?:WITH )?REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF(?: MERCHANTABILITY)? *\n'
    r'^\1\2(?:MERCHANTABILITY )?AND FITNESS\. +IN NO EVENT SHALL .+ BE LIABLE FOR(?: ANY(?: SPECIAL, DIRECT,)?)? *\n'
    r'^\1\2(?:(?:ANY )?SPECIAL, DIRECT, )?INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES(?: WHATSOEVER RESULTING FROM)? *\n'
    r'^\1\2(?:WHATSOEVER RESULTING FROM )?LOSS OF USE, DATA OR PROFITS, WHETHER IN AN(?: ACTION(?: OF CONTRACT, NEGLIGENCE)?)? *\n'
    r'^\1\2(?:(?:ACTION )?OF CONTRACT, NEGLIGENCE )?OR OTHER TORTIOUS ACTION, ARISING OUT OF(?: OR IN(?: CONNECTION WITH THE USE OR)?)? *\n'
    r'^\1\2(?:(?:OR IN )?CONNECTION WITH THE USE OR )?PERFORMANCE OF THIS SOFTWARE\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
    r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED *\n"
    r'^\1\2WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF *\n'
    r'^\1\2MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE\. +THE AUTHORS AND *\n'
    r'^\1\2CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW, base
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^\1\2purpose without fee is hereby granted, provided that this entire notice *\n'
    r'^\1\2is included in all copies of any software which is or includes a copy *\n'
    r'^\1\2or modification of this software and in all copies of the supporting *\n'
    r'^\1\2documentation for such software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED *\n'
    r'^\1\2WARRANTY\. +IN PARTICULAR, NEITHER THE AUTHOR NOR .+ MAKES ANY *\n'
    r'^\1\2REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY *\n'
    r'^\1\2OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE\.',
    multiLine: true,
    caseSensitive: false
  ),

  // harfbuzz
  RegExp(
    kIndent +
    r'Permission is hereby granted, without written agreement and without *\n'
    r'^\1\2license or royalty fees, to use, copy, modify, and distribute this *\n'
    r'^\1\2software and its documentation for any purpose, provided that the *\n'
    r'^\1\2above copyright notice and the following two paragraphs appear in *\n'
    r'^\1\2all copies of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR *\n'
    r'^\1\2DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES *\n'
    r'^\1\2ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN *\n'
    r'^\1\2IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH *\n'
    r'^\1\2DAMAGE\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, *\n'
    r'^\1\2BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND *\n'
    r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +THE SOFTWARE PROVIDED HEREUNDER IS *\n'
    r'^\1\2ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO *\n'
    r'^\1\2PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS\. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // NDK
  RegExp(
    kIndent +
    r'Permission to use, copy, modify and distribute this software and *\n'
    r'^\1\2its documentation is hereby granted, provided that both the copyright *\n'
    r'^\1\2notice and this permission notice appear in all copies of the *\n'
    r'^\1\2software, derivative works or modified versions, and any portions *\n'
    r'^\1\2thereof, and that both notices appear in supporting documentation. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" *\n'
    r'^\1\2CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND *\n'
    r'^\1\2FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Carnegie Mellon requests users of this software to return to *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2 Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU *\n'
    r'^\1\2 School of Computer Science *\n'
    r'^\1\2 Carnegie Mellon University *\n'
    r'^\1\2 Pittsburgh PA 15213-3890 *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2any improvements or extensions that they make and grant Carnegie the *\n'
    r'^\1\2rights to redistribute these changes. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in Android NDK gnu-libstdc++
  RegExp(
    kIndent +
    (
      r'Permission to use, copy, modify, (?:distribute and sell|sell, and distribute) this software '
      r'(?:and its documentation for any purpose )?is hereby granted without fee, '
      r'provided that the above copyright notice appears? in all copies,? and '
      r'that both that copyright notice and this permission notice appear '
      r'in supporting documentation\. '
      r'(?:.+'
        r'|Hewlett-Packard Company'
        r'|Silicon Graphics'
        r'|None of the above authors, nor IBM Haifa Research Laboratories,'
      r') makes? (?:no|any) '
      r'representations? about the suitability of this software for any '
      r'(?:purpose\. It is provi)?ded "as is" without express or implied warranty\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in Android NDK
  RegExp(
    kIndent +
    r'Developed at (?:SunPro|SunSoft), a Sun Microsystems, Inc. business. *\n'
    r'^\1\2Permission to use, copy, modify, and distribute this *\n'
    r'^\1\2software is freely granted, provided that this notice *\n'
    r'^\1\2is preserved.',
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in Android NDK (stlport)
  RegExp(
    kIndent +
    r'This material is provided "as is", with absolutely no warranty expressed *\n'
    r'^\1\2or implied\. +Any use is at your own risk\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission to use or copy this software for any purpose is hereby granted *\n'
    r'^\1\2without fee, provided the above notices are retained on all copies\. *\n'
    r'^\1\2Permission to modify the code and to distribute modified code is granted, *\n'
    r'^\1\2provided the above notices are retained, and a notice that the code was *\n'
    r'^\1\2modified is included with the above copyright notice\.',
    multiLine: true,
    caseSensitive: false
  ),

  // freetype2.
  RegExp(
    kIndent +
    (
      r'Permission to use, copy, modify, distribute, and sell this software and its '
      r'documentation for any purpose is hereby granted without fee, provided that '
      r'the above copyright notice appear in all copies and that both that '
      r'copyright notice and this permission notice appear in supporting '
      r'documentation\. '
      r'The above copyright notice and this permission notice shall be included in '
      r'all copies or substantial portions of the Software\. '
      r'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR '
      r'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\.  IN NO EVENT SHALL THE '
      r'OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN '
      r'AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
      r'CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\. '
      r'Except as contained in this notice, the name of The Open Group shall not be '
      r'used in advertising or otherwise to promote the sale, use or other dealings '
      r'in this Software without prior written authorization from The Open Group\. '
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

  // TODO(ianh): File a bug on what happens if you replace the // with a #
  // ICU
  RegExp(
    kIndent +
    r'This file is provided as-is by Unicode, Inc\. \(The Unicode Consortium\)\. '
    r'No claims are made as to fitness for any particular purpose\. No '
    r'warranties of any kind are expressed or implied\. The recipient '
    r'agrees to determine applicability of information provided\. If this '
    r'file has been provided on optical media by Unicode, Inc\., the sole '
    r'remedy for any claim will be exchange of defective media within 90 '
    r'days of receipt\. '
    r'Unicode, Inc\. hereby grants the right to freely use the information '
    r'supplied in this file in the creation of products supporting the '
    r'Unicode Standard, and to make copies of this file in any form for '
    r'internal or external distribution as long as this notice remains '
    r'attached\.'
    .replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

  // OpenSSL
  RegExp(
    kIndent +
    r'The portions of the attached software \("Contribution"\) is developed by *\n'
    r'^\1\2Nokia Corporation and is licensed pursuant to the OpenSSL open source *\n'
    r'^\1\2license\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2The Contribution, originally written by Mika Kousa and Pasi Eronen of *\n'
    r'^\1\2Nokia Corporation, consists of the "PSK" \(Pre-Shared Key\) ciphersuites *\n'
    r'^\1\2support \(see RFC 4279\) to OpenSSL\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2No patent licenses or other rights except those expressly stated in *\n'
    r'^\1\2the OpenSSL open source license shall be deemed granted or received *\n'
    r'^\1\2expressly, by implication, estoppel, or otherwise\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2No assurances are provided by Nokia that the Contribution does not *\n'
    r'^\1\2infringe the patent or other intellectual property rights of any third *\n'
    r'^\1\2party or that the license provides you with all the necessary rights *\n'
    r'^\1\2to make use of the Contribution\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND\. IN *\n'
    r'^\1\2ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA *\n'
    r'^\1\2SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY *\n'
    r'^\1\2OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR *\n'
    r'^\1\2OTHERWISE\.',
    multiLine: true,
    caseSensitive: false
  ),

];

final List<RegExp> csNotices = <RegExp>[

  // used with _tryInline, with needsCopyright: false
  // should have two groups, prefixes 1 and 2

  RegExp(
    kIndent +
    r'The Graphics Interchange Format\(c\) is the copyright property of CompuServe *\n'
    r'^\1\2Incorporated\. +Only CompuServe Incorporated is authorized to define, redefine, *\n'
    r'^\1\2enhance, alter, modify or change in any way the definition of the format\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2CompuServe Incorporated hereby grants a limited, non-exclusive, royalty-free *\n'
    r'^\1\2license for the use of the Graphics Interchange Format\(sm\) in computer *\n'
    r'^\1\2software; computer software utilizing GIF\(sm\) must acknowledge ownership of the *\n'
    r'^\1\2Graphics Interchange Format and its Service Mark by CompuServe Incorporated, in *\n'
    r'^\1\2User and Technical Documentation\. +Computer software utilizing GIF, which is *\n'
    r'^\1\2distributed or may be distributed without User or Technical Documentation must *\n'
    r'^\1\2display to the screen or printer a message acknowledging ownership of the *\n'
    r'^\1\2Graphics Interchange Format and the Service Mark by CompuServe Incorporated; in *\n'
    r'^\1\2this case, the acknowledgement may be displayed in an opening screen or leading *\n'
    r'^\1\2banner, or a closing screen or trailing banner\. +A message such as the following *\n'
    r'^\1\2may be used: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2 *"The Graphics Interchange Format\(c\) is the Copyright property of *\n'
    r'^\1\2 *CompuServe Incorporated\. +GIF\(sm\) is a Service Mark property of *\n'
    r'^\1\2 *CompuServe Incorporated\." *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // NSPR
  // (Showing the entire block instead of the LGPL for this file is based
  // on advice specifically regarding the prtime.cc file.)
  RegExp(
    r'()()/\* Portions are Copyright \(C\) 2011 Google Inc \*/\n'
    r'/\* \*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*\n'
    r' \* Version: MPL 1\.1/GPL 2\.0/LGPL 2\.1\n'
    r' \*\n'
    r' \* The contents of this file are subject to the Mozilla Public License Version\n'
    r' \* 1\.1 \(the "License"\); you may not use this file except in compliance with\n'
    r' \* the License\. +You may obtain a copy of the License at\n'
    r' \* http://www\.mozilla\.org/MPL/\n'
    r' \*\n'
    r' \* Software distributed under the License is distributed on an "AS IS" basis,\n'
    r' \* WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License\n'
    r' \* for the specific language governing rights and limitations under the\n'
    r' \* License\.\n'
    r' \*\n'
    r' \* The Original Code is the Netscape Portable Runtime \(NSPR\)\.\n'
    r' \*\n'
    r' \* The Initial Developer of the Original Code is\n'
    r' \* Netscape Communications Corporation\.\n'
    r' \* Portions created by the Initial Developer are Copyright \(C\) 1998-2000\n'
    r' \* the Initial Developer\. +All Rights Reserved\.\n'
    r' \*\n'
    r' \* Contributor\(s\):\n'
    r' \*\n'
    r' \* Alternatively, the contents of this file may be used under the terms of\n'
    r' \* either the GNU General Public License Version 2 or later \(the "GPL"\), or\n'
    r' \* the GNU Lesser General Public License Version 2\.1 or later \(the "LGPL"\),\n'
    r' \* in which case the provisions of the GPL or the LGPL are applicable instead\n'
    r' \* of those above\. +If you wish to allow use of your version of this file only\n'
    r' \* under the terms of either the GPL or the LGPL, and not to allow others to\n'
    r' \* use your version of this file under the terms of the MPL, indicate your\n'
    r' \* decision by deleting the provisions above and replace them with the notice\n'
    r' \* and other provisions required by the GPL or the LGPL\. +If you do not delete\n'
    r' \* the provisions above, a recipient may use your version of this file under\n'
    r' \* the terms of any one of the MPL, the GPL or the LGPL\.\n'
    r' \*\n'
    r' \* \*\*\*\*\* END LICENSE BLOCK \*\*\*\*\* \*/\n'
  ),

  // Advice for this was "text verbatim".
  RegExp(
    kIndent +
    r'Copyright \(c\) 2015-2016 Khronos Group\. This work is licensed under a\n'
    r'\1\2Creative Commons Attribution 4\.0 International License; see\n'
    r'\1\2http://creativecommons\.org/licenses/by/4\.0/',
    multiLine: true,
    caseSensitive: false,
  ),

  // by analogy to the above one
  // seen in jsr305
  RegExp(
    kIndent +
    r'Copyright .+\n'
    r'\1\2Released under the Creative Commons Attribution License\n'
    r'\1\2 *\(?http://creativecommons\.org/licenses/by/2\.5/?\)?\n'
    r'\1\2Official home: .+',
    multiLine: true,
    caseSensitive: false,
  ),

  // Advice for this was "Just display its text as a politeness. Nothing else required".
  RegExp(
    r'()()/\* mdXhl\.c \* ----------------------------------------------------------------------------\n'
    r' \* "THE BEER-WARE LICENSE" \(Revision 42\):\n'
    r' \* <phk@FreeBSD\.org> wrote this file\. +As long as you retain this notice you\n'
    r' \* can do whatever you want with this stuff\. If we meet some day, and you think\n'
    r' \* this stuff is worth it, you can buy me a beer in return\. +Poul-Henning Kamp\n'
    r' \* ----------------------------------------------------------------------------\n'
    r' \* libjpeg-turbo Modifications:\n'
    r' \* Copyright \(C\) 2016, D\. R\. Commander\.?\n'
    r' \* Modifications are under the same license as the original code \(see above\)\n'
    r' \* ----------------------------------------------------------------------------'
  ),
];


// FALLBACK PATTERNS

final List<RegExp> csFallbacks = <RegExp>[

  // used with _tryNone
  // groups are ignored

];


// FORWARD REFERENCE

class ForwardReferencePattern {
  ForwardReferencePattern({ this.firstPrefixIndex, this.indentPrefixIndex, this.pattern, this.targetPattern });
  final int? firstPrefixIndex;
  final int? indentPrefixIndex;
  final RegExp? pattern;
  final RegExp? targetPattern;
}

final List<ForwardReferencePattern> csForwardReferenceLicenses = <ForwardReferencePattern>[

  // used with _tryForwardReferencePattern

  // OpenSSL (in Dart third_party)
  ForwardReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    pattern: RegExp(
      kIndent + r'(?:'
      +
      (
        r'Portions of the attached software \("Contribution"\) are developed by .+ and are contributed to the OpenSSL project\.'
        .replaceAll(' ', _linebreak)
      )
      +
      r'|'
      +
      (
        r'The .+ included herein is developed by .+, and is contributed to the OpenSSL project\.'
        .replaceAll(' ', _linebreak)
      )
      +
      r'|'
      r'(?:\1? *\n)+'
      r')*'
      r'\1\2 *'
      +
      (
        r'The .+ is licensed pursuant to the OpenSSL open source license provided (?:below|above)\.'
        .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    ),
    targetPattern: RegExp('Redistribution and use in source and binary forms(?:.|\n)+OpenSSL')
  ),

  // libevent
  ForwardReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    pattern: RegExp(
      kIndent + r'Use is subject to license terms\.$',
      multiLine: true,
      caseSensitive: false,
    ),
    targetPattern: RegExp('Redistribution and use in source and binary forms(?:.|\n)+SUN MICROSYSTEMS')
  ),

];
