
COPYRIGHT STATUS

The bulk of this code is copyright by members of or all of the R Core
Team.  ('The R Core Team' in copyright statements in individual files
refers to some or all of the team.)

See the file COPYING for the exact conditions under which you may
redistribute it.  R as a whole is distributed under GPL version 2 or
3: most source files contain a copyright statement allowing use of
that file under GPL version 2 or later: the main exceptions are the
included versions of packages 'MASS', 'class', 'nnet', 'rpart' and
'spatial' (GPL-2 or GPL-3).  (The auxiliary file m4/openmp.m4 is under
GPL-3, but its incorporation into 'configure' is not.)

The status of files used only in the Windows port is in file
src/gnuwin32/COPYRIGHTS.win, which is appended to this file in binary
Windows distributions.

Note that almost all the code *is* copyright and may only be
reproduced if the copyright notice (that in the file or this notice)
is preserved.  The status of the included LINPACK routines is unclear:
they are said to be in the public domain in the USA.

	---------------------------------------------------

Some (but not all) of the public header files are distributed under
the more permissive terms of version 2.1 or later of the LGPL: see
files R_HOME/share/licenses/LGPL-2.1 and R_HOME/share/licenses/LGPL-3.
This applies only to the header files

src/include/R.h
src/include/Rdefines.h
src/include/Rgraphics.h
src/include/Rinternals.h
src/include/Rmath.h
src/include/R_ext/*.h

Note that it does not apply to the header files such as Rembedded.h
and Rinterface.h used for third-party front ends.

From the announcement of the change (2001-Feb-05)

    It came to our attention that some projects are interpreting GPL to
    mean that compiling against the header files or linking against a
    Windows import library brings the compiled code under the scope of
    GPL.  This would mean it would be impossible to distribute binary
    versions of non-GPL packages with compiled code which called entry
    points in the R executable or DLL, of which there are many on CRAN.

    We encourage packages to be distributed under Open Source conditions,
    but accept that this is not possible for some contributions.  Our
    intention is that export files and import libraries be 'accessors'
    under clause 5 of the LGPL, so that in most cases no (additional)
    restrictions are imposed by compiling a package using the LGPL-ed
    components of R.

    To avoid any anomalies, the versions of the same files in R versions
    1.0.0 to 1.2.1 may also be used under LGPL or GPL.

Import libraries are no longer used under Windows.

Some contributed files are also covered by the Library General Public License.
These include (see also below)

src/library/stats/R/embed.R
src/library/stats/src/PPsum.c

	---------------------------------------------------




Some of the code contains different copyright statements.  It is used
here in accordance with the copyright conditions in that code.  A
not-necessarily-complete list of such files is:

src/library/grDevices/inst/afm/*___.afm

	Copyright (c) 1984 to 1992 Adobe Systems Incorporated.

src/library/grDevices/inst/afm/MustRead.html
src/library/grDevices/inst/afm/Courier*.afm
src/library/grDevices/inst/afm/Helvetica*.afm
src/library/grDevices/inst/afm/Times*.afm
src/library/grDevices/inst/afm/Symbol.afm
src/library/grDevices/inst/afm/ZapfDingbats.afm

	Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems
	Incorporated.  All Rights Reserved.

src/library/grDevices/inst/afm/*l.afm

	Copyright 1999 by (URW)++ Design & Development

src/library/grDevices/inst/afm/CM_*.afm
src/library/grDevices/inst/afm/cm*.afm

	are derived from afms which are copyright by the American
	Mathematical Society, but 'the AMS does require that the
	AMS copyright notice be removed from any derivative versions
	of the fonts which have been altered in any way'.

doc/manual/R-intro.texi

in part

	Copyright (C) 1990 W. N. Venables
	Copyright (C) 1992 W. N. Venables & D. M. Smith
	Copyright (C) 1997 R. Gentleman & R. Ihaka
	Copyright (C) 1997, 1998 M. Maechler

share/licenses/*

	See the individual files.

share/texmf/bibtex/bst/jss.bst

	Copyright 1994-2007 Patrick W Daly

share/texmf/tex/latex/jss.cls

	Copyright: (C) Achim Zeileis

src/library/graphics/R/mosaicplot.R

	Original code copyright (C) 1998 John W. Emerson

src/library/graphics/R/pairs.R

	In part, Copyright 1999 Dr. Jens Oehlschlaegel-Akiyoshi

src/library/graphics/R/polygon.R

	Copyright (C) 2001 by Kevin Buhr <buhr@stat.wisc.edu>

src/library/splines/R/splineClasses.R

	Copyright (C) 1998 Douglas M. Bates and William N. Venables.

src/library/datasets/man/austres.Rd
src/library/datasets/man/beavers.Rd
src/library/datasets/man/lh.Rd
src/library/datasets/man/npk.Rd
src/library/datasets/man/rock.Rd
src/library/datasets/man/UKLungDeaths.Rd
src/library/datasets/man/USAccDeaths.Rd
src/library/stats/R/add.R
src/library/stats/R/bandwidths.R
src/library/stats/R/confint.R
src/library/stats/R/cpgram.R
src/library/stats/R/spectrum.R
src/library/stats/R/vcov.R
src/library/stats/src//bandwidths.c
src/appl/maxcol.c

	Copyright (C) various dates W. N. Venables and B. D. Ripley


src/appl/interv.c : moved to API from code originally in
		    src/library/stats/src/bvalue.f, see
		    src/library/stats/COPYRIGHTS.modreg

src/library/stats:

	See the files src/library/stats/COPYRIGHTS.modreg and
	src/library/stats/COPYRIGHTS.portsrc for further details


src/library/stats/R/diffinv.R
src/library/stats/R/embed.R
src/library/stats/R/kernel.R
src/library/stats/src/PPsum.c

	Copyright (C) 1997-1999	 Adrian Trapletti


src/library/stats/R/nls.R

	In part, Copyright 1999-1999 Saikat DebRoy


src/library/stats/R/nlsFunc.R
src/library/stats/R/selfStart.R
src/library/stats/R/zzModels.R

	Copyright 1997,1999 Jose C. Pinheiro, Douglas M. Bates

src/library/stats/R/runmed.R
src/library/stats/src/Trunmed.c

	In part Copyright (C) 1995 Berwin A. Turlach

src/library/stats/src/loessc.c
src/library/stats/src/loessf.f

	In part Copyright (c) 1989, 1992 by AT&T

src/library/stats/R/spline.R

	In part, Copyright (C) 2002 Simon N. Wood

src/library/tcltk/exec/{hierarchy,util*,widget}.tcl

	Copyright (c) various dates Jeffrey Hobbs


src/modules/X11/rotated.[ch]

	Copyright (c) 1993 Alan Richardson


src/appl/loglin.c
src/library/stats/src/chisqsim.c
src/library/stats/src/nscor.c
src/library/stats/src/prho.c
src/library/stats/src/swilk.c
src/library/stats/src/kmns.f
src/library/stats/src/starma.c
src/nmath/pnbeta.c
src/nmath/pnchisq.c
src/nmath/pnt.c
src/nmath/qbeta.c
src/nmath/qgamma.c
src/nmath/qnorm.c
src/nmath/qtukey.c
  are based in whole or in part on Applied Statistics algorithms
  (C) Royal Statistical Society

src/nmath/stirlerr.c
src/nmath/dbinom.c
src/nmath/dpois.c
  are partly based on Catherine/Clive Loader's (1999) work,
  (C) 1999-2000 Lucent Technologies, Bell Laboratories.


src/main/RNG.c

  The Mersenne-Twister part is
  Copyright (C) 1997, 1999 Makoto Matsumoto and Takuji Nishimura.


src/main/xspline.c

 * Copyright (c) 1985-1988 by Supoj Sutanthavibul
 * Parts Copyright (c) 1989-2002 by Brian V. Smith
 * Parts Copyright (c) 1991 by Paul King
 * Parts Copyright (c) 1992 by James Tough
 * Parts Copyright (c) 1998 by Georg Stemmer
 * Parts Copyright (c) 1995 by C. Blanc and C. Schlick
  
 * Any party obtaining a copy of these files is granted, free of charge, a
 * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
 * nonexclusive right and license to deal in this software and
 * documentation files (the "Software"), including without limitation the
 * rights to use, copy, modify, merge, publish and/or distribute copies of
 * the Software, and to permit persons who receive copies from any such 
 * party to do so, with the only requirement being that this copyright 
 * notice remain intact.


src/modules/lapack/dlapack.f, cmplx.f, dlamc.f

  Extracted from
  *  -- LAPACK computational routine (version 3.10.0) --
  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  *     November 2017

  where the version number, providers and date vary by subroutine.
  For version 3.7.0, many of the copyright dates were updated
  even for routines which have not been changed for years.

  LAPACK 3.10.0 contains a LICENSE file, copied to src/modules/lapack
  (but many of these routines were originally copied from earlier
  versions of LAPACK).  For binary distributions it is reproduced here:

  --- src/modules/lapack/LICENSE ---
  Copyright (c) 1992-2021 The University of Tennessee and The University
                          of Tennessee Research Foundation.  All rights
                          reserved.
  Copyright (c) 2000-2021 The University of California Berkeley. All
                          rights reserved.
  Copyright (c) 2006-2021 The University of Colorado Denver.  All rights
                          reserved.

  $COPYRIGHT$

  Additional copyrights may follow

  $HEADER$

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are
  met:

  - Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  - Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer listed
    in this license in the documentation and/or other materials
    provided with the distribution.

  - Neither the name of the copyright holders nor the names of its
    contributors may be used to endorse or promote products derived from
    this software without specific prior written permission.

  The copyright holders provide no reassurances that the source code
  provided does not infringe any patent, copyright, or any other
  intellectual property rights of third parties.  The copyright holders
  disclaim any liability to any recipient for claims brought against
  recipient by any third party for infringement of that parties
  intellectual property rights.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  --- end of src/modules/lapack/LICENSE ---

src/extra/xdr/*

	Copyright (undated) Sun Microsystems, Inc.

	See the file src/extra/xdr/copyrght.txt

src/main/connections.c, src/main/gzio.h

  Contain code derived from the zlib 1.2.3 distribution
  (C) 1995-2005 Jean-loup Gailly and Mark Adler

src/main/dounzip.c, unzip.h

  Contain code Copyright (C) 1998-2010 Gilles Vollant from contrib/minizip
  in the zlib 1.2.3 distribution with updates taken from 1.2.5.


src/main/valid_utf8.h

   Copyright (c) 1997-2012 University of Cambridge

For binary builds of R that requires us to include

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

      * Redistributions of source code must retain the above copyright
	notice, this list of conditions and the following disclaimer.

      * Redistributions in binary form must reproduce the above
	copyright notice, this list of conditions and the following
	disclaimer in the documentation and/or other materials
	provided with the distribution.

      * Neither the name of the University of Cambridge nor the name
	of Google Inc. nor the names of their contributors may be used
	to endorse or promote products derived from this software
	without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGE.


src/extra/tre/LICENSE
src/extra/tre/*.[ch]

Copyright (c) 2001-2009 Ville Laurikari <vl@iki.fi>
All rights reserved.

From tre-0.8.0 (https://laurikari.net/tre/).  See file
src/extra/tre/LICENSE.  For binary builds of R that requires us to
include

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the name of Google
      Inc. nor the names of their contributors may be used to endorse or
      promote products derived from this software without specific prior
      written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

src/extra/tzone/strftime.c
/*
  Based on code from tzcode, which is turn said to be
  'Based on the UCB version with the copyright notice appearing below.'

** Copyright (c) 1989 The Regents of the University of California.
** All rights reserved.
**
** Redistribution and use in source and binary forms are permitted
** provided that the above copyright notice and this paragraph are
** duplicated in all such forms and that any documentation,
** advertising materials, and other materials related to such
** distribution and use acknowledge that the software was developed
** by the University of California, Berkeley. The name of the
** University may not be used to endorse or promote products derived
** from this software without specific prior written permission.
** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/


src/library/tools/src/md5.[ch]

    Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.


src/extra/intl/*

Based on gettextize from gettext 0.17
   Copyright (C) various dates Free Software Foundation, Inc.
   Distributed under the GNU Library General Public License
   version 2 or later.

src/include/vg/memcheck.h
src/include/vg/valgrind.h

From valgrind 3.10.1,

   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.


src/main/mkdtemp.c

From glibc via
http://lists.gnu.org/archive/html/bug-gnulib/2003-02/msg00019.html

   Copyright (C) 1999, 2001-2003 Free Software Foundation, Inc.
   Distributed under the GNU Library General Public License
   version 2 or later.

src/main/Rstrptime.h

   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
   Distributed under the GNU Library General Public License
   version 2 or later.

src/library/*/po/*.po

   Some of the translations are (C) the translator as marked in the files.

COPYING
doc/COPYING
doc/COPYING.LIB
m4/codeset.m4
m4/gettext.m4
m4/gettext-lib.m4
share/licenses/GPL-2
share/licenses/GPL-3
share/licenses/LGPL-2
share/licenses/LGPL-2.1
share/licenses/LGPL-3
src/main/strdup.c
tools/config.rpath
tools/help2man.pl
tools/ltmain.sh
tools/mdate-sh
tools/missing

   Copyright various dates Free Software Foundation

m4/openmp.m4
  Copyright (C) 2001-2012 Free Software Foundation, Inc.
  Copyright (C) 2015-2016 R Core Team

  Under GPL-3 with the Autoconf Configure Script Exception, version 3.0.

tools/config.quess
tools/config.sub

   Copyright 1992-2019 Free Software Foundation.  
   The Exception to GPL-3 applies.

tools/install-sh

   Copyright (C) 1994 X Consortium

tools/uniset

is by Marcus Kuhn (https://www.cl.cam.ac.uk/~mgk25/) but contains
neither licence nor copyright claim.

m4/cxx.m4
Based on ax_cxx_compile_stdcxx.m4
#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
#   Copyright (c) 2015 Paul Norman <penorman@mac.com>
#   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
#   Copyright (c) 2016 Krzesimir Nowak <qdlacz@gmail.com>
#   Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
#   Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
#
#   Copying and distribution of this file, with or without modification, are
#   permitted in any medium without royalty provided the copyright notice
#   and this notice are preserved.  This file is offered as-is, without any
#   warranty.


m4/stat-time.m4

From GNU coreutils 8.12
# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2011 Free Software
# Foundation, Inc.

# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

src/main/gram.y
src/main/gram.c

Portions of these files are based on the parser package,

   Copyright (C) 2009--2011  Romain Francois
   

Some of the files in src/appl were originally taken from the Netlib
archive now at www.netlib.org and do not clearly state their
copyright status.

src/appl/{dchdc,dpfa,dpbsl,dpoco,dpodi,dpofa,dposl,dqrdc,
          dqrsl,dsvdc,dtrco,dtrsl}.f 

are part of LINPACK, with authors J.J. Dongarra, Cleve Moler and
G.W. Stewart

src/appl/dqrdc2.f is based on dqrdc.f by G.W. Stewart.

src/appl/lbfgsb.c is based on the work of Zhu, Byrd, Lu-Chen and
Nocedal, which does not state any copyright.

src/main/radixsort.c is largely based on code from the data.table package,

   Copyright (C) 2006--2015  Matt Dowle and Arun Srinivasan

doc/html/Rlogo.svg
doc/html/Rlogo.pdf
doc/html/logo.jpg
doc/html/favicon.ico
src/modules/X11/rlogo_icon.h
src/gnuwin32/front-ends/R.ico
src/gnuwin32/installer/R.bmp

   Copyright (C) 2015-2016 The R Foundation
   
   You can distribute the logo under the terms of the Creative
   Commons Attribution-ShareAlike 4.0 International license (CC-BY-SA
   4.0) or (at your option) the GNU General Public License version 2
   (GPL-2).

   The design of the current logo is based on the previous logo that
   was included in the R source from 1998 to 2016.


doc/html/prism.js
doc/html/prism.css

   Downloaded from https://prismjs.com/download.html

   Prism (https://github.com/PrismJS/prism) is Copyright (c) 2012 Lea
   Verou and is distributed under the MIT license (see the above
   files for a copy).

doc/html/katex/*
doc/html/katex/fonts/*

   Downloaded from https://github.com/KaTeX/KaTeX/releases

   KaTeX (https://github.com/KaTeX/KaTeX) is Copyright (c) 2013-2020
   Khan Academy and other contributors, and is distributed under the
   MIT license. See doc/html/katex/LICENSE for a copy.


	---------------------------------------------------

Binary distributions of R may include compiled code from the PCRE2
library whose licence is:

THE BASIC LIBRARY FUNCTIONS
---------------------------

Written by:       Philip Hazel
Email local part: ph10
Email domain:     cam.ac.uk

University of Cambridge Computing Service,
Cambridge, England.

Copyright (c) 1997-2020 University of Cambridge
All rights reserved.


PCRE2 JUST-IN-TIME COMPILATION SUPPORT
--------------------------------------

Written by:       Zoltan Herczeg
Email local part: hzmester
Email domain:     freemail.hu

Copyright(c) 2010-2020 Zoltan Herczeg
All rights reserved.


STACK-LESS JUST-IN-TIME COMPILER
--------------------------------

Written by:       Zoltan Herczeg
Email local part: hzmester
Email domain:     freemail.hu

Copyright(c) 2009-2020 Zoltan Herczeg
All rights reserved.

THE "BSD" LICENCE
-----------------

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notices,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notices, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of any
      contributors may be used to endorse or promote products derived from this
      software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.


EXEMPTION FOR BINARY LIBRARY-LIKE PACKAGES
------------------------------------------

The second condition in the BSD licence (covering binary redistributions) does
not apply all the way down a chain of software. If binary package A includes
PCRE2, it must respect the condition, but if package B is software that
includes package A, the condition is not imposed on package B unless it uses
PCRE2 independently.


Or they may include compiled code from the PCRE library whose licence
is:

  THE BASIC LIBRARY FUNCTIONS
  ---------------------------
  Written by:       Philip Hazel
  Email local part: ph10
  Email domain:     cam.ac.uk

  University of Cambridge Computing Service, Cambridge, England.

  Copyright (c) 1997-2015 University of Cambridge
  All rights reserved.

  PCRE JUST-IN-TIME COMPILATION SUPPORT
  -------------------------------------
  Written by:       Zoltan Herczeg
  Email local part: hzmester
  Emain domain:     freemail.hu

  Copyright(c) 2010-2015 Zoltan Herczeg
  All rights reserved.

  STACK-LESS JUST-IN-TIME COMPILER
  --------------------------------
  Written by:       Zoltan Herczeg
  Email local part: hzmester
  Emain domain:     freemail.hu

  Copyright(c) 2009-2015 Zoltan Herczeg
  All rights reserved.

  THE C++ WRAPPER FUNCTIONS
  -------------------------
  Contributed by:   Google Inc.

  Copyright (c) 2007-2012, Google Inc.
  All rights reserved.


  THE "BSD" LICENCE
  -----------------

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

      * Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

      * Redistributions in binary form must reproduce the above
        copyright notice, this list of conditions and the following
        disclaimer in the documentation and/or other materials
        provided with the distribution.

      * Neither the name of the University of Cambridge nor the name
        of Google Inc. nor the names of their contributors may be used
        to endorse or promote products derived from this software
        without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGE.

	---------------------------------------------------
